Differenze tra le versioni di "Programmazione dei microcontrollori"

Da raspibo.
Jump to navigation Jump to search
Riga 30: Riga 30:
 
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]
 
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]
  
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):
+
Ad esempio questo è il comando che setta i fuses su Sanguinololu (una scheda che pilota spampanti 3D):
* Modificare la riga default_parallel per indicare di utilizzare la porta spidev0.0
+
 
 +
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).
 +
 
 +
== Dettaglio installazione e configurazione IDE Arduino per programmatore SPI ==
 +
Installare Arduino
 +
 
 +
pi@raspberrypi ~ $ sudo apt-get install arduino
 +
 
 +
Modificare il file di configurazione di avrdude
 +
 
 +
sudo vi /usr/share/arduino/hardware/tools/avrdude.conf
 +
 
 +
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
+
Aggiungere il programmatore linuxspi
 
   programmer
 
   programmer
 
   id = "linuxspi";
 
   id = "linuxspi";
Riga 42: Riga 58:
 
  ;
 
  ;
  
 +
Modificare il file con le definizioni dei tipi di programmatori
  
 +
sudo vi /usr/share/arduino/hardware/arduino/programmers.txt
  
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 51: Riga 68:
 
  #Quello qui sotto è il nome del programmatore che controlla avrdude
 
  #Quello qui sotto è il nome del programmatore che controlla avrdude
 
  linuxspi.protocol=linuxspi  
 
  linuxspi.protocol=linuxspi  
 
Ad esempio questo è il comando che setta i fuses su Sanguinololu (una scheda che pilota spampanti 3D):
 
 
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).
 
 
== Dettaglio installazione e configurazione IDE Arduino per programmatore SPI ==
 
 
pi@raspberrypi ~ $ sudo apt-get install arduino
 
 
sudo vi /usr/share/arduino/hardware/tools/avrdude.conf
 
 
 
 
  
  

Versione delle 10:45, 28 lug 2013

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

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

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.

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):

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

Dettaglio installazione e configurazione IDE Arduino per programmatore SPI

Installare Arduino

pi@raspberrypi ~ $ sudo apt-get install arduino

Modificare il file di configurazione di avrdude

sudo vi /usr/share/arduino/hardware/tools/avrdude.conf

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

default_parallel   = "/dev/spidev0.0";

Aggiungere il programmatore linuxspi

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

Modificare il file con le definizioni dei tipi di programmatori

sudo vi /usr/share/arduino/hardware/arduino/programmers.txt
#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 




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 programmaers.txt relativamente al tipo di programmatore che si sta usando

  • usbtinyisp.force=true

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