Sistemi di comunicazione parallela.. suggerimenti ?

Salve :slight_smile:
Com un amico sto tentando di realizzare un impianto di luci che si dovrebbe comporre in questo modo:
Arduino Master collegato ad una qualsiasi delle luci
Luce (con ATTiny 84)

Visto che devo controllarle in RGB... la mia idea era questa: ogni lampada ha un numero identificatico immesso al momento della programmazione nel micro dall'arduino richiamo la lampada poi invio i valori che la lampada deve impostare tramite PWM ai led... avete idea di che protocollo posso usare per farli comunicare ?
devono essere connessi così:
Arduino -> Lampada -> Lampada -> lampada......
Avevo pensato ad I2C ma quanta strada posso fargli far fare ? tenendo conto che avro un budget limitato e potrò usare il doppino telefonico come cavo non roba tanto costosa....

https://sites.google.com/site/jpmzometa/arduino-mbrt

Un bel MODBUS e lo fai viaggiare su RS485 (puoi utilizzare un ADM485). Il modbus ti permette anche di gestire molta slave, ogniuno dei quali ha un suo identificativo.

Te l'hai già usato ? :~

Con il DMX che sia fattibile ? sto tentando di capire come funziona ma.....
Forse faccio prima con la seriale... uso la seriale hardware e poi se la lampada con cui comunico non è quella giusta reinvio i dati ? che dite ?
poi ho visto l'SPI ma non si capisce molto :frowning:

Si. Ho un HMI che fa da master e l'arduino è lo slave. Se ti serve aiuto chiedi pure.
Poiché la 485 è (in linea di massima) half duplex) si deve definire che deve prendere il controllo per bus. Per questo l'integrato che ti ho indicato da 2 pin appositi (2 e 3) per attivare/dissattivare il ricevitore/trasmettitore. Li cortocircuiti e poi li colleghi a un pin dell'arduino, e questo pin sarà quello che la libreria chiama txen.

P.S. La libreria per il master non l'ho ancora usata ma è probabile che la debba usare proprio per un progetto non molto futuro ma è ancora in fase di definizione....

Io ti consiglio il modbus con la 485, la sto utilizzando e funziona egregiamente.

HMI ? cos è ?
sostanzialmente.. avevo pensato di costruire il controller così: tre potenziometri che mi regolano i vari colori... un pulsante che va premuto per entrare in modalità di "trasmettitore", un LCD che mi mostri i valori ed un potenziometro per selezionare il numero della lampada...
Con la seriale sarebbe semplice se fosse una sola lampada però ....

Scusa non avevo ancora visto il messaggio....
Il problema è che io devo montarlo ma fare il tutto a livello hardware e software più sempice possibile perchè poi se vogliono metterci le mani... e nonsanno un tubo ne di programmazione ne tantomenno di elettronica :sweat_smile:

San google... ^^

Sono i pannelli operatore touch screen.

http://www.delta.com.tw/product/em/control/touch_hmi/control_touch_hmi_main.asp
tanto per farti un'idea, poi ce ne sono di infinite marche.

Cavolo.. Roba tosta :slight_smile: 8)

Consiglio il bus 485 anch'io ma prenditi un comune 75176.
Non servono librerie per usarlo, è una seriale a tutti gli effetti, che gestisci con 2 oppure 3 pin dal micro al 75176. 2 servono per i canali RX/TX, mentre il terzo, opzionale, serve per scegliere la direzione di trasmissione: cambiando i livelli su RE/ e DE (LOW o HIGH) puoi impostare il chip in ricezione o trasmissione sul canale.

A quel punto basta farti un piccolo protocollo di trasmissione: trasmetti l'indirizzo di destinazione ed il comando insieme ad un byte di check. Se il destinatario riceve i dati correttamente, risponde OK altrimenti chiede il reinvio.

leo72:
Consiglio il bus 485 anch'io ma prenditi un comune 75176.
Non servono librerie per usarlo, è una seriale a tutti gli effetti, che gestisci con 2 oppure 3 pin dal micro al 75176. 2 servono per i canali RX/TX, mentre il terzo, opzionale, serve per scegliere la direzione di trasmissione: cambiando i livelli su RE/ e DE (LOW o HIGH) puoi impostare il chip in ricezione o trasmissione sul canale.

A quel punto basta farti un piccolo protocollo di trasmissione: trasmetti l'indirizzo di destinazione ed il comando insieme ad un byte di check. Se il destinatario riceve i dati correttamente, risponde OK altrimenti chiede il reinvio.

E' la stessa cosa che fa l'ADM485.... La libreria serve per implementare il modbus...
Io ti consiglio di usare uno standard noto invece che scriverti tu un protocollo, sia perché sei più flessibile (chissà che un domani non tu decida di usare un HMI da allacciare al sistema) e poi perché il modbus prevede già un controllo degli errori mediante il CRC.

Non conoscevo il ModBus.
Ho trovato questo per Arduino:
http://code.google.com/p/arduino-modbus/downloads/list

Si, l'avevo trovato anche io, ma in realtà è una versione modificata di quello che ti ho linkato io.

Quello linkato da te, l'hai provato a compilare? Quanti byte porta via lo sketch risultante?
Il simpleModbus prende 3300 byte per l'esempio base, un po' tantini... Ecco perché spesso conviene fare un protocollo proprio ed integrare solo quello che serve.

Io avendo il mega non ho problemi, ho 256K... Comunque non credo che per accendere un paio di luci ti servano 30K di codice..... Dovresti averne di flash disponibile.
Vedi un po' te come vuoi fare, io ti ho detto come ho fatto io, non è necessariamente quello che devi fare te.

Pro del modbus:

  1. E' già fatto c'è solo da usarlo
  2. E' uno standard diffusissimo
  3. Ha il controllo degli errori CRC
  4. Ha già implementata la funzione di attivare il pin di tx-en, necessario per la 485

Contro:

  1. mmmmmmmmmmmmmmm
  2. mmmmmmmmmmmmmmm
  3. mmmmmmmmmmmmmmm
  4. occupa qualche K di flash, ma non credo te ne manchi

Ti ripeto, fai come credi. Hai chiesto come potresti fare e io t'ho dato un'idea. A te la scelta.

Eccomi :slight_smile:
La scelta :slight_smile: ehm.. ora sento i tipi se hanno intenzione di mettersi a studiare un pò di programmazione o che vogliono fare....
se eventualmente dovessi fare con la seriale come potrei fare ? con il metodo tuo leo ? come sono collegati i dispositivi ? quell'integrato ho capito come fare a collegarlo ad arduino ma poi ? sono collegati come una seriale normale ?

Sono 2/3 fili da tirare (a seconda se vuoi condividere anche l'alimentazione). La commutazione Rx/Tx si fa con un singolo pin, poi si agganciano al micro con 2 fili come una normale seriale.
Io li ho provati anche su dei Tiny85.

Ok fin qui ci siamo... ora... se lo faccessi con la seriale normale o 485.... farei così...
invio un Byte contenente un numero che sarà il numero della lampada
un byte per scegliere colore e un byte contenente un valore per il pwm del colore

Se però la lampada con cui comunico non è quella giusta come faccio a fargli rispedire tutta questa roba alla successiva e via dicendo ? metto tutto in eeprom ?

Perché tu non leggi tutti i miei interventi :stuck_out_tongue_closed_eyes:
Ho detto che devi spedire prima l'indirizzo del destinatario, poi il comando, poi il dato.
Ovviamente tutti i dispositivi riceveranno i dati ma solo quello identificato dall'indirizzo li eseguirà.
In caso di ricezione errata basterà che rispedisca una stringa che inizia con l'indirizzo del master ed il comando.

Anche in questo caso tutti i dispositivi ricevereanno i dati ma solo il master li prenderà in considerazione.

Il byte di check è una cosa semplice: basta fare una somma ad 8 bit di tutti i byte spediti, se la somma non corrisponde al checksum ricevuto c'è qualcosa che non va. Io non starei a mettere nel mezzo un algoritmo CRC per una cosa così semplice.

leo72:
Ho detto che devi spedire prima l'indirizzo del destinatario, poi il comando, poi il dato.
Ovviamente tutti i dispositivi riceveranno i dati ma solo quello identificato dall'indirizzo li eseguirà.
In caso di ricezione errata basterà che rispedisca una stringa che inizia con l'indirizzo del master ed il comando.

Questo era logico :P:P
chiedevo solo conferma :slight_smile:
ottimo allora metto da parte la cosa e proverò a sperimentare non appena mi diranno qualcosa grazie Leo Grazie Janos intanto :slight_smile:

ratto93:
Questo era logico :P:P
chiedevo solo conferma :slight_smile:

:wink:

ottimo allora metto da parte la cosa e proverò a sperimentare non appena mi diranno qualcosa grazie Leo Grazie Janos intanto :slight_smile:

Per servirti :stuck_out_tongue_closed_eyes: