Pin STATE

Ciao a tutti
Vorrei far leggere alla UNO come ingresso digitale il pin “STATE” del modulo bluetooth HC-05.
Dato che dal pin escono 3,3 V ho pensato di usare Level Shifter 3.3V to 5V .
Vorrei chiedere se la soluzione è corretta e se è possibile sostituire i transitor 2N2222 con BC337.
Grazie 1000
Guido

3.3V to 5V Level Shifter.pdf (67.8 KB)

Se con l'Arduino leggi e basta non ti serve il level shifter, l'uscita a 3,3 V verrà comunque letta come 1.

Ciao, Ale.

ilguargua:
Se con l'Arduino leggi e basta non ti serve il level shifter, l'uscita a 3,3 V verrà comunque letta come 1.

Purtroppo NON è affatto detto ...
... ad esempio i pin 0 ed 1 della seriale sono molto più sordi e, nel 90% dei casi NON funziona. Se leggi con una SoftwareSerial da altri pin, normalmente va, ma, causa tolleranze, NON è comunque garantito.

Con i nuovi Arduino basati poi su ATmega4809 NON va proprio in nessun caso dato che il livello HIGH è più alto (ne ho già parlato in altri thread).

Guglielmo

In alternativa, si può usare analogRead:

if(analogRead(STATE_pin)>500){}

Per quanto riguarda il convertitore di livello, è sufficiente il primo transistor con le prime due resistenze (che vanno benissimo anche da 10kOhm) o addirittura solo quella di base, attivando poi il pullup sull'ingresso, salvo il fatto che il livello logico sarà invertito.

Per avere una conversione di livelli bidirezionale si usa un mosfet:
Conversione di livelli

Ancora coi pdf sbagliati di ABC?

Il calcolo della corrente di uscita è completamente sbagliato, lo avevo già indicato l'anno scorso

Comunque basterebbe mettere un paio di diodi (polarizzati inversamente) tra uscita a 3.3 e ingresso a 5v (messo a input pullup)

La resistenza di pullup garantisce una corrente minima sui diodi

Uscita zero fa ingresso 1.4 volt (la caduta di due diodi)
Uscita alta fa ingresso 4,7 volt

Il calcolo della corrente di uscita?...

Essendo indicata su un output

3.3V to 5V Level Shifter.pdf (67.8 KB)

È una corrente di uscita

... ad esempio i pin 0 ed 1 della seriale sono molto più sordi e, nel 90% dei casi NON funziona.

E molto probabilmente c'è anche il suo perché, visto che sono già collegati ad altra roba. Poi se devi leggere un ingresso esterno 0 e 1 meglio lasciarli perdere a prescindere...

Con i nuovi Arduino basati poi su ATmega4809 NON va proprio in nessun caso dato che il livello HIGH è più alto

Vorrei far leggere alla UNO

Ciao, Ale.

>ilguargua: relativamente a:

Vorrei far leggere alla UNO

... lo so :grin: . La mia era una indicazione specifica per mettere sempre in guardia su queste "facili" compatibilità di livelli che, in realtà, sono tutt'altro che scontate :wink:

Guglielmo

Datman:
salvo il fatto che il livello logico sarà invertito

E allora basta la configurazione che non inverte :slight_smile:

adatt335.png

ciao a tutti eccomi

grazie per tutte le risposte, scusatemi non ho ancora capito quale è la soluzione migliore.

in sostanza fornendo 3,3 V devo leggere 0 - 1 su un pin Arduino (ATmega 328P)

Guido

Guido_Laferrari:
grazie per tutte le risposte, scusatemi non ho ancora capito quale è la soluzione migliore.

... se NON vuoi usare hardware esterno e vuoi essere sicuro al 100%, la migliore soluzione è quella del post #3 ;D

Guglielmo