Quanti programmi è possibile usare per programmare arduino.

Per trasferire il file hex nella memoria del micro di arduino quali programmi si possono usare oltre al già conosciuto
avrdude.

Mi serve saperlo per poter includere questi modi nel mio IDE.
Cioè se c'è un solo modo ed è con avrdude non ha senso che inserisco nel wizard una combobox per dare all'utente la possibilità di usa un'altro programma.

Se riesco farlo, è per me un passo importante.
L'ide in C++/Qt è dotato di una dialog wizard per creare un nuovo progetto, scelto il nome e la directory di destinazione, l'utente clicca "next", e viene mostrato un lista ad albero di schede o cpu divise per produttore, i dati mostrati vengono letti da tutti i file .xml presenti in una directory. Ogni produttore a più modelli per ognuno è specificato nell'xml, il nome di un file in javascript ECMA262. Quando è il momento la wizard carica ed esegue lo script ed il controllo della wizard passa allo script che può creare altre pagine di configurazione, il tutto senza mettere mano al codice in C++. Questo per ogni scheda o cpu, non per forza arduino o atmel ma anche pic o qualucque altro microncontrollore per il quale c'è un compilatore GPL o meno.
Al momento fà quello che ho detto, devo sistemare lo script per la configurazione arduino, per fare delle prove.

Lo script deve mostrare una pagina con una combobox per scegliere se usare avrdude o altro, scelto avrdude altri widget vengono aggiuti alla pagina, una combobox per scegliere la porta da usare (ttyUSB0 ttyACM0) poi deve comparire una serie di checkbox per la configurazione di avrdude se si è scelto questo.

Saluti Maurilio.

Le porte che a me appaiono nell'IDE sono /dev/ttyACM0 (che è quella di default con la UNO dato che l'Atmega8U2 viene mappato come ACM) e /dev/ttyS0, non USB0. Uso la UNO, Ubuntu 10.10 e Arduino IDE 0021 e 0022. Non so se con altre combinazioni di schede, IDE e sistemi le porte cambino.

Ciao, Leo.
Ok si va bene per i device file, ma ad esempio se l'utente vuole usare un programmatore esterno, come viene visto questo da linux, ricordo che tu ne hai uno esterno.

Poi per quello esterno quale programma si usa, avrdude?
Gli altri programmi a linea di comando che servono per scrivere o leggere dal micro quali sono?

Altra cosa che sarebbe comoda per l'utente, riguarda l'interrogazione automatica dei device, es. nel mio pc ho 4 ttyUBSxx quando collego la 2009, questo perchè c'è una internet key connessa. A quale di queste sarà collegato Arduino?

Se invio a tutte le ttyUSB, una richiesta di identificazione e mi aspetto una determinata risposta posso fare l'auto selezione della porta.

Ciao.

avrdude è la risposta: fa tutto lui.
Lo usi per leggere i fuse, per fare il dump della memoria del micro, lo usi per programmare i fuse, per caricare uno sketch, per caricare un firmware completo (fuse+bootloader+sketch), lo usi per fare un erase delle memorie, lo usi per tutto.
Io ho un USBtinyISP, che uso sempre con avrdude, che lo supporta: basta passare il nome del programmatore come parametro al programma, la porta a cui è connesso e ciò che vuoi fare fra le operazioni sopra descritte. Anche l'IDE di Arduino è in realtà solo un frontend a diversi programmi, tra cui avrdude per programmare il micro.

Tale interrogazione la fai sempre con avrdude: chiedi la verifica del codice identificativo del micro, se ti risponde ok allora hai identificato la porta dov'è collegata la scheda.

Tale interrogazione la fai sempre con avrdude: chiedi la verifica del codice identificativo del micro, se ti risponde ok allora hai identificato la porta dov'è collegata la scheda.

Ottimo, sarebbe da vedere che interrogazione fà, perchè sapendolo una volta che sono C++ posso creare una classe li che rendo disponibile agli javascript.

Io allora non metto una combobox per scegliere tra avrdude e altro dal momento che può fare tutto lui, poi caso si può sempre aggiugere. La cosa mi serve come esempio da documentare perchè tra C++, Qt, javascript, xml ecc, quando passo da una all'altra dopo una settimana mi scordo tutto.

Mentre per i singoli microcontrollori standlone, devo comunque prevedere che l'utente possa scegliere di scrivere usano un dispositivo esterno come UBBTinyISP, o usare un device FDTI.

Non ho intenzione di realizzare tutti gli script io, ma devo testare le possibilità offerte così da lasciare ad altri il compito di creare o modificare le wizard, dovro anche documentare come si creano le pagine wizard.

Insomma un bel lavorone, ma di solito lo fai bene una volta e te lo ritrovi per sempre, sempre che si possa usare nello javascript qualche istruzione import python like, o altro per importare altri javascript.

Ciao, tanks.

Dai un man avrdude e guarda un po' quanta roba permette di fare.
Nello specifico, il parametro -U permette di operare con le memorie del micro, sia essa la Eeprom, sia essa la Flash ecc... compreso anche l'ID se metti come memoria "signature", che legge appunto il codice identificativo del micro.
A parte cmq che questo test lo puoi benissimo fare con qualunque parametro e verificare se avrdude restituisce un errore o meno: se non restituisce nulla, hai azzeccato la porta, altrimenti no XD

Si devo studiare tutte le opzioni di avrdude perchè le devo inserire come checkbox nella wizard, però ho deciso che apro avrdude per vedere come fà il lavoro sporco, cosi da replicarlo in codice C++.

Questa scelta deriva dal fatto che devo avviare avrdude in QProcess, mentre se scrivo codice C++, questo me lo ritrovo per interrogare le porte anche nel caso di una scheda che usa uno strumento diverso da avrdude.

A parte cmq che questo test lo puoi benissimo fare con qualunque parametro e verificare se avrdude restituisce un errore o meno: se non restituisce nulla, hai azzeccato la porta, altrimenti no smiley-lol

Ok questa è una indicazione importante, ma cosa fà avrdude internamente, forse interroga il protocollo STK, e per i dispositivi tipo USBTiny, non so sono indeciso su dal farsi.

Ciao grazie.

L'USBtinyISP è molto più semplice di quel che si crede.
In pratica consiste semplicemente in 2 integrati: 1 Attiny2313 che ha precaricato un firmware che simula via software un driver USB (USBtiny) sia il codice per programmare via ISP un altro Atmega, ed un buffer 74125 per isolare i collegamenti quando non richiesto.

Con arduino, sia uno che tutti gli altri il baudrate per avrdude e fisso, cioè non devo permettere che l'utente ne selezioni uno diverso da quello imposto.
Sai qual'è il baudrate per 2009 e UNO?

Se usi la riga di comando per avrdude e per USBTiny, me la puoi postare?

Da man avrdude:
-C config-file, dove config-file descrive il dispositivo che si intende usare giusto?
quindi è sufficiente che creo una combobox dove elenco tutti i dispositivi e selezione quello di default, poi l'utente è libero di scegliere.

Una cosa di questo tipo come ti pare?

quidem_wizard1.png

Io so che la 2009 viaggia a 57600 mentre il bootloader della Uno permette di viaggiare a 115200.
Però sono velocità tenute quando si comunica con la scheda Arduino, non direttamente col chip Atmega.
Difatti l'USBtinyISP, emulando via software l'interfaccia USB, è più lento: scrittura 1 kB/s, lettura 2 kB/s. Per programmare il firmware di un Atmega328 con 32 kB tra scrittura, verifica ecc... ci imiega circa 1 minuto.

No, -C imposta il file di configurazione per la comunicazione, il dispositivo si imposta con -c (c minuscola). Per programmare con l'USBtinyISP, io uso una cosa del genere:
avrdude -p atmega328p -c usbtiny -U flash:w:nome_del_firmware.hex
Questa riga di comando funziona anche senza specificare la porta del programmatore. Puoi anche metterla, diverrebbe qualcosa di simile a:
avrdude -P /dev/ttyACM0 -p atmega328p -c usbtiny -U flash:w:nome_del_firmware.hex

Se invece devi programmare i fuse:
avrdude [-P /dev/ttyACM0] -U lfuse:w:0x62:m -p t85 -c usbtiny

Questa riga programma direttamente il fuse basso di un Attiny85

Ok Leo, molto utile.

Dimmi un'altra cosa su i fuse.
Con questo comando :avrdude -p atmega328p -c usbtiny -U flash:w:nome_del_firmware.hex, non si toccano i fuse, cioè durante la programmazione non c'è necessità di impostare i fuse, in quanto la modifica dei fuse è un'operazione da fare solo se l'utente è interessato. Mi spiego meglio, nel wizard di configurazione non devo mostrare nulla su i fuse, invece nel menù principale deve essereci un'item che apre una dialog che permette all'utente di modificare i fuse, in più dal momento che non è un'operazione frequente non prevedo un pulsante nella barra degli strumenti.
Nella barra degli strumenti metto solo, write, build, rebuild.

Altra cosa che vorrei fare:
Scelta la board con cui sviluppare o il micro, l'immagine di questo in svg, viene mostrata, con la possibilità di zoomare, e di scegliere un pin. Mi è capitato spesso di chiedermi: il pin xx di arduino a quale pin del micro corrisponde?

Mi sono ripromesso di testare questo codice:
https://gitorious.org/~viroos
Ma tempo non è ho, sapete se ci sono progetti simili o se c'è una gui? Sul fronte simulazione su GNU/Linux non siamo messi bene.

Ciao.

  1. i fuse non dovrebbero generalmente essere toccati. Difatti ciò non è in genere possibile (vedi ad esempio l'IDE di Arduino) perché i fuse alterano il funzionamento base dei micro. Quindi è bene mettere l'opzione "sotto chiave" :slight_smile:

  2. Questo può valere solo per l'Atmega328 dell'Arduino. Per gli altri micro non ne vedo l'utilità visto che non sono usati nell'Arduino. Al max puoi mettere il pinout per aiutare i collegamenti.

  3. Non conosco quel software.