Go Down

Topic: invio di sketch via rs485 (Read 5668 times) previous topic - next topic

PaoloP

Ho visto Titino alla MF ma non mi sono soffermato più di tanto.

sv1972

Io l'ho scovato googolando in rete e mi pare che sia una grande idea.
Per l'appunto risolverebbe il mio problema , se non fosse per il fatto che io disseminati in casa ho degli Arduino UNO invece che dei MIcro.
PaoloP hai qualcosa da suggerirmi per risolvere  il mio problema?

scaramuzzi

Ciao a tutti. Sono Michele del team Titino. Mi fa piacere che avete citato Titino, che serve proprio per risolvere il problema della programmazione degli Arduino "sparsi" in giro per casa.
Titino è al momento compatibile con qualsiasi board basata su ATMEGA328 (quindi anche arduino UNO). Stiamo per rendere Titino compatibile anche con altri processori.
Titino è un progetto open source e ci farebbe piacere avere i vostri pareri o contributi.
Ciao
Michele-Titino.eu
 

acik

.... TITINO ... Vedo che puo' programmare l'Arduino.... ma non capisco come (se possibile) si comunica con l'Arduino tramite il bus.


Leggo che, quando sul BUS invio "Program_ID=x" il Tiny riceve lo sketch da inviare all'Arduino.

Quindi...presumo...spero..... che inviando qualcosa come "Communicate_ID=x" vengo messo direttamente in comunicazione con l'Arduino ???

Alex Limbeck

scaramuzzi

Sulla stessa rete ci possono essere diversi Titino (collegato ognuno con un arduino). Quando sulla rete è presente la stringa Program_ID=xx, il Titino con l'indirizzo xx, resetta l'Arduino che ad esso è collegato, e aspetta l'arrivo delle sketch (inviato dall'IDE di Arduino). Questo sketch viene caricato nella EEProm di Titino. Al termine del caricamento, se tutto si è svolto correttamente, Titino invia lo sketch all'Arduino.
E' chiaro che durante il processo di upload di uno sketch, la rete deve essere di esclusivo utilizzo del Titino con indirizzo xx. Qualsiasi altro dato sulla rete farebbe falllire il processo di upload.
Per evitare ciò e per gestire al meglio la rete, Titino è dotato di una serie di comandi come ad esempio  NET_STOP (ed il corrispondente NET_START) chje serve a bloccare qualsiasi trasmissione da parte di qualsiasi Titino/Arduino collegato.
La sequenza di comandi tipica per caricare uno sketch è (aprire il serial monitor di Arduino IDE)
1) NET_STOP=ALL (Tutti i Titino sulla rete bloccano la trasmissione dei dati sulla rete RS485 agli Arduino ad essi collegati);
2) Program_ID=xx. Il Titino con indirizzo xx resetta il suo Arduino ed risponde con il comando "ID#xx wait program";
3) Inviare lo sketch (come se ci fosse un Arduino collegato alla pota USB)
4) Attendere il messaggio dell'Arduino IDE di "Upload terminato"
5) Aprire il serial monitor (si vede una spece di progress bar che avanza ad indicare che il processo di upload da Titino verso Arduino è in corso)
6) Appare il messaggio che informa se è tutto ok o c'è stato un errore.

Spero di essere stato chiaro.
Comunque a giorni verrà inserito un video sul sito di Titino, dove si vedranno alcuni esempi.



acik

Non hai risposto alla mia domanda.

I vari Arduino come e quando possono usare il BUS ?

E' un BUS multi-master ? Quindi vari Arduino in casa sparano i dati alla seriale e questi dati finiscono nel BUS ?
Oppure devono azionare un PIN che attiva la trasmissione ?

Oppure e' un modello master-slave, dove e' il PC che aziona il Titino che gli interessa, collegandolo al relativo Arduino per poterci dialogare ?
Alex Limbeck

astrobeed

E' un BUS multi-master ? Quindi vari Arduino in casa sparano i dati alla seriale e questi dati finiscono nel BUS ?
Oppure devono azionare un PIN che attiva la trasmissione ?
Titino usa la RS485 pertanto è un bus Master/slave, sebbene la RS485 si può usare multimaster per farlo serve un robubsto, e complesso, protocollo con correzione degli errori e in grado di rilevare l'impegno del bus, non credo sia il caso di Titino.

Se non mi ricordo male Titino era a fianco a noi di officine robotiche al Maker Faire 2014 :)

Scientia potentia est

acik

Ok, quindi se lo hanno implementato come un BUS master-slave... ripeto la domanda fatta alcuni post fa:

Quindi...presumo...spero..... che inviando qualcosa come "Communicate_ID=x" vengo messo direttamente in comunicazione con l'Arduino ???
Alex Limbeck

scaramuzzi

Scusate, cerco di essere più chiaro, e scusatemi se forse dico cose a molti già note. Titino si collega ad un Arduino per mezzo dei pin RX, TX, RESET, GND (oltre eventualmente ai 5V).
Titino ha due modalità di funzionamente. Driver e Programmazione. 
Nel modalità Driver, Titino può essere considerato come una semplice interfaccia RS485 con autoswitch (nel senso che non bisogna preoccuparsi di abilitare nessun pin prima di qualsiasi trasmissione).
Quindi se si scrive un dato sulla seriale di Arduino (pin tx), questo viene scritto sulla rete RS485 e in senso inverso, se ci sono dati sulla rete RS485 questi saranno presenti sul pin rx di Arduino. La comunicazione è evidentemente half-duplex.
Quindi cercando di ripondere ad una delle domande, Titino non implementa nessun protocollo perchè è solo un dirver RS485 con autoswitch e quindi il protocollo, se master-slave o multimaster compreso l'eventuale gestione dei conflitti, deve essere scritto nel programma di arduino.
L'utilità di Titino ovviamente non è solo quella dare ad Arduino la possibilità di comunicare sulla rete RS485 (sarebbe bastato solo un driver RS485 e un transistor), ma di poterlo programmare utilizzando la stessa rete. Questà è la modalità Programmazione e si accedere inviado la stringa Program_ID=xx.

Il processo di upload di uno sketch avviene in due fasi:
1) da Arduino IDE nella memoria di Titino;
2) dalla memoria di Titino alla memoria di Arduino.

Questo doppio passaggio ha delle motivazioni che posso spiegarvi ma serve solo per garantire l'affidabilità del processo di upload.
 
Quindi per rispondere alla domanda di acik, nella modalità Driver, Arduino è raggiungibile sulla rete ma non ci sono ulteriori comandi implementati. Quindi se vuoi che un Arduino risponda a qualche comando o interagisca con la rete, questo deve essere implementato nello sketch di Arduino (ripeto, in questa modo di funzionamento Titino  è come se fosse in stand-by ).

Ovviamente se ci sono diversi Arduino sulla rete devi fare in modo che lo sketch preveda la gestione degli indirizzi. Per agevolare questa necessità è stato previsto che Titino scriva, durante l'upload di uno sketch, il suo indirizzo (settato in modo hardware ponticellando opportunamente dei pads) nell'ultima locazione della EEPROM di Arduino. In questo modo Titino e Arduino hanno lo stesso indirizzo e questo può essere utilizzato nello programma di Arduino.

Spero di aver chiarito meglio ma se non ci sono riuscito fammi sapere . 




 

scaramuzzi

Per astrobeed, ricordi bene, eravamo vicini a MFR14  :)


Go Up