Ancora una volta a chiedere aiuto.
Sto eseguendo la lettura di un trasduttore volumetrico per leggere i litri di acqua con uscita open collector abilitando l'interrupt INT0 sul pin RB0. Tutto funziona perfettamente ( l'ho abilitato sul fronte di discesa) ma, volendo fare un deounce pensavo di riuscire a leggere il pin RB0 ma niente, riesco solamente a leggere il registro LAT del pin corrispondente. Per quale motivo non riesco a leggere il pin leggendo il registro PORTB ? Il micro è un PIC18F46K22. Grazie
Stranezza lettura pin RB0/INT0 del PIC18
Moderatore:
Paolino
9 messaggi
• Pagina 1 di 1
0
voti
Si, la faccio proprio all'interno dell'interrupt.
-

ivanpascolo
20 3 - New entry

- Messaggi: 71
- Iscritto il: 29 set 2014, 20:44
0
voti
E' solo una prova: esegui l'interrogazione del pin fuori dalla routine di interrupt quando una variabile si trova ad determinato stato logico che, naturalmente, è stato impostato all'interno della routine stessa quando ci sei entrato per gestire il tuo evento in causa; lo stato logico, subito a seguire, bisogna ricordarsi di annullarlo.
Saluti
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
Nella ISR prova a copiare il contenuto di PORTB su di una variabile:
Ciao.
Paolo.
- Codice: Seleziona tutto
myportB = PORTB;
if ((myportB&0x01) == 0)
{
/* metti qui il tuo codice */
}
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
1
voti
Grazie per i suggerimenti ....ma ho trovato l'inghippo.
Vi spiego il tutto perché è un'esperienza che potrebbe tornare utile.
Il volumetrico ha in uscita un transistor open collector che ho collegato a 3v3 con una 4k7, dopodiché dal collettore ho fatto un RC con una 4k7 e un 100nF, da qui entro nel micro con un'altra 4k7.
Ho abilitato l'interrupt sul fronte di discesa e subito dopo l'evento volevo testare per 20 volte il PORTB0 per verificare se era sempre a zero (l'ho fatto come filtro in caso di impulsi indesiderati).
La lettura del LATB lasciamo stare, ho preso fischi per fiaschi.
In pratica arrivava l'interrupt sul fronte di discesa ma ... sul PORTB0 nente livello basso.
Allora leggo i fogli tecnici e vedo che l'ingresso INT0 ha una soglia di intervento diversa da quella della porta, precisamente INT0 interviene a circa 0,65 volt mentre il PORTB a circa 0,5v.
Con l'oscilloscopio vedo che la mia onda quadra per passare da 0,65 a 0,5V impiega la bellezza di 200us, molto di più del tempo necessario per i 20 cicli di filtro che ho fatto.
Per avere una conferma, appena entrato nella funzione di interrupt metto un ritardo di 100us prima delle 20 letture e ... giustamente niente da fare. A questo punto metto 200us ed ecco che sul PORTB0 riesco a fare le mie 20 letture.
Visto che il ritardo di 200us è troppo, cambio il condensatore con uno da 330pF (ora il tempo per passare da 0,65v a 0,5v è diventato circa 1us) e con un ritardo in ingresso di 5us tutto funziona.
Il micro è un 18F46K22 con oscillatore impostato a 64MHz e quindi i cicli duravano davvero poco.
Spero di essere stato chiaro ma soprattutto utile.
Un saluto.
Vi spiego il tutto perché è un'esperienza che potrebbe tornare utile.
Il volumetrico ha in uscita un transistor open collector che ho collegato a 3v3 con una 4k7, dopodiché dal collettore ho fatto un RC con una 4k7 e un 100nF, da qui entro nel micro con un'altra 4k7.
Ho abilitato l'interrupt sul fronte di discesa e subito dopo l'evento volevo testare per 20 volte il PORTB0 per verificare se era sempre a zero (l'ho fatto come filtro in caso di impulsi indesiderati).
La lettura del LATB lasciamo stare, ho preso fischi per fiaschi.
In pratica arrivava l'interrupt sul fronte di discesa ma ... sul PORTB0 nente livello basso.
Allora leggo i fogli tecnici e vedo che l'ingresso INT0 ha una soglia di intervento diversa da quella della porta, precisamente INT0 interviene a circa 0,65 volt mentre il PORTB a circa 0,5v.
Con l'oscilloscopio vedo che la mia onda quadra per passare da 0,65 a 0,5V impiega la bellezza di 200us, molto di più del tempo necessario per i 20 cicli di filtro che ho fatto.
Per avere una conferma, appena entrato nella funzione di interrupt metto un ritardo di 100us prima delle 20 letture e ... giustamente niente da fare. A questo punto metto 200us ed ecco che sul PORTB0 riesco a fare le mie 20 letture.
Visto che il ritardo di 200us è troppo, cambio il condensatore con uno da 330pF (ora il tempo per passare da 0,65v a 0,5v è diventato circa 1us) e con un ritardo in ingresso di 5us tutto funziona.
Il micro è un 18F46K22 con oscillatore impostato a 64MHz e quindi i cicli duravano davvero poco.
Spero di essere stato chiaro ma soprattutto utile.
Un saluto.
-

ivanpascolo
20 3 - New entry

- Messaggi: 71
- Iscritto il: 29 set 2014, 20:44
0
voti
prego.ivanpascolo ha scritto:Grazie per i suggerimenti
sono esperienze dirette che una volta condivise credo possano essere certo di aiuto ad altri.ivanpascolo ha scritto:Spero di essere stato chiaro ma soprattutto utile.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
Grazie per l'esplicazione della soluzione.
Questo è uno di quei "classici" casi che si risolveva in un attimo se ci fosse stato uno schema elettronico.
Questo è uno di quei "classici" casi che si risolveva in un attimo se ci fosse stato uno schema elettronico.
9 messaggi
• Pagina 1 di 1
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 2 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)