Salve
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....
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.
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
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....
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
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.
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:
E' già fatto c'è solo da usarlo
E' uno standard diffusissimo
Ha il controllo degli errori CRC
Ha già implementata la funzione di attivare il pin di tx-en, necessario per la 485
Contro:
mmmmmmmmmmmmmmm
mmmmmmmmmmmmmmm
mmmmmmmmmmmmmmm
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
La scelta 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 ?
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
ottimo allora metto da parte la cosa e proverò a sperimentare non appena mi diranno qualcosa grazie Leo Grazie Janos intanto