Comunicazione tra due Atmega328p

Ciao a tutti, Prima di scrivere questo nuovo Topic ho provato a chiarirmi autonomamente le idee provando ad utilizzare due Arduino UNO completamente svincolati, ma non sono giunto a una conclusione soddisfacente.

Mi servirebbe far comunicare due Atmega328P standalone (che d'ora in poi chiamerò (1) e (2)) su millefori ma mi sono sorti alcuni dubbi (che riguarderebbero comunque anche due Arduino UNO):

  • Come mai se su (1) carico (dopo le dovute dichiarazione di pin):
analogWrite (3, 200);

e se su (2) carico (dopo le dovute dichiarazioni della seriale):

Serial.println (analogRead(A0));

e collegando il pin 3 di (1) all'A0 del (2) leggo valori che sono sparati a 0 o 1023 (random) e non valori intermedi, che correttamente mappati dovrebbero ridarmi 200?

Chiedo questo perchè avendo terminato i pin su (1), ne implementerei un (2) che lavora indipendentemente ma che però deve scambiare alcuni dati con (1), dati di sensori (o altro) e la soluzione più pratica e rapida che mi era venuta in mente era appunto questa.

Scusa ma direi che non hai capito cosa fa analogWrite() su un pin che esce in PWM. PWM è un segnale in onda quadra con una certa frequenza e con HIGH/LOW distanziati a seconda del tuo valore duty cycle (nel tuo caso 200) https://www.arduino.cc/en/Tutorial/PWM

se analogRead campiona mentre c'e' un picco alto hai 1023, se basso, 0

Chiaro, ripensandoci è stata una domanda alquanto banale.

Per scambiarsi dati, dunque, cosa consiglieresti?

Ho notato che anche direttamente sul micro ci sono i pin SDA/SCL sui pin PC4 e PC5 per il protocollo I2C. Perdonatemi la svista

Ricorda che I2C è pensato per comunicazioni a brevi distanze, di solito 2 chip su stesso pcb.

Ok, ti sei risposto da solo ;D

Ma perchè non estendi i pin ad es. con un multiplexer? Ad es. un 74HC4067 o un PCA9685

Maurizio

e perché non usa direttamente una softserial?

Tutte soluzioni che avevo sorvolato, ma che prenderò in considerazione! Grazie a tutti

davideerio97: Chiaro, ripensandoci è stata una domanda alquanto banale.

Per scambiarsi dati, dunque, cosa consiglieresti?

Se può essere utile io sto utilizzando semplicemente la comunicazione seriale già presente per comunicare dati tra due NANO, uno riceve dei comandi e l'altro a bordo di una macchina diversa li interpreta e li gestisce, ti basta collegare il pin TX del trasmettitore al pin RX del ricevente, GND comune e parli semplicemente con una "Serial.write()".

Luca

lucamenny: Se può essere utile io sto utilizzando semplicemente la comunicazione seriale ...

... è già stato suggerito ... lo svantaggio è che si perde la possibilità di usare la Seriale per il debug, per cui ... la cosa migliore è implementare una seconda seriale o con la SoftwareSerial o con l'ottima AltSoftwareSerial (che è decisamente superiore all'altra).

Guglielmo