invio di sketch via rs485

Salve sto ormai da 2 anni studiando un sistema domotico da utilizzare con circa 9 Arduino UNO.
Nelle schede che ospitano i vari Arduino UNO , oltre a questo vi sono dei ATtiny 85 e dei max485(per il bus 485).
La mia domanda è la seguente:
Utilizzando il bus 485 e sfruttando i Tiny85 (in ascolto sull'RX) non è possibile scaricare un intero sketch via seriale rs485?.
(vedi schema allegato)

In teoria sì. Dovresti però scriverti un software per i Tiny che funga da programmatore..... ma c'è un ma. Ammesso che tu riesca a scriverti il programma, con un Tiny85 non avresti sufficienti pin. Il Tiny85 ha 5 pin liberi (su 8 disponibili, 3 sono occupati da VCC/GND/RESET) ma a te servirebbero come minimo più pin, per cui dovresti disattivare il pin di reset come minimo.
Tempo fa feci dei test con il software AVR-CDC, che può girare su Tiny85, Tiny2313 e Atmega48/88. Forse potresti darci un occhio e vedere se lo integri nel tuo sistema:
http://www.recursion.jp/avrcdc/
http://forum.arduino.cc/index.php?topic=93547.0

beh da questo punto di vista non mi preoccupo perchè ho anche dei tiny 84 da poter usare , ma quello che mi manca è capire come realizzare lo stampato con i vari collegamenti tra il tiny il max485 ed arduino UNO e poi capire questo software che tu dicevi , se e dove reperirlo e come poterlo usare.
Perchè se è vero che il tiny puo essere usato come programmatore essendo ad un estremo di una linea rs485 (dove c'è anche Arduino UNO) dall'altro estremo ( dove c'è l'altro max485 ed il PC) devo in qualche maniera gestire i pin RE e DE per mettere in /scrittura/ricezione il Max485 in accordo con l'invio da parte del PC (sulla line Tx) dello sketch e conseguentemente metter in ricezione l'altro Max 485 quando deve Ricevere qualcosa da UNO (linea RX) .
Se riuscissi a fare questa cosa sarebbe GRANDE! perchè ho gia pensato che mandando delle stringhe sul bus potrei cominciare a escludere i vari nodi che non mi interessando ,lasciando attivo solo il nodo che mi interessa per poter inviare lo sketch solo a lui , e tutto questo stando comodamente seduto sul PC senza dover aprire le scatole di derivazione per dover andare a scaricare uno per uno le schede.

sv1972:
Utilizzando il bus 485 e sfruttando i Tiny85 (in ascolto sull'RX) non è possibile scaricare un intero sketch via seriale rs485?.
(vedi schema allegato)

La riposta è no se usi le modalità standard di Arduino, è si se ti scrivi un apposito codice che fa da bridge tra la seriale della UNO, reset incluso, e la RS485, però di già pronto non troverai nulla, devi scriverti il codice da solo e lo dovrai fare in C ANSI, non certo tramite wiring di Arduino.
Poi c'è la questione pin insufficienti, come ti ha fatto notare Leo, ma questa la risolvi usando un Tiny con più pin.
Rimane una questione, perché aggiungi un Tiny per la 485 quando ti basta collegare il MAX485 direttamente alla UNO ?
Tieni presente che durante la programmazione c'è un dialogo continuo tra avrdude e il micro, potrebbe essere necessario ricompilare il bootloader della UNO al fine di ridurre la velocità, di default è 115200, perché c'è il reale rischio di perdersi qualcosa per strada dato che la RS485 è halfduplex e il bootloader lavora in fullduplex.

sv1972:
beh da questo punto di vista non mi preoccupo perchè ho anche dei tiny 84 da poter usare , ma quello che mi manca è capire come realizzare lo stampato con i vari collegamenti tra il tiny il max485 ed arduino UNO e poi capire questo software che tu dicevi , se e dove reperirlo e come poterlo usare.

Ti ho messo i link nel post precedente. Nel 1° c'è la pagina ufficiale del progetto Avr-Cdc, compresi schemi elettrici e firmware nonché chip supportati (non mi pare ci sia il Tiny84), nel secondo una discussione di 15 pagine che ho aperto io all'epoca dei miei esperimenti. Essendo un'implementazione software, a me ha dato un pò di problemi per cui non s quanto affidabile possa essere in un progetto finale. Dovresti fare dei test.

Perchè se è vero che il tiny puo essere usato come programmatore essendo ad un estremo di una linea rs485 (dove c'è anche Arduino UNO) dall'altro estremo ( dove c'è l'altro max485 ed il PC) devo in qualche maniera gestire i pin RE e DE per mettere in /scrittura/ricezione il Max485 in accordo con l'invio da parte del PC (sulla line Tx) dello sketch e conseguentemente metter in ricezione l'altro Max 485 quando deve Ricevere qualcosa da UNO (linea RX) .
Se riuscissi a fare questa cosa sarebbe GRANDE! perchè ho gia pensato che mandando delle stringhe sul bus potrei cominciare a escludere i vari nodi che non mi interessando ,lasciando attivo solo il nodo che mi interessa per poter inviare lo sketch solo a lui , e tutto questo stando comodamente seduto sul PC senza dover aprire le scatole di derivazione per dover andare a scaricare uno per uno le schede.

Devi ovviamente utilizzare quel firmware come base per il tuo programma. Il sistema dovrà:

  • prevedere da parte del master l'invio dell'ID dello slave che dovrà mettersi in ricezione dei dati;
  • prevedere lato slave la "selezione" sul bus, la ricezione dei dati e la scrittura sull'Arduino a lui collegato.

PS: anticipato da Astrobeed.

Una soluzione alternativa è buttare via il bootloader di Arduino, che in realtà emula un programmatore hardware, e utilizzare al suo posto un normale bootloader seriale per ATmega, ne esistono vari tipi, col vantaggio di non dover litigare con avrdude e bypassare tutti i problemi di invio/ricezione dei dati, non serve nemmeno l'autoreset perché i bootloader si possono attivare da software con uno specifico comando.

Un esempio di ottimo bootloader seriale per ATMega, funziona anche con la 485, è questo, sebbene a pagamento 24 Euro si possono pure dare per un prodotto che risolve i problemi :slight_smile:

x Astro.. il tiny85 lo utilizzo sulla scheda per altre cose attualmente , e non lo utilizzo per la seriale 485 (per quello c'è il max485) il tiny 85 è messo nella seriale (sempre in ascolto) per fargli fare cose che non fa UNO , è per questo che ho pensato a lui (ED EVENTUALMENTE AD UN TINY 84) per il discorso di usarlo per riprogrammare via bus UNO.

Astro non ho ben capito il bootloader via seriale cui mi hai mandato il link.
Penserebbe lui a gestirsi il TX e l'RX (ricordo che in mezzo ho dei MAX485) quindi fuori dal max485 andrei direttamente all'1 e 0 dell'UNO (con il suo nuovo bootloader).
Senza dover pensare chissà a che cosa (mi fai uno schemino di massima per capire il tutto?) attualmente come convertitore seriale TTL ho un lpm335x

sv1972:
Penserebbe lui a gestirsi il TX e l'RX (ricordo che in mezzo ho dei MAX485) quindi fuori dal max485 andrei direttamente all'1 e 0 dell'UNO (con il suo nuovo bootloader).

Basta andare a leggere le sue specifiche per trovare questo:

RS485 SPECIALITIES
The precompiled hexfiles also contain an RS485 version of each target and each USART of the supported AVR 
controllers. Since RS485 is (in most applications) a half-duplex communication, an additional IO pin must be used 
to switch the direction of the RS485 transceiver between transmit and receive. The precompiled hexfiles always 
use the corresponding XCKn pin to the USARTn (e.g. USART1 uses XCK1 for direction control). If you need to use
a different IO pin for direction control, you have to buy the source code of the chip45boot2 bootloader at our online 
shop. The IO pin can then easily be changed in a header file.

Ovvero gestisce lui il pin per la direzione nel caso della 485.

sv1972:
Salve...

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Se per te è un cosa fattibile sv1972 potresti andare in RS485 a 4 fili in modo che elimini il problema della gestione della direzione e del Half-Duplex, puoi usare un qualsiasi BL, devi comunque modificarlo.
Il lavoro più grosso è quello di attribuire ad ogni slave una chiave per attivare il proprio reset necessario per avviare il BL, I dati inviati dovranno essere in protocollo ascii hex, s19, o forse anche xmodem in modo da evitare che durante la trasmissione del file gli altri slave non intercettino casualmente la loro chiave di attivazione del BL

Ciao ICIO grazie della tua ideo ma purtroppo il cavo bus è gia stato steso (è a tre fili) e poi ho gia in casa i max485 e li sto gia utilizzando , quindi il discorso full-duplex non è affrontabile.

Lo supponevo, la full duplex a 4 fili non attira molto

Ritorno sull'argomento x tenere vivo il post e per aggiornarvi in merito.
Ho provato a percorrere la strada che mi ha indicato astrobeed in merito a chip45boot , che trovo valida ma che ha dei svantaggi:

  • bisogna acquistare il kit per modificare il bootloader in quanto bisogna ricompilarlo indicando quale pin di Arduino usare come bit di direzione per il max485 (e non è per il prezzo di soli 24 euro ,ma per sapere dove mettere le mani ....infatti il bootloader che propongono standard usa il pin tx dell'ATmega8U2 per gestire il bit di direzione del bus 485 e sulla base di questo è possibile modificare il BL inserendo un pin di arduino che gestisca la direzione del bus su max485)
  • altra alternativa potrebbe essere quella di ripassare il cavo bus già steso (ipotesi suggerita da ICIO) e fare diventare la comunicazione da half-duplex a full duplex risolvendo i problemi di direzione sul bus. Ma in questo caso non saprei se,dove, e come modificare il bootloader standard di Arduino.

ho visto che in rete gia qualcuno si è svegliato risolvendo il problema in modo drastico (usando una memoria da 32k) vedi TITINO.

Quindi trovo strano che non ci siano persone che hanno sbattuto il naso su questo problema.
Ogni suggerimento è bene accetto

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

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?

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

.... 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 ???

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.