Archivio mensile:novembre 2011

eXtreme Burner & Atmega328P

eXtreme Burner è un software alternativo ad avrdude per la riprogrammazione di chip AVR con programmatore USBasp.
E’ abbastanza funzionale ma mancano un pò di chip tra i target, tra i quali proprio l’Atmega328P.

Vediamo come aggiungere il 328p all’interno di questo software.
Andiamo in C:Program Files (x86)eXtreme Burner – AVRData e diamo diritti di lettura/scrittura al file chips.xml in questo modo:

Tasto destro sul file > Proprietà > Sicurezza > Modifica > Users > Controllo Completo e applichiamo le modifiche.

capture

Ora possiamo modificare il file chips.xml in questo modo….
Nella seione chiplist aggiungiamo questo:

    <CHIP>
        <NAME>ATmega328P</NAME>
        <FLASH>32768</FLASH>
        <EEPROM>1024</EEPROM>
        <SIG>0x000F951E</SIG>
        <PAGE>256</PAGE>
        <LFUSE>YES</LFUSE>
        <HFUSE>YES</HFUSE>
        <EFUSE>YES</EFUSE>
        <LOCK>YES</LOCK>
        <CALIB>YES</CALIB>
        <PLACEMENT>.ImagesPlacementsZIF_DIP_40.bmp</PLACEMENT>
    </CHIP>

capture

Salviamo il file e in eXtreme Burner ora avremo il target Atmega328P:

capture

Ora possiamo fare quel che ci pare….
….resta il fatto, però, che consiglio avrdude…

USBasp & Win7 x64

Riprogrammare un atmega può essere un pò complicato, ma tool hardware come l’USBasp o USBtinyISP possono dare un certo grado di affidabilità per una corretta programmazione dell’IC.
Mio zio diceva sempre: “Song’ ‘e fierr ca’ fann ‘o mast” (sono i giusti utensili che ti fanno capomastro)… ed è proprio vero!

usbasp

USBasp è un programmatore AVR multipiattaforma davvero molto economico, su ebay ne trovate di già pronti a pochissimi euri.
Il sito ufficiale è questo: http://www.fischl.de/usbasp/
Qui troviamo della documentazione e i driver per Windows.

Il vero problema con i driver Windows è che non sono “signati”, nel readme si legge questo “With WinAVR version 20100110 or older, please use libusb_0.1.12.1.

Se con la versione libusb_1.2.4.0 non ho particolari problemi a farlo riconoscere (esce solo il popup di warning a fine installazione: ignoratelo) con questa versione (libusb_0.1.12.1) si ha qualche problema in più su sistemi operativi Windows 7 x64 in quanto il sistema proprio non ne vuole sapere di riconoscere la periferica in quanto non signata.

La mia soluzione tampone, per ora, è quella di usare un software particolare chiamato DSEO.
Questo software permette di abilitare sul proprio sistema operativo la modalità “test” che ci permette provare driver non signati.
In pratica è un workaround…

Una volta scaricata l’ultima versione, basterà mettere il pallino su “Enable Test Mode” e riavviare il pc:

Driver Signature Enforcement Overrider

Come dicevo è una soluzione tampone, ma meglio di niente….

Tutto questo casino è per far funzionare USBasp con AVRdude che è uno dei migliori software per la riprogrammazione degli AVR…. anche se un pò ostico in quanto gira tutto sotto riga di comando (ma esistono un casino di GUI per facilitare tale operazione).

Io ho provato libusb_1.2.4.0 con altri tool quali eXtreme Burner – AVR.

Arduino Software Reset

Aggiornamento: nelle ultime versione dell’ide/bootloader questa macro fa andare in loop il nostro arduino, non lo fate! Per sbloccarlo: http://blackstufflabs.com/2013/10/24/aggiornare-firmware-usbasp-con-arduino/

 

Raramente vi capiterà di intervenire via software per resettare l’arduino.
Il miglior modo per fare un buon reset software e quello indicato dal sito ufficiale dell’atmel: reset

Usare il reset software significa, per la maggior parte delle volte, aver scritto uno sketch fatto un pò una merda.

Può capitare che qualcosa si può freezare: ad esempio il wiznet w5100 sull’ethernet shield.
A quel punto, l’unica soluzione è resettare.

Il codice da inserire in testa allo sketch è questo:

#include
#include

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

E invocare, poi, la macro nel punto in cui avete bisogno di resettare l’arduino in questo modo:
Reset_AVR();

Cosa fa di preciso il reset software?
Con reset software si intende invocare il “watchdog” (cane da guardia) interno per almeno 25mili secondi che si occuperà di resettare il program counter (instruction pointer) a 0, pulisce i registri del’IC ed effettua altre operazioni. Questa operazione è teoricamente uguale a quella di premere il tasto reset sulla scheda.

OptiBoot 4.4

Nel precedente articolo vi avevo parlato di come aggiornare le vostre Arduino Duemilanove/Uno al nuovo bootloader OptiBoot 4.4.

Personalmente l’ho fatto sulla mia Luigino328 (clone italiano della Duemilanove) e devo ammettere che mi trovo davvero bene.
Ho più spazio per il codice e la velocità di trasferimento degli sketch sulla scheda è stata aumentata di un bel pò.

Volevo, però, precisare un pò di cose.

In primis la questione dei “fuses”.
Ma cosa sono?
All’intero di questo tipo di chip ci sono oltre alla ram, flash ed eproom anche 3 byte di memoria permanente chiamato “fuses” (in italiano: “fusibili”).
I fuses hanno il compito di descrivere alcune caratteristiche dell’integrato, come: determinare in che modo il chip agisce, se ha un bootloader, velocità del clock e la tensione di lavoro, ecc…
In particolare, quelli che ci interessano in questo momento sono quelli descritti nell’articolo precedente: High Fuse, Low Fuse, Extended Fuse e Lock Bit.
Grosso modo, questi descrivono in che zona della memoria è presente il bootloader.
Questo è estremamente importante in quanto, ad esempio, se settassimo i fuses in modo errato, probabilmente parte del codice verrebbe scritto nell’area di memoria dove risiede il bootloader.

Sono come dei paletti: codice da una parte e bootloader da un’altra.

Il bootloader caricato nella duemilanove era grosso circa 2k, il bootloader OptiBoot 4.4 circa 0.5k: un quarto più piccolo.

Quindi bisogna risettare l’High Fuse in modo tale da descrivere che l’area di memoria dove risiede il nuovo bootloader è più piccola (o più grande) di com’era prima.

Ecco perchè avevo inserito due valori per l’high fuse: uno per il bootloader della duemilanove e l’altro per l’OptiBoot.

Il modo più semplice, come già avevo segnalato, è quello di prendere questi valori direttamente da un file descrittivo all’interno dell’IDE ufficiale.
Mi riferisco in particolare al file: arduino-0023hardwarearduinoboards.txt

Leggendo bene questo file ci accorgiamo, ad esempio, che per la UNO abbiamo questa sezione:

uno.name=Arduino Uno
uno.upload.protocol=stk500
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino

L’ide di arduino viene utilizzata anche per aggiornare i bootloader quindi, AvrDude che si occupa di flashare le schede con i nuovi bootloader, ha bisogno di alcuni parametri come, ad esempio, i fuses!

Quindi, se abbiamo l’esegineza di flashare l’ultimo optiboot, ma non conosciamo i valori dei fuses, li possiamo prendere proprio da questa sezione, ed in particolare: uno.bootloader.high_fuses=0xde

Semplice no?

Ovviamente lo stessissimo discorso vale nel caso in cui volessimo flashare le schede con il vecchio bootloader duemilanove: leggiamo la sezione relativa alle schede duemilanove e cambiamo i fuses proprio così come leggiamo nel file boards.txt

Ultima cosa, come potete vedere leggiamo anche il valore dello uno.upload.speed=115200 di caricamento degli sketch (che con l’optiboot è stato maggiorato), il size massimo degli sketch che in questo caso è uno.upload.maximum_size=32256 e altre cose interessanti…

Il bootloader, di norma, lo trovate sempre all’interno delle cartelle dell’IDE… accertatevi, però, che i paramentri dei fuses e il file HEX (in cui risiede il bootloader) corrispondano a quelli del file boards.txt

La mia luigino328 dopo il flashing del’OptiBoot 4.4:

19112011005

FreePachube finito! Savara 4.0!

Finalmente ho finito il sito che tempo fa avevo accennato in questo blog.
L’ho ribattezzato Savara, acronimo di: Simple Arduino Viewing of Arranged ReAdings….

Freepachube era troppo scontato e brutto… la mia idea era quella di clonare pachube.com e thingspeak.com.
Ho usato asp.net 4.0 e C# e ho ottenuto questo dopo un pò di test:

 

capture

 

Non sarà il massimo ma sono contentissimo del risultato, l’intero progetto è scaricabile qui: scaricami

Installare/ripristinare Optiboot su Arduino Duemilanove

Oggi avevo taaaaaanta voglia di installare il “nuovo” bootloader OptiBoot 4.4  sulla mia duemilanove… risultato: brickata e poi debrickata (dubbi??).
Ora cercherò di spiegarvi come installare l’ultima versione del’optiboot sul vostro microcontroller.
Ma cos’ha di così tanto speciale l’OptiBoot?
Prima di tutto OptiBoot è il bootloader nuovo utilizzato dalle Arduino UNO in poi, il link del progetto ufficiale è questo: http://code.google.com/p/optiboot/
Dalla home del progetto leggiamo:

  • Possibilità di scrivere sketch più grandi. Optiboot è grande 0.5k (un quarto più più piccolo rispetto al bootloader del duemilanove) significa che guadagnamo 1.5k di spazio per il codice. Per un totale di 32256 byte
  • Upload degli sketch molto più veloce. Velocità di upload 115200baud
  • Permette di far girare prima i propri sketch senza watchdog.

0. Prima di tutto dobbiamo fare dei collegamenti tra l’FTDI e l’interfaccia ICSP della nostra scheda:

2754610263_7d147df701_o

1. Ciò di cui abbiamo bisogno è l’ultima versione dell’optiboot scaricabile dal sito ufficiale, in particole questo file presente nel file zip: optiboot_atmega328.hex

  • In alternativa, se si vuole ripristinare il vecchio bootloader arduino duemilanove, esso è presente all’interno della cartella: arduino-0023hardwarearduinobootloadersatmegaATmegaBOOT_168_atmega328.hex

2. Ora scarichiamo e unzippiamo il package che ho preparato, da qui:     SCARICAMIII

3. Apriamo avrdude-gui.exe

3. Selezionare avrdude.exe presente nella directory appena unzippataa

4. Come programmer impostiamo: FT232R Synchronous BitBang (diecimila)

5. Device: ATmega328P

6. Command option: -P ft0 -B 4800

7. Impostare i fuse in questo modo:

  • High Fuse: 0xDE per l’OptiBoot 0xDA per la versione vecchia del bootloader duemilanove
  • Low Fuse: 0xFF
  • Extended Fuse: 0x05
  • Lock Bit: 0x0F

Se avete dubbi, potete prendere questi valori direttamente dal’ultima versione dell’IDE e precisamente nel file: arduino-0023hardwareboards.txt

8. Selezioniamo dalla casella Flash l’OptiBoot scaricato e unzippato che desideriamo installare, precisamente: optiboot_atmega328.hex

Dovreste avere una cosa del genere:

catturanh

9. Collegare il cavo USB al pc: led POWER si accende

10. Ora cliccate su “Erase – Write – Verify”

11. Aspettate un pò di tempo: circa 10 minuti.

Ora che è andato tutto a buon fine, provate ad uploaddare lo sketch “blink” nel folder degli esempi, se avete messo l’optiboot ricordandovi di impostare come target board la board UNO.

Se blinka…. avete l’ultima versione dell’optiboot sulla vostra arduino duemilanove!

Se mettete l’optiboot sulla duemilanove ricordate di cambiare le impostazioni dell’ide: ora come target board dovete mettere “Arduino UNO” e NON più duemilanove. OK???

Fonti:
http://dereenigne.org/electronics/arduino/arduino-duemilanove-optiboot
http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html

PS

Declino ogni responsibilità su probabilissimi brick delle vostre schede.

Aggiornamento:

questa è la mia guida che vi permette di aggiornare il vostro Arduino Duemilanove con l’IDE ufficiale utilizzando usbasp: http://blackstufflabs.com/2012/02/28/optiboot-4-4-su-arduino-nano