Differenze tra le versioni di "OttoBot"

Da raspibo.
Jump to navigation Jump to search
Riga 44: Riga 44:
 
I pin che vedete sono quelli come da IDE di Arduino. Se lo programmate con altri sistemi (come Eclipse) i riferimenti possono essere diversi.
 
I pin che vedete sono quelli come da IDE di Arduino. Se lo programmate con altri sistemi (come Eclipse) i riferimenti possono essere diversi.
 
Se il vostro ATmega8 è settato per avere un risuonatore esterno, dovrete collegarlo con un pin XTAL1 e l'altro su XTAL2. Entrambi i pin XTAL1 e XTAL2 vanno poi collegati a terra con un condensatore da 22 picofarad. Ne avrete bisogno se volete raggiungere frequenze superiori agli 8 Mhz o se avete bisogno di maggiore stabilità (il risuonatore interno non è molto preciso). Per contro, il risuonatore interno non ha bisogno di collegare nulla. Per approfondire guardate questa guida [http://kskpages.weebly.com/clock-settings.html]
 
Se il vostro ATmega8 è settato per avere un risuonatore esterno, dovrete collegarlo con un pin XTAL1 e l'altro su XTAL2. Entrambi i pin XTAL1 e XTAL2 vanno poi collegati a terra con un condensatore da 22 picofarad. Ne avrete bisogno se volete raggiungere frequenze superiori agli 8 Mhz o se avete bisogno di maggiore stabilità (il risuonatore interno non è molto preciso). Per contro, il risuonatore interno non ha bisogno di collegare nulla. Per approfondire guardate questa guida [http://kskpages.weebly.com/clock-settings.html]
 +
 +
== avrdude ==
 +
 +
Per interagire con l'ATmega8 dovrete usare avrdude, questa è una riga di esempio:
 +
avrdude -p m8 -c arduino -P /dev/ttyACM1 -U flash:w:{bootloader}.hex -U hfuse:w:0xd9:m -U lfuse:w:0xe3:m
 +
 +
Per saperne di più [http://www.nongnu.org/avrdude/user-manual/avrdude_4.html]
 +
 +
-p m8
 +
dice che abbiamo a che fare con un ATmega8
 +
 +
-c arduino
 +
segnala che stiamo usando un Arduino come programmatore
 +
 +
-P /dev/(porta)
 +
è la porta dove avete collegato il programmatore, di solito per gli Arduino è ttyACMx o ttyUSBx; per conoscerla ci sono due modi: guardare nella IDE di Arduino le porte disponibili o collegare l'Arduino e guardare gli ultimi messaggi in dmesg
 +
 +
-U flash:w:{bootloader}.hex
 +
scrive il bootloader, vedi sotto
 +
 +
-U hfuse:w:0xd9:m -U lfuse:w:0xe3:m
 +
modifica i fuse, vedi sotto
 +
 +
== Caricare il bootloader ==
 +
 +
Se volete usarlo come Arduino dovreste caricare il bootloader. Potete farne anche a meno e risparmiare 1Kb (su 8, non è poco). In teoria potreste farne a meno e continuare a caricare gli sketch sull'ATmega8 l'Arduino come programmatore. Fatto sta che l'ho caricato una volta e non ho mai provato a toglierlo (del resto: if ain't broke, don't fix it). I bootloader li trovate in {cartella di Arduino}/hardware/arduino/avr/bootloaders. Se non li avete li trovate qua [https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders]
 +
 +
== Settare i fuse ==
 +
 +
Molte opzioni dell'ATmega8 sono settabili tramite dei fuse. I fuse sono dei bit su una memoria EEPROM che dicono al microcontrollore come deve comportarsi. Tramite i fuses è possibile settare il clock, se usare un oscillatore esterno o interno, quanto deve aspettare durante il boot per una nuova programmazione, etc.
 +
Qui trovate due calcolatori di fuse, questo è più semplice da usare [avrfuse|https://elektronik-kompendium.de/public/arnerossius/programme/web/avrfuse/] questo è più completo [Engbedded AVR Fuse Calculator|http://www.engbedded.com/fusecalc/].

Versione delle 00:40, 20 ott 2015

OttoBot è il risultato di un tentativo di usare un ATmega8 al posto di una board Arduino.

Le specifiche tecniche

L'ATmega8, prodotto da Atmel, è piuttosto modesto.

  • Ha 8KB di memoria flash. Se usate il bootloader di Arduino allora ve ne rimarranno solo 7.
  • Il clock è massimo 16Mhz usando un risuonatore esterno. Quello interno va a 8Mhz (ma vi risparmiate un bel po' di circuiteria). Per usare il risuonatore interno occorre cambiare un fuse.
  • 23 pin programmabili.
  • 2 interrupt.
  • Porte SPI, I²C e seriale (ma non è possibile usare seriali software, presenti nella libreria di Arduino).
  • Costa una bazzecola.

Per essere acceso ha bisogno da 2,7 a 5,5 Volt. Il prezzo oscilla attorno all'euro.

Prima versione

8bot.jpg

Come potete vedere, la dimensione è proprio mini. Si comanda tramite bluetooth. Ruote e chassis sono stampate 3d.

Modificare l'ATmega8 affinché sembri un Arduino

Per ottenere questo occorre fare tre cose:

  • Trovare un programmatore (potete usare la porta parallela oppure acquistarne uno, ma anche un normalissimo Arduino può essere usato come programmatore)
  • Settare i fuses
  • Caricare il bootloader
  • Aggiungere l'ATmega8 nel file boards.txt di Arduino

Una volta fatti questi passi, potrete usare l'IDE come per qualsiasi altra board.

Di guide su come usare i programmatori ne trovate a bizzeffe su internet, noi ci concentreremo sull'utilizzo di Arduino come ISP, che è la procedura che ho usato io.

Arduino as ISP

Negli sketch di esempio nella IDE di Arduino c'è "Arduino as ISP" (In-System Programmer). Caricatelo su un Arduino di vostra scelta con l'accortezza di controllare i pin da usare: sui Mega sono diversi. Dovrete usare la porta SPI e in genere avete: 10 reset, 11 MOSI, 12 MISO e 13 clock (SCK). Sui Mega le porte sono rispettivamente 53, 51, 50 e 52. Trovate tutto nei commenti dello sketch. Altri pin, opzionali, sono il 9 (heartbeat, mostra se il programma sta girando), 8 (error, si accende se c'è un problema), 7 (programming, si accende durante le comunicazioni).

La porta SPI va così collegata, MISO con MISO, MOSI con MOSI, SCK con SCK e reset con reset. Il datasheet lo trovate qui [1]

Atmega8 arduinopinout.png

I pin che vedete sono quelli come da IDE di Arduino. Se lo programmate con altri sistemi (come Eclipse) i riferimenti possono essere diversi. Se il vostro ATmega8 è settato per avere un risuonatore esterno, dovrete collegarlo con un pin XTAL1 e l'altro su XTAL2. Entrambi i pin XTAL1 e XTAL2 vanno poi collegati a terra con un condensatore da 22 picofarad. Ne avrete bisogno se volete raggiungere frequenze superiori agli 8 Mhz o se avete bisogno di maggiore stabilità (il risuonatore interno non è molto preciso). Per contro, il risuonatore interno non ha bisogno di collegare nulla. Per approfondire guardate questa guida [2]

avrdude

Per interagire con l'ATmega8 dovrete usare avrdude, questa è una riga di esempio:

avrdude -p m8 -c arduino -P /dev/ttyACM1 -U flash:w:{bootloader}.hex -U hfuse:w:0xd9:m -U lfuse:w:0xe3:m 

Per saperne di più [3]

-p m8 

dice che abbiamo a che fare con un ATmega8

-c arduino

segnala che stiamo usando un Arduino come programmatore

-P /dev/(porta)

è la porta dove avete collegato il programmatore, di solito per gli Arduino è ttyACMx o ttyUSBx; per conoscerla ci sono due modi: guardare nella IDE di Arduino le porte disponibili o collegare l'Arduino e guardare gli ultimi messaggi in dmesg

-U flash:w:{bootloader}.hex

scrive il bootloader, vedi sotto

-U hfuse:w:0xd9:m -U lfuse:w:0xe3:m 

modifica i fuse, vedi sotto

Caricare il bootloader

Se volete usarlo come Arduino dovreste caricare il bootloader. Potete farne anche a meno e risparmiare 1Kb (su 8, non è poco). In teoria potreste farne a meno e continuare a caricare gli sketch sull'ATmega8 l'Arduino come programmatore. Fatto sta che l'ho caricato una volta e non ho mai provato a toglierlo (del resto: if ain't broke, don't fix it). I bootloader li trovate in {cartella di Arduino}/hardware/arduino/avr/bootloaders. Se non li avete li trovate qua [4]

Settare i fuse

Molte opzioni dell'ATmega8 sono settabili tramite dei fuse. I fuse sono dei bit su una memoria EEPROM che dicono al microcontrollore come deve comportarsi. Tramite i fuses è possibile settare il clock, se usare un oscillatore esterno o interno, quanto deve aspettare durante il boot per una nuova programmazione, etc. Qui trovate due calcolatori di fuse, questo è più semplice da usare [avrfuse|https://elektronik-kompendium.de/public/arnerossius/programme/web/avrfuse/] questo è più completo [Engbedded AVR Fuse Calculator|http://www.engbedded.com/fusecalc/].