Che succede ai pin tx ed rx?

Ciao a tutti,
utilizzo un Arduino Mega 2560 per vari progetti, anche abbastanza complessi, e volevo capire il comportamento dei pin D14-D15-D16-D17-D18-D19, insomma quelli RX e TX dei 3 seriali aggiuntivi. Possibile che si portino autonomamente allo stato HIGH? Mi era capitato di avere questo problema tempo fa, che però avevo attribuito allo schiacciamento di un cavo o alla saldatura fatta male su un connettore che avevo usato. Dovendolo risolvere in tempi rapidi, e avendo possibilità di farlo, ho scollegato ciò che c'era e ho virato su altri pin che erano liberi, e il problema mi sembrava risolto. Ora mi si ripresenta il problema in maniera identica su un altro Arduino Mega 2560, e a questo punto credo che sia più probabile che ci sia qualcosa che ignoro di questi pin. Evito sempre i pin 0 e 1, naturalmente, ma a questo punto inizio a pensare che non siano i soli da evitare, o per lo meno ci sarà qualche accorgimento in più da prendere.
Grazie in anticipo a quanti mi dedicheranno il loro tempo.
Carlo

Ciao, Carlo

Lo standard della seriale è con livello alto a riposo, probabilmente perché gli integrati TTL potevano assorbire più corrente dall'uscita di quanta ne potevano fornire:

1 Like

I pin li hai lasciati in input? Se non li hai messi in output e non hai una pullup o una pulldown ill pin è in alta impedenza e può cambiare stato in modo non predicibile.
Come ti sei accorto che è andato a HIGH con una lettura? Se è questo il caso allora imposta i pin come INPUT_PULLUP o metti una pullup/pulldown esterna e così avrai sempre uno stato certo.
Di norma si consiglia di impostare tutti i pin (anche quelli non usati) in modo che abbiamo uno stato certo, il modo più rapido è proprio INPUT_PULLUP

1 Like

Alcuni erano input normali, altri erano output, ora, essendo passato un po' di tempo non ricordo quali di un tipo e quali dell'altro, ma ricordo bene che mi si attivava un'uscita per cavoli suoi... A questo punto mi fisso come regole 1) non usare questi pin se non strettamente necessario 2) se proprio inevitabile, li userò come input_pullup (ho visto che in questo caso non ho alcun problema).

Se erano impostati come output e non hai inizializzato la relativa seriale dubito che l'uscita possa aver cambiato stato in modo autonomo.
Al netto che vi siano problematiche particolari che, vista la mia scarsa esperienza, non conosco stiamo parlando di un micro e relativo ambiente di programmazione gestito ed utilizzato da una quantità incredibile di dispositivi, certe "anomalie" così grossolane dipendono nel 99% dei casi da un uso non corretto o errori nella programmazione e non da un reale problema che affligge il dispositivo.
Per intendersi un po' come quando si legge "l'if non funziona" o robe del genere, sempre IMHO eh!

Certo, SE avesse fatto tutti i Serialx.begin() ... altrimenti quei pin sono normali pin di I/O e quindi NON c'entra nulla il livello dei pin seriali.

Guglielmo

Esatto, quei pin sono normalissimi pin di I/O utilizzabili ANCHE per le seriali ... ma, se da programma NON li si programma in altro modo, al reset sono degli input ad alta impedenza ...

... come sugli altri AVR classici, le UART del ATmega2560 sono collegate hai vari PORT e quindi le regole sono le stesse.

Guglielmo

Grazie a tutti per cominciare.
Il dubbio mi resta, in quanto sono sicurissimo che non vi erano errori nella programmazione. L'uscita avrebbe dovuto attivarsi alla pressione di un pulsante, che naturalmente nessuno toccava. Aggiungo, se può essere utile, che tale pulsante era dichiarato come input e collegato a gnd con resistenza da 10K (all'epoca facevo così..).
I pin in questione erano tutti dichiarati come input o output ed era stato inizializzato il Serial Monitor classico ("Serial.begin(9600);" per intenderci), ma nessun altro seriale era stato inizializzato. Può essere che tali pin, se usati come output, richiedano attenzioni particolari?

Certamente, se li dichiari OUTPUT poi devi anche definire a che livello li vuoi, se LOW o HIGH e ... devi anche stare attento a non fare corti (verso GND o verso Vcc a seconda dello stato del pin) per non danneggiarli.

Guglielmo

Questo solo per i pin rx e tx?

NO, questo per qualsiasi pin di I/O tu dichiari OUTPUT ... au AVR classico NON esistono pin solo UART, sono tutti GPIO che puoi configurare in vari modi da software.

Per quelli dichiarati INPUT, bisogna anche li avere sempre un valore stabile, quindi ... o si usano le pull-up interne per tenerli HIGH o si usano delle resistenze esterne per tenerli HIGH o LOW o si collegano ad un qualche cosa che dia tali valori (es. sensori).

Guglielmo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.