75167B

Mi sono ritrovato tra le mani alcuni chip SN75167BP.
Cercando in rete ho visto che sono equivalenti al MAX/DS485 e che servono per creare reti di trasmissione…
Vorrei provare ad usarli ma non ci ho capito molto… in buona sostanza… a che servono? come si usano? :fearful:

Non ho trovato informazioni riguardante il SN75167. Il DS485 é un adattatore di livello per l’ interfaccia RS485 o RS422 come il MAX232 lo é per il RS232.
Della RS485 e RS422 so dirti poco, solo che é un interfaccia seriale simmetrica e percui utilizzabile per distanze lunghe. Si puó usarlo punto a punto come la RS232 o si puó fare delle reti coi dispositivi in paralello su un bus. Non so come funziona la gestione di flusso dati.

Ciao Uwe

questo dovrebbe essere il suo datasheet: http://www.datasheetcatalog.org/datasheets/208/492412_DS.pdf e questa la minispiegazione sul protocollo che maneggia.. http://it.wikipedia.org/wiki/EIA_RS-422

si sono uguali e costano meno!!!

In poche parole collegato direttamente ai pin RX e TX di Arduino, trasforma la UART in una RS485...adatta soltanto il livello fisico allo standard RS485. In più se vuoi creare una comunicazione bidirezionale devi collegare un terzo pin che è una sorta di enable per chi deve parlare. Se invece la comuicazione che vuoi stabilire è solo monodirezionale basta che ne colleghi uno a VCC e uno a GND.

per il calcolo delle resistenze da mettere, al momento non saprei ancora cosa dirti. Nei prossimi giorni farò anch'io di questi esperimenti

Sono dei transceiver per il bus RS485, in pratica permettono di collegare una normale UART a questa tipologia di bus. Gli SN75176 sono gli originali, i MAX485 sono i cloni pin to pin replacement, i MAX485 sono migliori sotto il profilo qualità del segnale e distanza in funzione della velocità, per contro sono molto delicati e richiedono particolari protezioni se usati in ambito industriale (= forti disturbi sulla linea e spike con tensioni molto alte), gli SN75176 sono molto robusti, quindi richiedono meno protezioni e sono preferiti in ambito industriale. Il loro uso dal punto di vista hardware è semplice, basta collegare il Tx e l'Rx dell'UART, ovvero il pin Tx e Rx di Arduino, sui pin D (ingresso) e R (uscita) del SN75176, collegare assieme i due pin DE e RE e collegarli ad un GPIO a piacere del micro (Arduino), collegare i due pin A e B ad un doppino, preferibilmente intrecciato, e portarlo rispettando la polarità a tutti gli altri SN75176 presenti, è un bus multidrop quindi possono coesistere più dispositivi in parallelo. Per trasmettere i dati devi portare a 1 logico i due pin DE e RE, solitamente il tutto si denomina come segnale di direzione abbreviato in DIR, per ricevere DIR deve stare a 0 logico. Dato che sul bus passano sia i dati in arrivo che quelli in trasmissione l'utilizzo è del tipo half duplex, però nulla vieta di usare un SN75176 per la sola trasmissione e uno per la sola ricezione trasformando la RS485 in RS422, quindi i vari utilizzatori devono parlare uno per volta e ciascun utilizzatore deve avere un indirizzo univoco. Se i device connessi sono solo due non serve ne l'indirizzo e nemmeno un protocollo per la gestione del bus salvo il minimo indispensabile per gestire i pacchetti dati, se i device sono più di due occorre implementare almeno un protocollo minimale di tipo master/slave o multimaster.

[quote author=Federico Vanzati link=topic=58176.msg418108#msg418108 date=1302516951] per il calcolo delle resistenze da mettere, al momento non saprei ancora cosa dirti. Nei prossimi giorni farò anch'io di questi esperimenti [/quote]

La 485 richiede le resistenze di terminazione solo se la lunghezza è di molti metri, per prove casalinghe possono anche essere omesse. In tutti i casi i corretti valori sono due resistenze da 120 ohm posti agli estremi del cavo, questo vuol dire che l'impedenza caratteristica della linea è 60 ohm. Sarebbe anche molto consigliabile polarizzare la linea quando nessuno trasmette, ovvero mantenere una tensione di circa 200-300 mv tra A e B, questo si ottiene facilmente collegando una resistenza di pull up su A e una di pull down su B entrambi del valore di 680 ohm in un solo punto della linea, non importa dove, oppure pull up e pull down entrambi da 22k su ogni scheda connessa sul bus, quest'ultima soluzione si usa quando ci sono molti device connessi al bus.

uwefed: Della RS485 e RS422 so dirti poco, solo che é un interfaccia seriale simmetrica e percui utilizzabile per distanze lunghe.

Per la precisione è un bus seriale differenziale, cioè lavora in base alla differenza di potenziale tra A e B e non tra A o B e GND, infatti la connessione si fa utilizzando un doppino connesso solo tra questi due segnali e non serve mettere in comune GND tra le schede. In ambito industriale si usano pure interfacce 485 optoisolate, il cavo oltre ad essere twistato, non va bene il normale cavo coasiale, è dentro una guaina con calza che viene connessa a GND in un solo punto, tutti gli altri nodi sono collegati solo ad A e B. La RS485 permette velocità di trasmissione fino a 10Mbps a pochi metri di distanza, serve un cavo ottimo, e fino a 115 kbps a 1200 metri di distanza, è uno dei bus seriali più affidabili in assoluto.

Quindi in teoria io potrei, usando 2 75167, collegare 2 Arduino (o 2 Atmega) posti anche a decine di metri di distanza che possono dialogare tra di loro tramite seriale? Con i classici Serial.print e Serial.read, cioè? Senza ripetitori/amplificatori del segnale in mezzo?

Sarebbe interessante... molto. Non m'importa la velocità, più che altro la distanza percorribile dal segnale.

leo72: Con i classici Serial.print e Serial.read, cioè? Senza ripetitori/amplificatori del segnale in mezzo?

Esatto, unica cosa aggiuntiva è che devi gestire tu il DIR, prima di usare le serial.print porre tale linea a 1 logico per poi riportarla a 0 logico una volta terminata la trasmissione dei dati in modo da poter ricevere. In pratica hai DIR fisso a 0 logico quando non trasmetti nulla, ricezione attiva, lo devi mettere a 1 prima di iniziare a trasmettere e riportare a 0 al termine della trasmissione. Se la trasmissione è composta da più serial.print non è necessario cambiare ogni volta lo stato di DIR, lo alzi prima di usare la serial.print e lo abbassi dopo aver inviato l'ultima serial.print. Se devi "ascoltare" tra le varie serial.print per la ricezione di una eventuale risposta allora devi cambiare lo stato di DIR ogni volta.

Vabbè, il protocollo poi lo implementerei a seconda delle esigenze.
Era importante sapere che la distanza può essere notevole.

Ciò risolverebbe il problema del sistema di monitoraggio ed autodistacco delle prese di casa in base al consumo istantaneo, non so te ti ricordi l’altro post che stavamo portando avanti con Gianfranco e qualcun altro che non mi ricordo il nome… In questo modo potrei mettere incassato in ogni presa un circuito con un Atmega ed un 75167 tutti collegati in rete.