PCF8574, LCD HD44780 e 3.3 / 5V
12 Anni 10 Mesi fa #1
da Gianni
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
PCF8574, LCD HD44780 e 3.3 / 5V è stato creato da Gianni
Sto progettando una scheda+libreria per poter utilizzare gli LCD HD44780 sfruttando l'I2C, attraverso un IO expander PCF8574.
Dal momento che ho intenzione di sfruttare l'intero accrocco per lavorare con sia con le logiche a 3.3V che con quelle a 5V la questione è la seguente:
Tenendo conto che:
- gli LCD HD44780 si trovano per il 99,9% funzionanti esclusivamente a 5V, esistono quelli a 3.3V ma sono difficili da trovare e in più è poi un macello interfacciarli a 5V
- il PCF8574 ha un range di tensione abbastanza esteso per cui può funzionare indifferentemente a 3.3V e a 5V
- i livelli logici sono compatibili: un segnale a 3.3V viene visto come livello alto da una logica a 5V
facciamo le seguenti ammissioni:
- ammettiamo di alimentare il PCF8574 a 3.3V, in modo da poterlo pilotare con una logica a 3.3V
- ammettiamo di alimentare il display a 5V e di interfacciarlo con il PCF8574 di prima.
in teoria, sfruttando il display in sola scrittura come si è soliti fare, dovrebbe funzionare tutto: l'I/O expander fornisce dei livelli alti a 3.3V che il display interpreta correttamente, per cui penso che fino a qui non ci sono problemi, non ho provato ancora ma sono sicuro che funziona.
Ora: è oramai noto che per essere sicuri che tutti i display funzionino correttamente, bisogna testare il flag di busy, altrimenti ogni volta tocca modificare le librerie e modificare alcuni ritardi. Per testare il flag di busy il display deve essere letto. In particolare il segnale di busy viene restituito sulla linea DB7.
La domanda nasce spontanea: Il PCF8574 (a 3.3V) segnala al display (5V) di volerlo leggere, il display "obbedisce" e se è occupato restituisce un livello alto a 5V su DB7. Il PCF8574, alimentato a 3.3V, lo reggerà questo livello di 5V?
Sono in dubbio, perchè da una parte è vero che il PCF8574 può funzionare fino a 7V, però lo stiamo alimentando a 3.3V. Leggendo il datasheet (www.ti.com/lit/ds/scps068g/scps068g.pdf) pare che sia possibile farlo, dice difatti che
Vi (tensione di input) può essere massimo Vcc+0.5 (quindi 3.8V in questo caso) ma la nota afferma
"The input negative-voltage and output voltage ratings may be exceeded if the input and output current ratings are observed.", trattandosi solo di segnali gli assorbimenti sono al minimo per cui si dovrebbe rientrare.
Voi che ne pensate? Esperienze in merito?
Dal momento che ho intenzione di sfruttare l'intero accrocco per lavorare con sia con le logiche a 3.3V che con quelle a 5V la questione è la seguente:
Tenendo conto che:
- gli LCD HD44780 si trovano per il 99,9% funzionanti esclusivamente a 5V, esistono quelli a 3.3V ma sono difficili da trovare e in più è poi un macello interfacciarli a 5V
- il PCF8574 ha un range di tensione abbastanza esteso per cui può funzionare indifferentemente a 3.3V e a 5V
- i livelli logici sono compatibili: un segnale a 3.3V viene visto come livello alto da una logica a 5V
facciamo le seguenti ammissioni:
- ammettiamo di alimentare il PCF8574 a 3.3V, in modo da poterlo pilotare con una logica a 3.3V
- ammettiamo di alimentare il display a 5V e di interfacciarlo con il PCF8574 di prima.
in teoria, sfruttando il display in sola scrittura come si è soliti fare, dovrebbe funzionare tutto: l'I/O expander fornisce dei livelli alti a 3.3V che il display interpreta correttamente, per cui penso che fino a qui non ci sono problemi, non ho provato ancora ma sono sicuro che funziona.
Ora: è oramai noto che per essere sicuri che tutti i display funzionino correttamente, bisogna testare il flag di busy, altrimenti ogni volta tocca modificare le librerie e modificare alcuni ritardi. Per testare il flag di busy il display deve essere letto. In particolare il segnale di busy viene restituito sulla linea DB7.
La domanda nasce spontanea: Il PCF8574 (a 3.3V) segnala al display (5V) di volerlo leggere, il display "obbedisce" e se è occupato restituisce un livello alto a 5V su DB7. Il PCF8574, alimentato a 3.3V, lo reggerà questo livello di 5V?
Sono in dubbio, perchè da una parte è vero che il PCF8574 può funzionare fino a 7V, però lo stiamo alimentando a 3.3V. Leggendo il datasheet (www.ti.com/lit/ds/scps068g/scps068g.pdf) pare che sia possibile farlo, dice difatti che
Vi (tensione di input) può essere massimo Vcc+0.5 (quindi 3.8V in questo caso) ma la nota afferma
"The input negative-voltage and output voltage ratings may be exceeded if the input and output current ratings are observed.", trattandosi solo di segnali gli assorbimenti sono al minimo per cui si dovrebbe rientrare.
Voi che ne pensate? Esperienze in merito?
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Gianni
- Autore della discussione
- Elite Member
Riduci
Di più
12 Anni 10 Mesi fa #2
da peppers
Risposta da peppers al topic Re: PCF8574, LCD HD44780 e 3.3 / 5V
Ciao Giovanni,
sempre a smanettare!
la butto li: metterci il solito partitorino di tensione sulla linea di busy?
magari con un jumper verso massa per abilitarlo / disabilitarlo all'occorrenza...
Viviamo in un era ibrida, solo pochi anni fa non vi erano questi problemi... anzi ce ne erano molti altri..!
Alcuni mesi fa ho fatto una schedina con un 16f887 + accelerometro (BTA180 in i2c) + 24lc256 e un Xbee tutto alimentato a 3.3v, mentre per visualizzare i dati utilizzavo un display 128.64 ks108 compatibile alimentato a 5V...
Come sai nelle routine di gestione del display viene testato il busy per controllare se il display
si sta facendo ancora gli affari suoi, prima di inviargli un'altro dato o comando...
quindi il pic alimentato a 3.3v si ciucciava un bel 5v...bene...
tutto funzionava correttamente senza alcun problema... maaa...si romperà?
Questa purtroppo è la mia unica e scarsa esperienza che si può un pò avvicinare alla situazione prima esposta..
Saluti
Pier
sempre a smanettare!
la butto li: metterci il solito partitorino di tensione sulla linea di busy?
magari con un jumper verso massa per abilitarlo / disabilitarlo all'occorrenza...
Viviamo in un era ibrida, solo pochi anni fa non vi erano questi problemi... anzi ce ne erano molti altri..!
Alcuni mesi fa ho fatto una schedina con un 16f887 + accelerometro (BTA180 in i2c) + 24lc256 e un Xbee tutto alimentato a 3.3v, mentre per visualizzare i dati utilizzavo un display 128.64 ks108 compatibile alimentato a 5V...
Come sai nelle routine di gestione del display viene testato il busy per controllare se il display
si sta facendo ancora gli affari suoi, prima di inviargli un'altro dato o comando...
quindi il pic alimentato a 3.3v si ciucciava un bel 5v...bene...
tutto funzionava correttamente senza alcun problema... maaa...si romperà?
Questa purtroppo è la mia unica e scarsa esperienza che si può un pò avvicinare alla situazione prima esposta..
Saluti
Pier
Si prega Accedi o Crea un account a partecipare alla conversazione.
- peppers
- Visitatori
12 Anni 10 Mesi fa #3
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: PCF8574, LCD HD44780 e 3.3 / 5V
Ciao Giovanni,
Una libreria simile avevo pensato di farla anche io, unendo le due librerie che ho gia' fatto.
Per la problematica della tensione in ingresso non devi andare sopra Vcc + 0.5V.
Il fatto di poter funzionare fino a 7V e' indipendente e se lavori a tensioni piu' basse devi usare questo valore come Vcc al quale sommare 0.5V. Il valore 0.5V discende dal diodo interno utilizzato come protezione ESD (vedi la BN0001: Utilizzo del diodo per proteggere i sistemi elettronici ). E' questo diodo che ti vincola quindi a non andare oltre Vcc+0.5V.
Relativamente alla nota mi sembra strano che l'abbiano scritta. In un certo qual modo sarebbe valido per qualunque IC (vedi Figura 4 della Brief Note precedente). Mettendo un resistore che limiti la corrente nel diodo di protezione tutto funzionerebbe, ma nel normale funzionamento faresti uso della protezione interna e non e' buona cosa farne uso per un normale funzionamento. Per tale ragione ti consiglio di adattare i livelli esternamente (traslatori di livello, partitore di tensione).
Saluti,
Mauro
Una libreria simile avevo pensato di farla anche io, unendo le due librerie che ho gia' fatto.
Per la problematica della tensione in ingresso non devi andare sopra Vcc + 0.5V.
Il fatto di poter funzionare fino a 7V e' indipendente e se lavori a tensioni piu' basse devi usare questo valore come Vcc al quale sommare 0.5V. Il valore 0.5V discende dal diodo interno utilizzato come protezione ESD (vedi la BN0001: Utilizzo del diodo per proteggere i sistemi elettronici ). E' questo diodo che ti vincola quindi a non andare oltre Vcc+0.5V.
Relativamente alla nota mi sembra strano che l'abbiano scritta. In un certo qual modo sarebbe valido per qualunque IC (vedi Figura 4 della Brief Note precedente). Mettendo un resistore che limiti la corrente nel diodo di protezione tutto funzionerebbe, ma nel normale funzionamento faresti uso della protezione interna e non e' buona cosa farne uso per un normale funzionamento. Per tale ragione ti consiglio di adattare i livelli esternamente (traslatori di livello, partitore di tensione).
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 10 Mesi fa #4
da Gianni
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Risposta da Gianni al topic Re: PCF8574, LCD HD44780 e 3.3 / 5V
Mentre continuo gli esperimenti, come mio solito mi documento a piu non posso e volevo segnare questa fantastica AN della NXP che è eccezionale, toglie ogni dubio sul funzionamento di tantissimi io expander:
ics.nxp.com/support/documents/interface/pdf/an469.pdf
In particolare questa AN mi è stata utile per capire il perfetto funzionamento degli IO expander in lettura e scrittura. Su questa questione avevo difatti alcuni dubbi e ho capito che per utilizzare gli IO in lettura bisogna metterli a 1. Gli IO difatti sono "quasi" bidirezionali e vanno a 1 con una resistenza di pullup molto debole, per cui ponendo un IO a 1, se il dispositivo collegato deve leggere lo stato logico 1, lo legge, ma se il dispositivo collegato tira fuori un livello logico, puo forzare il pin dell' IO expander a 1 o a zero.
In aggiunta, ho trovato moltissimi altri io expander, molti dei quali sono 5V tolerant anche a tensioni piu basse, per cui il problema è facilmente risolvibile con questi senza ricorrere ad altri componenti esterni, uno è il PCA9555.
Nelle FAQ su questa application note si legge, in aggiunta, piu o mneo la stessa domanda che ho fatto io:
Question: I want to use a PCA9555 in a 5 V supply voltage environment and have it
communicating with a 3.3 V master device. Do I need voltage level translators for the
I2C signals to allow proper communication?
Answer: No, the PCA9555 can communicate with a 3.3 V master device while its own
power supply is at 5 V with reduced upper-level noise margins.
Però la cosa mi appare strana: in questo modo, quando il PCA95555 sarà letto, sulla linea SDA manderà dei segnali a 5V dato che è alimentato a 5V...
ics.nxp.com/support/documents/interface/pdf/an469.pdf
In particolare questa AN mi è stata utile per capire il perfetto funzionamento degli IO expander in lettura e scrittura. Su questa questione avevo difatti alcuni dubbi e ho capito che per utilizzare gli IO in lettura bisogna metterli a 1. Gli IO difatti sono "quasi" bidirezionali e vanno a 1 con una resistenza di pullup molto debole, per cui ponendo un IO a 1, se il dispositivo collegato deve leggere lo stato logico 1, lo legge, ma se il dispositivo collegato tira fuori un livello logico, puo forzare il pin dell' IO expander a 1 o a zero.
In aggiunta, ho trovato moltissimi altri io expander, molti dei quali sono 5V tolerant anche a tensioni piu basse, per cui il problema è facilmente risolvibile con questi senza ricorrere ad altri componenti esterni, uno è il PCA9555.
Nelle FAQ su questa application note si legge, in aggiunta, piu o mneo la stessa domanda che ho fatto io:
Question: I want to use a PCA9555 in a 5 V supply voltage environment and have it
communicating with a 3.3 V master device. Do I need voltage level translators for the
I2C signals to allow proper communication?
Answer: No, the PCA9555 can communicate with a 3.3 V master device while its own
power supply is at 5 V with reduced upper-level noise margins.
Però la cosa mi appare strana: in questo modo, quando il PCA95555 sarà letto, sulla linea SDA manderà dei segnali a 5V dato che è alimentato a 5V...
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 10 Mesi fa #5
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: PCF8574, LCD HD44780 e 3.3 / 5V
Ciao Gianni,
Dalla FAQ che hai riportato direi che tutto debba funzionare bene.
Ho dato uno sguardo al datasheet ed effettivamente i valori massimi sul pin non sono rispetto a Vcc (cosa necessaria se i pin devono essere 5V tollerant).
Saluti,
Mauro
PS
L'application note che hai linkato e' un buon riassunto degli IC che fornisce la NXP.
Dalla FAQ che hai riportato direi che tutto debba funzionare bene.
Ho dato uno sguardo al datasheet ed effettivamente i valori massimi sul pin non sono rispetto a Vcc (cosa necessaria se i pin devono essere 5V tollerant).
Saluti,
Mauro
PS
L'application note che hai linkato e' un buon riassunto degli IC che fornisce la NXP.
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.