Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

errori in MPLAB

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 19 feb 2012, 19:35

E non sono a casa magari domani lo provo e ti faccio sapere
;-) ;-)
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[12] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 20 feb 2012, 12:27

Il tuo progetto vieno assemblato bene, anche se escono alcuni message 302 in cui mi vene detto che l'operando usato non è nel banco 0 e alcuni warning 207 in cui mi viene detto che è stata trovata una label che non è nelle prima colonna......

L'importante è che sia riuscito ad assemblarlo

grazie mille per l'aiuto
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

1
voti

[13] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 20 feb 2012, 14:13

andrew93 ha scritto:Il tuo progetto vieno assemblato bene...

Calma, calma, è il TUO progetto ;-)

andrew93 ha scritto:...anche se escono alcuni message 302 in cui mi vene detto che l'operando usato non è nel banco 0...

normale: verifica che ci siano i comandi di "banksel".

andrew93 ha scritto:...e alcuni warning 207 in cui mi viene detto che è stata trovata una label che non è nelle prima colonna......

controlla l'indentazione!

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[14] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 20 feb 2012, 14:23

Sarà anche mio ma senza il tuo aiuto non sarei andato da nessuna parte...
I comandi di banksel ci sono e l'indentazione è ok, ma fa niente tento viene assemblato ugualmente.
Mi è venuto solo un ultimo dubbio riguardo la simulazione in MPLAB: se io lancio la simulazione con anche gli stimolus, il programma mi si blocca nella label della folle, mentre se quella la salto mi va avanti da soloin automatico. Il fatto che non funzioni nella simulazione non vuol dire che non funzioni neanche nella realtà vero??
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

1
voti

[15] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 21 feb 2012, 21:29

Ho indentato ancora le direttive ORG e CONFIG ma il warning [207] non ce l'ho.
Sul fatto che la simulazione si fermi, non sarei molto tranquillo...! Controlla bene che non ci siano altri errori di trascrizione. Il rischio è che poi, davvero, non funzioni nulla.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[16] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 24 feb 2012, 21:28

Avrei ancora un'ultima cosa da chiederti, che però non c'entra più con il problema precedente. Il problema è che trovandomi a scrivere un altro programma mi si presenta il problema di dover confrontare tre dati: uno è il risultato della conversione analogico digitale (10 bit) e gli altri sarebbero due soglie una superiore e una inferiore. Come si fa a fare questo confronto in assebler?
mi scuso della mia ignoranza in materia :)
grazie mille!!

andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

1
voti

[17] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 25 feb 2012, 9:20

Ti lascio lo spunto, prova a vedere se riesci a stendere due righe autonomamente. Poi se ti trovi ancora nel pantano, vediamo che fare.
Dunque, lo spunto è il seguente.

In assembly non sono disponibili i comandi per un cofronto, pertanto è necessario eseguire una semplice operazione matematica: la sottrazione. Supponi di avere tre numeri: SogliaSup, SogliaInf, ValoreADC. La sottrazione:
\[ris=SogliaSup-ValoreADC\]
è tale per cui potresti avere tre risultati utili:
\[ris<0\]
\[ris=0\]
\[ris>0\]
Nel caso in cui \[ris<0\] allora è vero che \[SogliaSup<ValoreADC\] e quindi siamo sotto la soglia superiore. Ma come implementare questa funzione e accorgersi che il risultato è quello desiderato? Tutti i microcontrollori e microprocessori dispongono di registri di STATUS nei quali vengono settati alcuni bit per indicare il risultato logico di talune operazioni. Tra i bit più significativi ti ricordo:
- C, bit di CARRY (riporto)
- Z, bit di ZERO

Se una sottrazione ha come risultato zero, il bit Z viene settato. Se una sottrazione ha come risultato un numero minore di zero, il bit C viene settato.

Pertanto il trucco è quello di andare a vedere il valore di questi bit e prendere decisioni in base al valore che si trova. Quindi, una bozza di routine "Confronto" potrebbe essere questa:
Codice: Seleziona tutto
Confronto
    movfw ValoreADC
    subwf SogliaSup
    bc MinoreSogliaSup

OltreSup
; il valore acquisito ValoreADC è maggiore della soglia
...
...
...
    goto FineConfronto

MinoreSogliaSup
; il valore acquisito è sotto la soglia
...
...
...

FineConfronto
    RET

L'istruzione bc esegue un salto condizionato se c'è carry (Branch if Carry is set), a una label indicata.

Ovviamente dovrai completare questa routine e implementare quella del confronto con la soglia inferiore.

Se avessi fatto il confronto in C, sarebbe stato decisamente più semplice: bastava usare gli operatori <,= e >
Il "lavoro sporco" lo avrebbe fatto il compilatore ;-)

Ma sono convinto che, soprattutto per chi è all'inizio, un po' di assembly male non fa, anche perché così si capisce bene come lavora il micro e quale sia la logica che sta dietro.

Fammi sapere.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[18] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 25 feb 2012, 20:08

se al posto dell'istruzione bc usassi btfss (test del bit del registro f salta l'istruzione successiva se il bit è settato)??
ed un'ultima cosa: si il risultato dell'ADC è diviso in due registri cambia tanto a livello software?? o sono solo un paio di righe in più di programma, nel sensoche prima faccio il confronto di una parte del risultato con la soglia superiore e poi se non corrisponde, con quella minore. lo stesso processo lo posso fare con l'altra parte di risultato.

andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

1
voti

[19] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 26 feb 2012, 22:24

andrew93 ha scritto:se al posto dell'istruzione bc usassi btfss (test del bit del registro f salta l'istruzione successiva se il bit è settato)??

Certamente! In tal caso dovresti scrivere qualcosa del tipo:
Codice: Seleziona tutto
btfss STATUS,C


andrew93 ha scritto:il risultato dell'ADC è diviso in due registri cambia tanto a livello software?? o sono solo un paio di righe in più di programma, nel sensoche prima faccio il confronto di una parte del risultato con la soglia superiore e poi se non corrisponde, con quella minore.


Le cose sono "leggermente" diverse, se il confronto lo fai su dati a 10 bit. Come hai giustamente notato, devi confrontare un dato su due byte. Un modo di procedere, in questo caso, potrebbe essere il seguente: se la parte alta di entrambi i dati (risultato e soglia) sono uguali, allora confronto la parte bassa come abbiamo indicato nel post [17].



Se invece i byte alti sono differenti, i casi possibili sono nove:

parte alta di ValoreADC = 10
parte alta di SogliaSup = 00

parte alta di ValoreADC = 10
parte alta di SogliaSup = 01

parte alta di ValoreADC = 10
parte alta di SogliaSup = 11


parte alta di ValoreADC = 01
parte alta di SogliaSup = 00

parte alta di ValoreADC = 01
parte alta di SogliaSup = 10

parte alta di ValoreADC = 01
parte alta di SogliaSup = 11


parte alta di ValoreADC = 11
parte alta di SogliaSup = 00

parte alta di ValoreADC = 11
parte alta di SogliaSup = 10

parte alta di ValoreADC = 11
parte alta di SogliaSup = 01

Spero di non averti confuso le idee.. ;-)
Fammi sapere.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[20] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 27 feb 2012, 19:23

No no no, confuse no di certo!!!!
Sinceramente non avevo nemmeno tenuto conto di tutti quei casi......hihihihihi
Ho provato a buttare gìù una bozzetta di listato che poi, dopo averla compilata e sistemati gli errori, provvederò a postare per discuterne un attimo sulla giustezza del listato e dell'insieme.
Per ora grazie per l'aiuto :ok:

andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti