Salve a tutti, sto riscontrando alcuni problemi per la comunicazione tra due Arduino con il protocollo RS485, sto utilizzando il chip SN7517
[http://www.ti.com/lit/ds/symlink/sn75176a.pdf ](http://(http://www.ti.com/lit/ds/symlink/sn75176a.pdf ))
lo schema da me utilizzato è
RE e DE cortocircuitati e collegati al pin di Arduino (scelgo chi riceve e chi manda)
A e B collegati A con A e B con B tra i due SN75176
R collegato a RX e D a TX.
Il programma sull'arduino che riceve è:
// Centralina_rev1.ino
#include "SoftwareSerial.h"
SoftwareSerial mySerial = SoftwareSerial(2,3);
String readString;
void setup()
{
Serial.begin(9600);
pinMode(2,INPUT);
pinMode(3,OUTPUT);
mySerial.begin(9600);
}
void loop()
{
while(mySerial.available())
{
digitalWrite(13,HIGH);
delay(3);
char c = mySerial.read();
readString += c;
}
if(readString.length() > 0)
{
Serial.println(readString);
readString = "";
}
digitalWrite(13,LOW);
}
Mentre nel trasmettitore c'è caricato un programma vuoto e i dati vengono mandati digitando lettere nel serial monitor.
Per il ricevitore uso un portatile che dovrebbe scrivere (grazie al programma) quello che scrivo sulla seriale del trasmettitore, purtroppo però non leggo nulla, ho ricontrollato 3-4 volte i collegamenti e sono tutti come da descrizione, ho cercato dappertutto ma tutti usano la mia configurazione circuitale e il codice è più o meno simile al mio.
Vi ringrazio in anticipo
Hai messo i resistori da 560 ohm pullup e pulldown sulle linee A e B sul MASTER?
Hai terminato A e B con il resistore da 120 ohm sullo SLAVE?
Hai inserito un condensatore da 100n tra fround e il pin di alimentazione?
no avresti uno schema elettrico da farmi vedere (anche paint va bene) ?
dici di mettere resistenze di pull down e di pull up sulle linee A e B, su quale va quella di pull-up e su quale quella di pull down visto che non avrebbe senso metterle entrambe sulla stessa linea.
Purtroppo non sapevo si dovessero utilizzare queste resistenze, se riesci a trovarmi una fonte che mi spieghi anche il loro utilizzo te ne sarei davvero grato.
Grazie mille
Lo schema che ti invio è per l'inveter AURORA, ma è ben spiegato il funzionamento di tutti i componenti.
RS485 schema v2.pdf (12.3 KB)
Ok grazie per l'aiuto, a parte le resistenze R4 ed R5 è tutto spiegato molto bene, mi chiedo però se serva veramente mettere una resistenza di pull-down sull enable trasm visto che non vedo il motivo di lasciare floating quel pin.
Inoltre gli zener sono veramente necessari? certo dipende dalle applicazioni ma qualche mezzo volt in più non disturba il segnale e non ha mai fatto male a nessuno.
Non avevo proprio pensato alle 2 resistenze sulla linea per evitare false comunicazioni, comunque i collegamenti che ho fatto io alla fine sono quelli che mi hai dato con lo schema (tranne per R4 ed R5).
Su internet ho trovato questo schema qui :https://orxor.files.wordpress.com/2013/03/arduinors485_steckplatine.jpg
Solo che io invece di usare i Max485 uso l SN75176 e qui mi mette una resistenza tra A e B che dice serve solo per coprire lunghi tratti, e le mie prove sono state fatte a 20 cm di distanza.
Perciò non riesco proprio a comprendere
Forse gli integrati che uso sono rotti ? forse dovrei passare ai Max485 ?
Se tu ce la facessi a rispondermi mi faresti un gran favore.
Grazie mille
I resistori R4 ed R5 da 56 ohm servono a limitare la corrente che passa sui diodi TVS soppressori di transitori (non sono semplici Zener).
Questi non sono strettamente indispensabili, ma una utile protezione per SN75176 in caso di fulmini: infatti, la massima tensione sugli ingressi sopportabile da parte di questo driver è tra +12V e -7V.
Ecco il motivo per cui ce ne sono due: volendo si può anche scegliere anche un modello bidirezionale da +/- 7V, ad esempio il BZW04-7V0B oppure il BZW04-6V4B da +/- 6.4V
E' uno dei migliori schemi che ho visto, perlomeno il meglio commentato.
Va bene ti tengo aggiornato riguardo futuri sviluppi, un'ultima domanda se guardo con l'oscilloscopio sui canali di uscita A e B cosa dovrei vedere nel caso mandassi 1 con la UART di Arduino ? (ampiezza, frequenza)
Se la UART di Arduino è stata predisposta a 9600 baud, 8 bit , no parity, 1 bit di stop, dovresti vedere 10 bit per carattere a 100 μs