LED txrx aggiuntivi

Ciao a tutti,

in una scheda Arduino nano iot (quindi 3.3V) volevo ricavare dei LED che segnalano la trasmissione dati sul canale tx rx.
TXRX
Basandomi su schemi presenti in rete pensavo di gestire la cosa cosi (dato che non necessito di enorme luminosità dei Led pensavo di sfruttare una resistenza 150R).

cosa ne pensate? potrebbe funzionare?

Nessuno saprebbe darmi una dritta? Ho provato al volo sulla breadboard ma non sembra funzionare

Questo è lo schema usato sulla "Arduino Nano Every" (quella con il ATmega4809) ...
... nota che il convertitore USB <-> Seriale lavora a 3.3V, mentre la MCU a cui è collegato a 5V per cui ci sono i FET per la conversione di tensione:

Normalmente però, nel 90% delle schede Arduino, i pin dei LED sono separati dai pin TX ed RX e comandati indipendentemente ... :roll_eyes:

Guglielmo

Si ho notato che hanno una gestione separata su praticamente tutte le schede, però appunto in rete avevo visto quello schema che coincide con quanto condiviso anche da te. Non saprei, su breadboard non sembra dare segni di vita… forse i segnali txrx sono troppo veloci?

... dipende dal baud rate che usi.

La strada migliore è definire due pin diversi e modificare le ISR del "core" per usare tali pin con i LED ... però poi, ad ogni aggiornamento, tocca rifare la stessa cosa.

Guglielmo

Sia con 9600 che con 57600 non sembrano attivarsi… peccato li volevo direttamente lì perché non ho altri pin disponibili sulla nano 33 iot però aggiungere un altro micro tipo attiny 85 per questa opzione complicherebbe inutilmente il mio progetto, pertanto credo rinuncerò :smiling_face_with_tear:

Hai provato ad alzare il valore delle resistenze (330R) come nello schema allegato?

Guglielmo

No, proverò oggi nel pomeriggio.
Ma alzandolo non riduco ulteriormente la corrente necessaria per l’attivazione? (Già ben al di sotto dei canonici 20mA)

Ps per la prova ho utilizzato i classici led da 5mm

Probabilmente hai usato LED ad alta efficienza, con una tensione di soglia troppo alta. Collegali tramite una resistenza a una pila da 9V o a un alimentatore e misura la tensione ai capi.

No, perché se utilizzo un banale codice come il seguente i Led si attivano:

void setup() {
pinMode(1,OUTPUT);
pinMode(0,OUTPUT);
digitalWrite(0,LOW);
digitalWrite(1,LOW);
}

Hai provato ad abbassare drasticamente il bsud rate?

Metterlo al minimo e fare trasmissione continua?

Ciao e grazie per le dritte
Sono riuscito a procedere con gli esperimenti e qualcosa sembra muoversi.
Ho messo in comunicazione un Arduino NANO IOT 33 con un Arduino Uno tramite il seguente schema
TXRX_LED

Su ArduinoUno ho scritto il seguente sketch di prova (invio il carattere 1)

void setup() {
Serial.begin(9600);
}

void loop() {
Serial.println("1");
delay(1);
}

e così il led si accende correttamente. Su Arduino NANO iot però non riesco a ricevere il segnale. Vorrei leggerlo solo se viene premuto un determinato pulsante (che si trova sul pin 5)

void setup() {
Serial.begin(9600);
pinMode(5,INPUT_PULLUP);
}

void loop() {
if(digitalRead(5) == LOW){
 if (Serial.available() > 0) {
       Serial.print(Serial.read());
 }
}
}

Indenta quel programma

E inizializza il pin 5, se lo usi lo devi inizializzare

Curiosità... Se sui pin 0 e 1 ha connesso qualcosa il monitor seriale funziona lo stesso?

Solo se necessita di resistenza di pullup o se viene usato come uscita.

A parte che sarebbe comunque indice di programmazione disordinata...

Ma un test dgitalread==0 indica abbastanza chiaramente una pullup

Nonnsaprei proprio...

Si scusa, ovviamente il pin era inizializzato come INPUT_PULLUP. Nel copia incolla ho dimenticato la riga di codice.
ho corretto il post

Tuttavia nella condizione descritta il led si attiva ma su monitor seriale del ricevente non visualizzo nulla

Ok

Ma tu usi la stessa seriale per comunicare sia col PC che con l'altro arduino?

No, uso Serial1 sui pin TX e RX della scheda. Ho apportato delle modifiche e qualcosa sembra funzionare... ma ho ancora dei dubbi:

chi scrive sulla seriale (atmega328) scrive come da esempio riportato nei post precedenti (ovvero println("1"); seguito da un delay(1):wink:

chi riceve stampa su lcd le informazioni:

#include <LCD_I2C.h>
LCD_I2C lcd(0x27, 20, 4);


void setup() {
  Serial1.begin(9600);
  lcd.begin();
  lcd.backlight();
}

void loop() {
  lcd.setCursor(0, 2);
  if (Serial1.available() > 0) {
    int receivedData = Serial1.read();
    lcd.print(receivedData);
  } else {
    lcd.print("NON RICEVUTO");
  }
}

ciò che dovrei visualizzare è il corrispettivo della tabella ascii...
dove il carattere 1 corrisponde a 49 e il comando "a capo" il 10.
Però vedo la cosa che non comprendo è che ricevo in sequenza 49, 13, 10
come mai?