Newsgroup: it.hobby.elettronica.digitale
Titolo: Pic 16f84, è normale che all'accensione del circuito le I/O diano un'impulso?

Ciao, con un'amico ho fatto un programmino su pic 16f84 (una serratura
elettronica con tastiera),
ma quando alimento il circuito le linee di uscita danno un'impulso
brevissimo per poi posizionarsi nel modo giusto.
E' normale o sbagliamo qualcosa?
Grazie.
Saluti da Agide.

 ha scritto nel messaggio
news:gFyW4.32718$EY1.3...@news.infostrada.it...


 E' normale o sbagliamo qualcosa?
Puo` darsi che prima impostiate la direzione scrivendo su TRISx, e solo
dopo "azzeriate" le uscite scrivendo su PORTx. Invece bisogna fare il
contrario (i latch di uscita mantengono i dati anche quando i pin sono
settati come input, provare per credere).
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

 settati come input, provare per credere).
Secondo mamma Microchip i pin all'accensione sono tutti ingressi quindi non
ha importanza a che stato si trovano i latch d'uscita visto che è il
circuito che impone lo stato.
Le porte inoltre vengono date, sempre all'accensione, come non definibili
(suona meglio unknow?!?!).
Per questo motivo è sempre meglio prevedere delle pull-up o delle pull-down
che fissano, e non solo all'accensione, lo stato di default degli ingressi.
Ciao, Botte!




 circuito che impone lo stato.
Chiaramente. Ma se tu imposti prima TRISx e poi PORTx, per un breve
periodo i segnali di uscita assumeranno un livello diverso da quello che
gli vuoi assegnare... se invece imposti prima PORTx e poi TRISx, non
appena i pin andranno in bassa impedenza assumeranno direttamente lo
stato logico voluto (per ulteriori informazioni date un occhio agli
schemi dei pin PORTx sul datasheet: gli ingressi vengono campionati
direttamente, non ci sono latch bidirezionali).


 direttamente, non ci sono latch bidirezionali).
Purtroppo non sono d'accordo (anche se sui DS mettono prima il clrf PORTX e
poi impostino il TRISX).
Guardando lo sche delle porte (con uscita CMOS) chi comanda è il latch di
direzione che inibisce (se settato come ingresso) l'ouput del latch del
dato.
All'accensione i pin sono impostati come ingressi quindi si trovano tutti
nello stato ad alta impedenza, dove è l'HW del circuito che detta legge.
Se il problema fosse la sequenza di setup delle porte (prima il tris poi il
clrf PORTX o viceversa) bisognerebbe essere dei maghi per notare quei pochi
microsecondi che intercorrono tra un'istruzione e l'altra.
Il disguido sembra essere piuttosto il power up timer che tiene sospeso il
micro mentre il circuito và a regime, dove ogni transitorio può causare
effetti strani e indesiderati.
La cosa è facilmente riscontrabile perchè è sufficiente osservare se in
presenza di un reset (a circuito avviato ovviamente) sul master clear
l'effetto si ripresenta.
Se questo non accade allora la mia ipotesi è corretta altrimenti ho preso un
granchio mostruoso.
Di solito all'avvio è sempre salutare aspettare un pò prima di far lavorare
il programma in modo da avere tuttto l'hw già stabilizzato.
Ciao, Botte!

 stabilizzato.
Questo e` verissimo. Addirittura su una qualche application note (non
ricordo quale) consigliano di verificare le scritture su TRISx e PORTx
fatte subito dopo il reset, perche` e` possibile che ogni tanto tali
scritture vengano ignorate.



Ciao, scusa il ritardo ma ho letto solo ora le risoposte, appena torno al
lavoro (lunedi' sigh..) ti mando il file .asm del mio progetto, piu' che
altro del mio amico visto che quello che ci capisce di piu' e' lui, cosi'
provo anche ad utilizzare i suggerimenti avuti dai ragazzi del newsgroup,
anzi ne approfitto per ringraziare tutti della cortese collaborazione.
Saluti da Agide.

 scritture vengano ignorate.
La Microchip dichiara ufficialmente che questo controllo dei latch deve
essere assolutamente effettuato.
Ciao, Botte!
P.S. Era da tanto che non trovavo uno con cui discutere, complimenti!
P.P.S. Per curiosità Agide, mi manderesti le righe di startup del programma
e lo schema elettrico (se puoi mandarmi tutto il fw meglio), voglio capire
perchè, magari alla fine darò ragione a Lorenzo.


Ciao, ho provato a inserire le istruzioni clr PORTA e clr PORTB all'inizio
del programma e le linee di uscita all'accensione sono rimaste spente, ti
ringrazio molto per il consiglio, comunque mettero' ugualmente le resistenze
di pullup anche se nei datasheet non ne parlano...
Saluti da Agide.

 operare.  [...]
Il fatto e` che stiamo entrambi dicendo cose giuste, ma non ci capiamo.
:-)
Tu dici che all'accensione tutti i pin del PIC sono settati come input
(giusto), mentre io dico una cosa ugualmente vera, ma che non c'entra
strettamente. Prendi questo codice inserito all'inizio della procedura
di reset:
bsf STATUS,RP0
movlw 0
movwf TRISA
bcf STATUS,RP0
movlw b'11111111'
movwf PORTA
[...]
In questo caso avrai un transitorio (fra la scrittura di TRISA e quella
di PORTA) in cui le uscite assumeranno lo stato precedentemente
memorizzato nel latch, ossia tutti 0. Di fatto questo transitorio
potrebbe essere considerato come un fronte di discesa da qualche logica
esterna impertinente... poi siamo d'accordo sul fatto che mettendo una
resistenza di pulldown si risolverebbe il problema; ma si risolve
ugualmente anche agendo semplicemente sul software:
movlw b'11111111'
movwf PORTA
bsf STATUS,RP0
movlw 0
movwf TRISA
bcf STATUS,RP0
[...]
Cosi` quando imposti i pin come uscita i latch contengono gia` il valore
giusto.
