Newsgroup: it.hobby.elettronica.digitale
Titolo: RS232 to RS485

Ciao :-)
mi sto accingendo a realizzare una rete RS485, per evitare di dover gestire
le collisioni ho pensato di usare una configurazione master-slave : un PC
fa da master ed interroga uno alla volta piu' nodi slave.
Come transceiver vorrei usare i classici 75176, la lunghezza della rete non
credo supererà i 100 mt, velocita' massima 9600 bps.
Posso evitare di inserire resistenze di terminazione ?
Altra cosa, la conversione RS232 -> RS485 sul master (il PC) : come potrei
fare ?
Avrei pensato di usare un MAX232 collegato a tx-rx della seriale e poi ad
un 75176. Per la direzione, un PIC connesso alla tx che sente l'inizio
trasmissione (linea che si abbassa, bit start) e commuta istantaneamente il
75176 in trasmissione per un tempo pari alla durata di 1 byte ( 10 bit ).
Potrebbe crearmi problemi in caso di piu' byte trasmessi in sequenza uno
dopo l'altro da PC a slave ?
Grazie :)
Pier.
www.piergm.com

 
www.piergm.com

 dopo l'altro da PC a slave ?
Non mi piace affatto...
La soluzione più semplice è quella di utilizzare una RS485 a 4 fili (non so se 
si chiama ancora RS485): 2 per la trasmissione (dal PC verso gli slave) e 2 per 
la ricezione (dagli slave verso il PC). In questo caso, però, devi avere dei 
transceiver a quattro fili, tipo il MAX3080 o simile. Con questa configurazione, 
non ti devi preoccupare di modificare il verso del transceiver sul master, ma 
solo sugli slave. Sul master (PC) il MAX3080 trasmette e riceve continuamente. 
Gli slave normalmente ricevono (tx spento). Quando devono trasmettere, abilitano 
il driver di trasmissione e subito dopo lo spengono.
Non so che tipo di slave hai tu, quindi non so se è una configurazione accettabile.
Se la rete RS485 deve essere a due fili (con il costo di un CAT5, non ne vedo il 
motivo) potresti utilizzare uno dei pin della porta RS232 proprio per il cambio 
di direzione del transceiver della RS485. In questo caso, però, il software su 
PC deve pilotare tale pin ausiliario in modo opportuno, tenendo anche presente 
le tempistiche di Windows (gioco non sempre molto semplice). Tieni presente che 
il MAX232 ha un altro tx ed un altro rx liberi, quindi sei a posto.
In alcuni casi, se la velocità è bassa (come nel tuo caso) potresti anche 
pensare di abilitare il tx del transceiver non appena si vede il fronte 
negativo, rallentando la disabilitazione con una scarica di condensatore tarata 
sul tempo di un byte. In questo caso non hai bisogno di PIC...

fare ?
Per diverse ragioni legate a problemi di Windows ti consiglio un convertitore
pronto, per approfondire leggi questo thread:
http://shorterlink.com/?OAQSVH
--
ciao
  Stefano

 ha scritto nel messaggio 
news:184o8uwtqd25y$.b8ysy7b9r1tv$.dlg@40tude.net...


 
Eh, il linguaggio di programmazione che uso ( VB ) non mi permette
temporizzazioni sufficientemente precise, purtroppo...


Mah, a questo punto metto un 12F629 o un atmega16 (anche se e' un po'
sprecato, ma ne ho acquistato uno stock tempo fa, per cui ne ho "da buttar
via"), magari con un dipswitch o con dei jumper per selezionare la durata
del byte in base alla velocita' ( potrei fare 2400 - 4800 - 9600 - 19200).
Calibro la durata della trasmissione sulla lunghezza del byte + un piccolo
ritardo (non ho fretta) ed inserisco questo piccolo ritardo negli slave.
Ciao,
Pier.
www.piergm.com


Ok..ma..come funziona il convertitore gia' pronto ? Cioe', chi mi
garantisce che non avro' problemi usando il mio protocollo... ?
:)
Ciao,
Pier.
www.piergm.com

 
Ciao,
Pier.
www.piergm.com

Il Sat, 06 Jan 2007 14:09:28 +0100, SB ha scritto:

 
http://shorterlink.com/?OAQSVH

Io ho dovuto usare quello proprio per problrmi con programmi in Visual Basic,
che con W2000 e Xp avevano problemi.
Se leggi tutta la discussione riportata nel link sopra, ho scritto le ragioni
che mi hanno portato a quella scelta.
Io andavo a 115K e non potevo perdere tempo inserendo timing di wait e dovevo
essere certo che il convertitore si 'girasse' in tempo.
Infatti il problema principale usando RTS\ per pilotare il DIR č che ogni tanto
per colpa della gestione di Windows la porta tarda a girare il driver anche dopo
aver finito di trasmettere la stringa.
Niente di irreparabile se hai un buon protocollo e tempo per ritrasmettere, io
con 16 bilance in linea con le stampanti da gestire dovevo ridurre ogni
possibile spreco di tempo.
Il convertitore che ti ho scritto utilizza una logica HW per rilasciare il bus
appena hai trasmesso un byte, evitandoti degli errori e i problemi della loro
gestione.
--
ciao
  Stefano


Capito...
Provero' a costruirmelo, nel caso non dovessi riuscire faro' come mi hai
consigliato ;)
Grazie.

 una risposta dallo slave selezionato.
Ok con questa logica dovrebbe andare tutto bene
Non tengo l'echo tramite RX perche non non mi serve controllare cio che
invio, ma sarebbe interessante...
Il mio controllo viene dato dalla risposta degli slave con CRC16 (uso 
MODBUS)
con timeout
Ciao


>> Alx PD

 ritardo (non ho fretta) ed inserisco questo piccolo ritardo negli slave.
A questo punto, se il micro conosce la velocità, puoi collegare il TX della 
RS232 all'RX della UART del micro (tramite MAX232) e il TX della UART del micro 
all'RX del della RS232 (sempre tramite MAX232). Appena il micro "vede" un byte 
nel buffer della UART, lo ritrasmette sulla RS485 alla stessa velocità 
abilitando il driver di trasmissione del transceiver RS485. Non appena il byte è 
stata completamente trasmesso (e il micro dovrebbe saperlo) può disabilitare il 
driver TS della RS485 e tornare a ricevere.
Ma fammi capire, sulla tua rete hai sempre la stessa velocità, vero? Non penso 
che tu voglia mescolare slave a 9600 con slave a 2400, o no?
Il tuo prodotto non è commerciale e sarà un unico esemplare... a questo punto 
perché non conosci a priori la velocità da usare sulla RS485? Perché dici che pu 
variare?

 gestione.
Ma come fa a sapere quando rilasciare il bus se non conosce la velocità di 
trasmissione? Oppure la conosce?


Vorrei mettere dei dipswitch per aver la possibilita' di switchare al volo
la velocita' (a scopo sperimentale) senza dover modificare il
programma...tutto qua. Chiaro che la rete funzionerà sempre alla stessa
velocita', una volta definita (penso che sarà pari a 9600 bps o 19200 bps).
Ciao.

 velocita', una volta definita (penso che sarà pari a 9600 bps o 19200 bps).
Ma se è solo per uno scopo sperimentale, io cambierei tranquillamente anche il 
software. Non ti capita così facilmente di cambiare velocità, almeno spero.
Così eviti i dip-switch. E comunque, se proprio sei collegato al PC, puoi sempre 
mandare dei comandi appositi al tuo micro via RS232 per modificare la velocità 
al volo (all'accensione è 9600 per default, subito dopo mandi il comando di set 
velocità a 19200, 2400 o quello che vuoi).

t, 6 Jan 2007 13:38:20 +0100, Pier GSi ha scritto:
Allora, oggi ho realizzato il convertitore.
E' questo, per il momento pare funzionare bene :)
http://www.piergm.com/elettronica/schemivari/232-485pier.jpg
su ciascuno slave :
http://www.piergm.com/elettronica/schemivari/nodo485pier.jpg
Un'altra domanda (portate pazienza ma non ho mai usato una RS485...) :
devo mettere delle resistenze di bilanciamento linea su ciascun nodo ?
O bastano quelle da 1 k e 270 ohm sul convertitore 232-485 ?
Ora, o trovo un protocollo adatto alle mie esigenze...o lo scrivo io...mmh
Ciao,
Pier.
www.piergm.com

 ha scritto nel messaggio 
news:13d30i97...@ID-187316.user.uni-berlin.de...


 ha
scritto:

Non ho approfondito, però sul circuito c'è un chip che sembra una PLD dedicata a
questo.
Magari riconosce lo start bit e fa il conto delle temporizzazioni, comunque
funziona bene, dal momento che quando vado a rileggermi i log degli errori di
comunicazione li trovo spesso vuoti.
--
ciao
  Stefano

 
http://www.piergm.com/elettronica/schemivari/232-485pier.jpg
Mi sembra abbastanza complicato e comunque diverso da quello che chiedevi. 
Volevi variare la velocità senza modifiche hw... qui devi tarare un trimmer. Poi 
il ritardo è fatto addirittura con un NE555.
Comunque sia, se ti va bene...


Guarda qua se ti può interessare:
http://www.lustproject.net/appunti/luigi/picnet.html
si tratta di una rete multimaster ogni nodo è indipendente può madare o 
ricevere dati. La uso da oltre un anno e va a meraviglia anche se alcune 
cose penso di migliorarle.
Se vuoi ulteriori info 
lib.giTOGLIlibero.it
Ciao

Pier GSi ha scritto:

In effetti risolve il problema del ritardo sul RTS\ ma aggiunge la complicazione
della taratura del trimmer, e magari della variazione della regolazione.
Meglio aggiungere un ritardo software sulla risposta del µC e stare abbondanti
nella taratura del trimmer del ritardo per evitare problemi con la stabilità in
temperatura e a lungo termine.
--
ciao
  Stefano

 Comunque sia, se ti va bene...
Se dovesse andar male lo rifaccio con un PIC o, al limite, ne prendo uno
commerciale bello e pronto.
Ciao,
Pier.
www.piergm.com


Faro' cosi', grazie.
Ciao,
Pier
www.piergm.com

 sembra complesso, anzi :).
Sì, la conversione RS232/TTL a componenti discreti l'avevo suggerita anche io. 
La complicazione deriva dall'uso dell'NE555... anche la 5V, volendo, potresti 
spillarla dalla porta seriale del PC, anche se non è proprio elegante.

 fare ?
[CUT]
Io feci tempo fa una rete di questo tipo per monitorare la temperatura in un 
impianto, il modulo di testa è equipaggiato con il classico MAX202 e dialoga 
con i moduli della rete tramite quattro fili, due di TX e due di RX 
utilizzando i classici driver DS75176B.
In particolare la linea di TX che dal PC entra nella rete è in comune con 
tutti gli RX dei vari moduli (ogni modulo ha un PIC); per quanto riguarda la 
trasmissione invece, normalmente, lascio in 3-State i driver di TX di ogni 
modulo ed attivo solo il driver del modulo che deve rispondere (chiaramente 
nel protocollo di comunicazione è compreso un campo di indirizzo che viene 
decodificato dai vari moduli), al termine della risposta riporto l'uscita in 
3-State, in questo modo il diriver del modulo che deve rispondere rimane 
attivo solo per il tempo che serve e non vi sono collisioni dato che gli 
altri moduli non essendo in indirizzo hanno tutti i driver di TX in alta 
impedenza.
Ciao
Ciao 

Mai considerato di prendere in esame i moduli powermodem per X10.
Li metti nelle prese elettriche di casa e si occupano di impacchettare i 
dati che ti servono con lo standard X10, gli slave sono agganciati a modem 
equivalenti sparsi per la casa che leggono il flusso di dati e lo 
decodificano attivando lo slave solo se l'indirizzo è quello corretto.
E' solo un idea per non dover cablare cavi e sfruttare la capillarità 
dell'impianto elettrico di casa.
Ciao