Differenze tra le versioni di "Programmazione dei microcontrollori"

Da raspibo.
Jump to navigation Jump to search
 
(23 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
 +
== AVRDUDE ==
 +
 
Oggi molte schede utilizzate per sperimentare come ad esempio Arduino utilizzano come cuore del sistema un microcontrollore.
 
Oggi molte schede utilizzate per sperimentare come ad esempio Arduino utilizzano come cuore del sistema un microcontrollore.
  
Riga 17: Riga 19:
 
Il secondo punto e' molto piu' comodo se il micro viene usato per test di software in fase di sviluppo.
 
Il secondo punto e' molto piu' comodo se il micro viene usato per test di software in fase di sviluppo.
  
Ci sono per' alcuni svantaggi: una parte della memoria e' utilizzata dal bootloader, l'avvio risulta piu' lento in quanto c'e' un piccolo tempo di attesa per un eventuale richiesta di programmazione.
+
Ci sono pero' alcuni svantaggi: una parte della memoria e' utilizzata dal bootloader, l'avvio risulta piu' lento in quanto c'e' un piccolo tempo di attesa per un eventuale richiesta di programmazione.
  
 
Il micro deve essere acquistato con il bootloader gia' caricato oppure e' necessario procurarsi un programmatore.
 
Il micro deve essere acquistato con il bootloader gia' caricato oppure e' necessario procurarsi un programmatore.
  
In questo articolo viene utilizzato Raspberri come programmatore AVR e può essere utilizzato sia per caricare il bootloader che tutto il programma sul microcontrollore:  
+
In questo articolo viene utilizzato Raspberry Pi come programmatore AVR e può essere utilizzato sia per caricare il bootloader che tutto il programma sul microcontrollore:
[http://kevincuzner.com/2013/05/27/raspberry-pi-as-an-avr-programmer/ Raspberry Pi as an AVR Programmer]  
+
[http://kevincuzner.com/2013/05/27/raspberry-pi-as-an-avr-programmer/ Raspberry Pi as an AVR Programmer]
  
 
Fondamentalmente nell'articolo si spiega come utilizzare avrdude cioè un programma a riga di comando per programmare i microcontrollori.
 
Fondamentalmente nell'articolo si spiega come utilizzare avrdude cioè un programma a riga di comando per programmare i microcontrollori.
  
Con avrdude si possono caricare i files compilati e anche settare alcuni registri che dicono al micro ad esempio qulae tipo di clock gli viene fornito.
+
Riporto i passaggi per l'installazione:
 +
Aggiornare i pacchetti
 +
sudo apt-get update
 +
sudo aptget upgrade
 +
Abilitare il modulo del kernel che gestisce SPI
 +
vi /etc/modules
 +
 +
aggiungere la riga
 +
spi_bcm2708
 +
 
 +
e riavviare il Raspberry Pi, oppure
 +
modprobe spi_bcm2708
 +
 
 +
controllare che sia presente la periferica abilitata
 +
ll /dev/spidev*
  
Questi registri si chiamano fuses, per il loro settaggio è meglio fare riferimento ai datasheets dei singoli modelli, comunque a questa pagina viene dato un aiuto per la configurazione: [http://www.engbedded.com/fusecalc/ engbedded]
+
poi procedere installando i pacchetti necessari
 +
 
 +
sudo apt-get install bison autoconf make gcc flex
 +
 
 +
git clone https://github.com/kcuzner/avrdude
 +
cd avrdude/avrdude
 +
./bootstrap
 +
./configure
 +
make
 +
sudo make install
 +
(oppure: apt-get install avrdude)
 +
 
 +
se tutto è andato bene ci sarà l'eseguibile avrdude nella dir /usr/local/bin/
 +
 
 +
ls -l /usr/local/bin/avrudude
 +
 
 +
é possibile anche controllare quale sarà avrdude predefinito che verrà lanciato con il comando 
 +
 
 +
which avrdude
 +
 
 +
possiamo anche verificare usando il comando
 +
 
 +
  avrdude -c ?type
 +
 
 +
e controllando che sull'ultima riga venga compaia wiring con la sua descrizione
 +
 
 +
Ora va modificata la configurazione:
 +
 
 +
Modificare il file di configurazione di avrdude
 +
 
 +
sudo vi /usr/local/etc/avrdude.conf
 +
(se avete usato il pacchetto debian il file e`: "/etc/avrdude.conf")
  
E' possibile poi integrare l'uso del Raspberry Pi come programmatore anche nell'IDE di Arduino, per questo bisogna agire come sopra nei files di configurazione di avrdude, tenendo conto però che arduino usa un proprio avrdude.conf(/usr/share/arduino/hardware/tools/avrdude.conf):
+
Modificare la riga default_parallel per indicare di utilizzare la porta spidev0.0
* Modificare la riga default_parallel per indicare di utilizzare la porta spidev0.0
 
 
  default_parallel  = "/dev/spidev0.0";
 
  default_parallel  = "/dev/spidev0.0";
* Aggiungere il programmatore linuxspi
+
Modificare  il programmatore "linuxspi" (circa alla riga 1124 del file di configurazione) in questo modo:
 
   programmer
 
   programmer
 
   id = "linuxspi";
 
   id = "linuxspi";
Riga 41: Riga 87:
 
   connection_type = parallel;
 
   connection_type = parallel;
 
  ;
 
  ;
 +
(Io ho usato "reset=22" cosi` ho tutti i collegamenti in linea e non ho messo "connection_type = parallel" --[[Utente:Dave4rp|Dave4rp]] ([[Discussioni utente:Dave4rp|discussioni]]) 16:18, 26 dic 2015 (CET))
 +
 +
Un paio d'esempi di collegamenti di programmazione realizzati col [[Raspberry Pi]]:
 +
* [[File:Raspberrypi-raspibogadget.pdf]]
 +
* [[File:Raspberrypi-atmega328.pdf]]
 +
 +
Come primo test ho usato il "[[Raspibo gadget keyring]]" e per prima cosa ho verificato il collegamento/funzionamento col comando:
 +
<pre style="color:blue;overflow:auto">
 +
sudo avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000
 +
</pre>
 +
 +
Per scrivere il programma sulla 'flash' dell' ATTiny85:
 +
<pre style="color:blue;overflow:auto">
 +
sudo avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000 -U flash:w:RaspiBOGadget_Beta.cpp.hex
 +
</pre>
 +
dove "RaspiBOGadget_Beta.cpp.hex" e` il programma compilato dall'ide di Arduino (versione 1.6.5 al momento in cui scrivo), e per "trovarlo", si deve compilare il programma (e` sufficiente un salvataggio ed una 'verify', una verifica) e andare in cerca del ".hex" nella directory temporanea, in linux "/tmp".
 +
 +
Con avrdude si possono caricare i files compilati e anche settare alcuni registri che dicono al micro ad esempio quale tipo di clock gli viene fornito.
 +
 +
Questi registri si chiamano fuses, per il loro settaggio è meglio fare riferimento ai datasheets dei singoli modelli, comunque a questa pagina viene dato un aiuto per la configurazione: [http://www.engbedded.com/fusecalc/ engbedded]
  
 +
Ad esempio questo è il comando che setta i fuses su Sanguinololu (una scheda che pilota spampanti 3D) usando il file di configurazione di avrdude usato da Arduino:
 +
<pre style="color:blue;overflow:auto">
 +
avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -patmega1284p -clinuxspi -Ulfuse:w:0xFF:m -U hfuse:w:0xDC:m -U efuse:w:0xFD:m
 +
</pre>
  
 +
in particolare qui viene settato il clock e disabilitato l'uso dei pin per la porta Jtag che andrebbe in conflitto con il controllo motori dell'asse x.
 +
 +
Quando si settano i fuses su un micro nuovo, probabilmente ci si troverà che dopo la prima programmazione il micro non risponde più perchè quando escono di fabbrica hanno il fuse di clock settato per utilizzare il generatore di clock interno, se andiamo a modificare i fuses e diciamo di usare un altro tipo di clock al prossimo giro il micro funziona solo se quel tipo di clock gli viene fornito (ad esempio quarzo esterno, onda quadra ecc).
 +
 +
=== Riferimenti ===
 +
* [http://www.ladyada.net/learn/avr/avrdude.html AVR Tutorial: Starting out with avrdude]
 +
* [http://www.engbedded.com/fusecalc/ Atmel AVR® Fuse Calculator]
 +
* [http://kevincuzner.com/2013/05/27/raspberry-pi-as-an-avr-programmer/ Raspberry Pi as an AVR Programmer]
 +
 +
== Programmare ATMEGA con Arduino ==
 +
 +
E` possibile programmare un' ATMEGA tramite una scheda Arduino, questo il circuito elettrico: [[File:Arduino-programmer-atmega328.pdf]] (si puo` mettere il quarzo esterno anche se i 'fuse' non sono ancora settati per l'utilizzo).
 +
 +
Una volta collegato, tramite l'IDE Arduino si deve caricare il programma "Arduino ISP" alla scheda Arduino (eseguendo le normali operazioni), dopodiche`, si e` gia` pronti per programmare l'ATMEGA che avete collegato, caricate uno/lo sketch ed utilizzate la voce di menu "Upload Using Programmer" (la trovate nel menu Sketch).
 +
 +
E` sicuramente necessario caricare il programma "Arduino ISP" se intendere installare anche il "bootloader" Arduino nel chip ATMEGA che avete collegato (menu "Tools" -> "Burn Bootloader"), altrimenti dovrebbe funzionare con qualsiasi sketch presente sull'arduino (da me e` cosi`).
 +
 +
=== Programmare Microduino con Arduino ===
 +
 +
Per utilizzare Arduino come programmatore simil FTDI, cioe` programmare in seriale TTL, e` sufficiente rimuovere il chip ed effettuare il collegamento della seriale e del reset, esempio di collegamento al microduino:
 +
 +
<pre style="overflow:auto">
 +
PIN Arduino <-> PIN Microduino
 +
          0  -  D0
 +
          1  -  D1
 +
      RESET  -  RST
 +
        5V  -  5V
 +
        GND  -  GND
 +
</pre>
 +
 +
Ricordate di rimuovere l'ATMEGA dalla board di Arduino, collegate la USB al pc, procedete con le normali operazioni.
 +
 +
 +
;Riferimenti
 +
:https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard
 +
:https://www.arduino.cc/en/Tutorial/ArduinoISP
 +
:http://blog.sachleen.com/posts/1356050240/programming-atmega-using-arduino-uno-smd/
 +
 +
== IDE Arduino su Raspberry Pi per uso come programmatore SPI ==
 +
 +
''Installazione e configurazione''
 +
 +
Installare Arduino
 +
 +
pi@raspberrypi ~ $ sudo apt-get install arduino
 +
 +
Modificare il file con le definizioni dei tipi di programmatori
 +
 +
sudo vi /usr/share/arduino/hardware/arduino/programmers.txt
 +
 +
Aggiungere le seguenti righe
  
Va inoltre modificato il file programmers.txt(/usr/share/arduino/hardware/arduino/programmers.txt):
 
 
  #Name è il nome del programmatore che compare sull'ide
 
  #Name è il nome del programmatore che compare sull'ide
 
  linuxspi.name=Raspberry Pi Spi Programmer
 
  linuxspi.name=Raspberry Pi Spi Programmer
Riga 52: Riga 172:
 
  linuxspi.protocol=linuxspi  
 
  linuxspi.protocol=linuxspi  
  
Ad esempio questo è il comando che setta i fuses su Sanguinololu (una scheda che pilota spampanti 3D):
+
Modificare il puntamento alla configurazione di avrdude puntando a quello modificato anche da Arduino:
  
  avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -patmega1284p -clinuxspi -Ulfuse:w:0xFF:m -U hfuse:w:0xDC:m -U efuse:w:0xFD:m
+
  sudo mv /usr/share/arduino/hardware/tools/avrdude.conf /usr/share/arduino/hardware/tools/avrdude.conf_bck
 +
sudo ln -s /usr/local/etc/avrdude.conf /usr/share/arduino/hardware/tools/avrdude.conf
  
in particolare qui viene settato il clock e disabilitato l'uso dei pin per la porta Jtag che andrebbe in conflitto con il controllo motori dell'asse x.
+
e infine utilizzare l'eseguibile avrdude modificato per l'uso del GPIO modificando il puntamento verso l'eseguibile dalla cartella /usr/bin (quella di default) alla cartella /usr/local (quella in cui si trova avrdude con supporto GPIO)
 +
 
 +
pi@raspberrypi ~/avrdude/avrdude $ ls -al /usr/share/arduino/hardware/tools/avrdude
 +
lrwxrwxrwx 1 root root 23 Oct  2  2012 /usr/share/arduino/hardware/tools/avrdude -> ../../../../bin/avrdude
 +
sudo ln -s /usr/local/bin/avrdude /usr/share/arduino/hardware/tools/avrdude
  
Quando si settano i fuses su un micro nuovo, probabilmente ci si troverà che dopo la prima programmazione il micro non risponde più perchè quando escono di fabbrica hanno il fuse di clock settato per utilizzare il generatore di clock interno, se andiamo a modificare i fuses e diciamo di usare un altro tipo di clock al prossimo giro il micro funziona solo se quel tipo di clock gli viene fornito (ad esempio quarzo esterno, onda quadra ecc).
+
anche qui come sopra lanciamo avrdude e controlliamo che nell'ltima riga compaia wiring
  
== Dettaglio installazione e configurazione IDE Arduino per programmatore SPI ==
+
  /usr/share/arduino/hardware/tools/avrdude -c ?type
  
pi@raspberrypi ~ $ sudo apt-get install arduino
+
Lanciare l'IDE di Arduino da root (per avere i permessi ad utilizzare i pin del GPIO) e controllare che sia presente il nuvo tipo di programmatore
  
sudo vi /usr/share/arduino/hardware/tools/avrdude.conf
 
  
 +
[[File:1_Arduino_Raspberry_Pi_Spi_Programmer.png]]
  
  
 +
Se tutto è configurato correttamente è possibile ora programmare i microcontrollori usando gli schemi sotto riportati.
  
 +
'''Attenzione''', per usare il programmatore appena configurato bisognerà utilizzare il menu File => Carica con un programmatore e non la voce Carica che si usa solitamente.
  
  
  
 +
{|border="1" cellpadding="5" cellspacing="10" align="center"
 +
|-
 +
|[[File:2 Arduino carica con un programmatore.png|400px]]
 +
|[[File:Raspberry pi programmer.jpg|400px]]
 +
|-
 +
|[[File:Raspberry Pi Atmega programmer schem.png|400px|thumb|left|Schema]]
 +
|[[File:Raspberry Pi Atmega programmer bb.png|400px|thumb|right|Schema]]
 +
|}
  
 +
== Protocollo STK500 ==
  
 
Per la programmazione dei microcontrollori AVR prodotti dalla Atmel viene utilizzato il protocollo STK500
 
Per la programmazione dei microcontrollori AVR prodotti dalla Atmel viene utilizzato il protocollo STK500
[http://www.atmel.it/Images/doc2591.pdf STK500 Communication Protocol]
+
[http://www.atmel.com/images/doc2591.pdf STK500 Communication Protocol]
  
 
Per esaminare eventuali problemi si possono abilitare le seguenti voci nel file di preferenze di Arduino:
 
Per esaminare eventuali problemi si possono abilitare le seguenti voci nel file di preferenze di Arduino:
Riga 83: Riga 219:
 
* console.auto_clear=false
 
* console.auto_clear=false
  
E' inoltre possibile aggiungere questa riga di configurazione a programmaers.txt relativamente al tipo di programmatore che si sta usando
+
E' inoltre possibile aggiungere questa riga di configurazione a programmers.txt relativamente al tipo di programmatore che si sta usando
 
* usbtinyisp.force=true
 
* usbtinyisp.force=true
 +
 +
== Programmazione di altri microcontrollori ==
  
 
In questa pagina viene spiegato come usare Raspberry Pi per programmare i microcontrollori PIC32  
 
In questa pagina viene spiegato come usare Raspberry Pi per programmare i microcontrollori PIC32  
 
[https://code.google.com/p/picnc/wiki/OpenOCD_PIC32_Programmer OpenOCD_PIC32_Programmer]
 
[https://code.google.com/p/picnc/wiki/OpenOCD_PIC32_Programmer OpenOCD_PIC32_Programmer]

Versione attuale delle 19:24, 4 dic 2016

AVRDUDE

Oggi molte schede utilizzate per sperimentare come ad esempio Arduino utilizzano come cuore del sistema un microcontrollore.

Si tratta di un circuito integrato al cui interno sono presenti una CPU e diverse periferiche che ne permettono una interazione con il mondo esterno.

Per programmare un microcontrollore si usano normalmente due tecniche:

  • Si utilizza un programmatore esterno
  • Si programma il micro via seriale

Nel primo caso, similmente a quanto avviene nei pc possiamo installare il software a partire dalle prime celle di memoria.

L'avvio risulta piu' veloce perche' appena acceso il micro parte ad eseguire il software caricato e possiamo sfruttare tutta la memoria a disposizione.

In questo caso pero' la programmazione richiede alcune predisposizioni hardware cioe' lo smontaggio del micro dalla scheda in cui normalemte lavora o comunque la possibilita' di collegare il programmatore esterno ai pin del microcontrollore.

Inoltre e' necessario possedere un programmatore.

Il secondo punto e' molto piu' comodo se il micro viene usato per test di software in fase di sviluppo.

Ci sono pero' alcuni svantaggi: una parte della memoria e' utilizzata dal bootloader, l'avvio risulta piu' lento in quanto c'e' un piccolo tempo di attesa per un eventuale richiesta di programmazione.

Il micro deve essere acquistato con il bootloader gia' caricato oppure e' necessario procurarsi un programmatore.

In questo articolo viene utilizzato Raspberry Pi come programmatore AVR e può essere utilizzato sia per caricare il bootloader che tutto il programma sul microcontrollore: Raspberry Pi as an AVR Programmer

Fondamentalmente nell'articolo si spiega come utilizzare avrdude cioè un programma a riga di comando per programmare i microcontrollori.

Riporto i passaggi per l'installazione: Aggiornare i pacchetti

sudo apt-get update
sudo aptget upgrade

Abilitare il modulo del kernel che gestisce SPI

vi /etc/modules

aggiungere la riga

spi_bcm2708

e riavviare il Raspberry Pi, oppure

modprobe spi_bcm2708

controllare che sia presente la periferica abilitata

ll /dev/spidev*

poi procedere installando i pacchetti necessari

sudo apt-get install bison autoconf make gcc flex
git clone https://github.com/kcuzner/avrdude
cd avrdude/avrdude
./bootstrap
./configure
make
sudo make install

(oppure: apt-get install avrdude)

se tutto è andato bene ci sarà l'eseguibile avrdude nella dir /usr/local/bin/

ls -l /usr/local/bin/avrudude

é possibile anche controllare quale sarà avrdude predefinito che verrà lanciato con il comando

which avrdude 

possiamo anche verificare usando il comando

 avrdude -c ?type

e controllando che sull'ultima riga venga compaia wiring con la sua descrizione

Ora va modificata la configurazione:

Modificare il file di configurazione di avrdude

sudo vi /usr/local/etc/avrdude.conf

(se avete usato il pacchetto debian il file e`: "/etc/avrdude.conf")

Modificare la riga default_parallel per indicare di utilizzare la porta spidev0.0

default_parallel   = "/dev/spidev0.0";

Modificare il programmatore "linuxspi" (circa alla riga 1124 del file di configurazione) in questo modo:

 programmer
  id = "linuxspi";
  desc = "Use Linux SPI device in /dev/spidev*";
  type = "linuxspi";
  reset = 25;
  connection_type = parallel;
;

(Io ho usato "reset=22" cosi` ho tutti i collegamenti in linea e non ho messo "connection_type = parallel" --Dave4rp (discussioni) 16:18, 26 dic 2015 (CET))

Un paio d'esempi di collegamenti di programmazione realizzati col Raspberry Pi:

Come primo test ho usato il "Raspibo gadget keyring" e per prima cosa ho verificato il collegamento/funzionamento col comando:

sudo avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000

Per scrivere il programma sulla 'flash' dell' ATTiny85:

sudo avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000 -U flash:w:RaspiBOGadget_Beta.cpp.hex

dove "RaspiBOGadget_Beta.cpp.hex" e` il programma compilato dall'ide di Arduino (versione 1.6.5 al momento in cui scrivo), e per "trovarlo", si deve compilare il programma (e` sufficiente un salvataggio ed una 'verify', una verifica) e andare in cerca del ".hex" nella directory temporanea, in linux "/tmp".

Con avrdude si possono caricare i files compilati e anche settare alcuni registri che dicono al micro ad esempio quale tipo di clock gli viene fornito.

Questi registri si chiamano fuses, per il loro settaggio è meglio fare riferimento ai datasheets dei singoli modelli, comunque a questa pagina viene dato un aiuto per la configurazione: engbedded

Ad esempio questo è il comando che setta i fuses su Sanguinololu (una scheda che pilota spampanti 3D) usando il file di configurazione di avrdude usato da Arduino:

avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -patmega1284p -clinuxspi -Ulfuse:w:0xFF:m -U hfuse:w:0xDC:m -U efuse:w:0xFD:m

in particolare qui viene settato il clock e disabilitato l'uso dei pin per la porta Jtag che andrebbe in conflitto con il controllo motori dell'asse x.

Quando si settano i fuses su un micro nuovo, probabilmente ci si troverà che dopo la prima programmazione il micro non risponde più perchè quando escono di fabbrica hanno il fuse di clock settato per utilizzare il generatore di clock interno, se andiamo a modificare i fuses e diciamo di usare un altro tipo di clock al prossimo giro il micro funziona solo se quel tipo di clock gli viene fornito (ad esempio quarzo esterno, onda quadra ecc).

Riferimenti

Programmare ATMEGA con Arduino

E` possibile programmare un' ATMEGA tramite una scheda Arduino, questo il circuito elettrico: File:Arduino-programmer-atmega328.pdf (si puo` mettere il quarzo esterno anche se i 'fuse' non sono ancora settati per l'utilizzo).

Una volta collegato, tramite l'IDE Arduino si deve caricare il programma "Arduino ISP" alla scheda Arduino (eseguendo le normali operazioni), dopodiche`, si e` gia` pronti per programmare l'ATMEGA che avete collegato, caricate uno/lo sketch ed utilizzate la voce di menu "Upload Using Programmer" (la trovate nel menu Sketch).

E` sicuramente necessario caricare il programma "Arduino ISP" se intendere installare anche il "bootloader" Arduino nel chip ATMEGA che avete collegato (menu "Tools" -> "Burn Bootloader"), altrimenti dovrebbe funzionare con qualsiasi sketch presente sull'arduino (da me e` cosi`).

Programmare Microduino con Arduino

Per utilizzare Arduino come programmatore simil FTDI, cioe` programmare in seriale TTL, e` sufficiente rimuovere il chip ed effettuare il collegamento della seriale e del reset, esempio di collegamento al microduino:

PIN Arduino <-> PIN Microduino
          0  -  D0
          1  -  D1
      RESET  -  RST
         5V  -  5V
        GND  -  GND

Ricordate di rimuovere l'ATMEGA dalla board di Arduino, collegate la USB al pc, procedete con le normali operazioni.


Riferimenti
https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard
https://www.arduino.cc/en/Tutorial/ArduinoISP
http://blog.sachleen.com/posts/1356050240/programming-atmega-using-arduino-uno-smd/

IDE Arduino su Raspberry Pi per uso come programmatore SPI

Installazione e configurazione

Installare Arduino

pi@raspberrypi ~ $ sudo apt-get install arduino

Modificare il file con le definizioni dei tipi di programmatori

sudo vi /usr/share/arduino/hardware/arduino/programmers.txt

Aggiungere le seguenti righe

#Name è il nome del programmatore che compare sull'ide
linuxspi.name=Raspberry Pi Spi Programmer
#Nome del device usato per la programmazione
linuxspi.communication=parallel
#Quello qui sotto è il nome del programmatore che controlla avrdude
linuxspi.protocol=linuxspi 

Modificare il puntamento alla configurazione di avrdude puntando a quello modificato anche da Arduino:

sudo mv /usr/share/arduino/hardware/tools/avrdude.conf /usr/share/arduino/hardware/tools/avrdude.conf_bck
sudo ln -s /usr/local/etc/avrdude.conf /usr/share/arduino/hardware/tools/avrdude.conf

e infine utilizzare l'eseguibile avrdude modificato per l'uso del GPIO modificando il puntamento verso l'eseguibile dalla cartella /usr/bin (quella di default) alla cartella /usr/local (quella in cui si trova avrdude con supporto GPIO)

pi@raspberrypi ~/avrdude/avrdude $ ls -al /usr/share/arduino/hardware/tools/avrdude
lrwxrwxrwx 1 root root 23 Oct  2  2012 /usr/share/arduino/hardware/tools/avrdude -> ../../../../bin/avrdude
sudo ln -s /usr/local/bin/avrdude /usr/share/arduino/hardware/tools/avrdude

anche qui come sopra lanciamo avrdude e controlliamo che nell'ltima riga compaia wiring

 /usr/share/arduino/hardware/tools/avrdude -c ?type

Lanciare l'IDE di Arduino da root (per avere i permessi ad utilizzare i pin del GPIO) e controllare che sia presente il nuvo tipo di programmatore


1 Arduino Raspberry Pi Spi Programmer.png


Se tutto è configurato correttamente è possibile ora programmare i microcontrollori usando gli schemi sotto riportati.

Attenzione, per usare il programmatore appena configurato bisognerà utilizzare il menu File => Carica con un programmatore e non la voce Carica che si usa solitamente.


2 Arduino carica con un programmatore.png Raspberry pi programmer.jpg
Schema
Schema

Protocollo STK500

Per la programmazione dei microcontrollori AVR prodotti dalla Atmel viene utilizzato il protocollo STK500 STK500 Communication Protocol

Per esaminare eventuali problemi si possono abilitare le seguenti voci nel file di preferenze di Arduino:

  • build.verbose=true
  • upload.verbose=true
  • console.auto_clear=false

E' inoltre possibile aggiungere questa riga di configurazione a programmers.txt relativamente al tipo di programmatore che si sta usando

  • usbtinyisp.force=true

Programmazione di altri microcontrollori

In questa pagina viene spiegato come usare Raspberry Pi per programmare i microcontrollori PIC32 OpenOCD_PIC32_Programmer