KEEB.it
    • Categorie
    • Recenti
    • Tag
    • Popolare
    • Registrati
    • Accedi

    [KBpedia] MCU ATmega - Arduino Uno come ISP programmer

    Pianificato Fissato Bloccato Spostato KBpedia
    kbpediaispavrarduino
    1 Post 1 Autori 12 Letture
    Caricamento altri post
    • Da Vecchi a Nuovi
    • Da Nuovi a Vecchi
    • Più Voti
    Rispondi
    • Topic risposta
    Effettua l'accesso per rispondere
    Questa discussione è stata eliminata. Solo gli utenti con diritti di gestione possono vederla.
    • yLotharY Non in linea
      yLothar Mods
      ultima modifica di yLothar

      Questo topic prosegue il discorso iniziato qui.

      Abbiamo la nostra amata PCB "morta" oppure abbiamo a che fare con una MCU in cui il bootloader non è (ancora) installato.
      Sappiamo che ci sono diversi ISP programmer che possiamo usare: ma quale scegliere?

      A volte abbiamo sotto agli occhi tutto quello che ci può servire... e spesso non ce ne accorgiamo.

      Qui di seguito vedremo come utilizzare un Arduino Uno al nostro scopo.
      Questa piccola board infatti è un po' come un piccolo coltellino multiuso e può essere utilizzata per eseguire diversi compiti compreso quello di comportarsi come un ISP programmer.

      Avremo quindi bisogno di:

      • un Arduino Uno
      • una breadboard
      • pin di collegamento di varia lunghezza
      • 3 LED di colori diversi (opzionali)
      • 3 resistenze da 220 Ohm (opzionali)

      Arduino Uno

      Il processo che seguiremo è molto semplice: Arduino verrà programmato per comportarsi come un ISP programmer, nello specifico un AVRISP - ovvero una sorta di clone di un programmer, ora fuori commercio, distribuito direttamente da Atmel fino a qualche anno fa.
      Collegheremo Arduino con una breadboard dove sarà posizionata la nostra MCU - nel mio caso un ATmega32A.

      Arduino Uno - ISP prgrammer

      La programmazione di Arduino è banale, basta richiamare uno sketch già pronto negli esempi:

      • File » Examples » 11.ArduinoISP » ArduinoISP

      Lo sketch è ben commentato e per chi volesse ne consiglio un'attenta lettura.
      Arduino ha già un'interfaccia ISP - proprio vicino al suo ATmega328P - ma nel nostro caso utilizzeremo dei PIN specifici:

      • 10 - RST (giallo)
      • 11 - MOSI (verde)
      • 12 - MISO (arancione)
      • 13 - SCK (blu)

      Arduino ISP PINs

      Per avere dei feedback durante l'utilizzo di Arduino come ISP è possibile utilizzare anche dei LED, così collegati:

      • 7 - programmazione (verde): lampeggia quando vengono trasferiti dati
      • 8 - errore (rosso): si accende quando ci sono errori
      • 9 - heartbeat (blu): segnala il funzionamento del programmer

      Nel mio esempio ho utilizzato dei banali LED da 5 mm con delle resistenze di sicurezza pari a 220 Ohm.
      I LED sono assolutamente opzionali: il sistema funziona anche senza.

      Arduino ISP PINs

      Tornando alla programmazione dello sketch: con un Arduino Uno non c'é bisogno di fare alcuna modifica ma per sicurezza è meglio togliere il commento alla riga 81 che diventa quindi:

        #define USE_OLD_STYLE_WIRING
      

      La define USE_OLD_STYLE_WIRING serve infatti per dichiarare i PIN 11, 12 e 13 e il loro utilizzo.
      Nel codice volendo possono essere modificate altre define e customizzare così i PIN utilizzati:

        #define PIN_MOSI	11
        #define PIN_MISO	12
        #define PIN_SCK	13
        #define RESET     	4
        #define LED_HB    	7
        #define LED_ERR   	6
        #define LED_PMODE 	5
      

      Prendiamo infine nota del clock della seriale che viene impostato a 19200 alla riga 142:

        #define BAUDRATE	19200
      

      A questo punto siamo pronti per verificare il codice - lo sketch è già rilasciato perfettamente funzionante quindi non dobbiamo aspettarci delle sorprese - e caricarlo su Arduino: se abbiamo utilizzato i LED quello di hearbeat (nel mio caso quello blu) dovrebbe iniziare a lampeggiare lentamente, segnalando che la board è pronta per ricevere comandi.

      È quindi arrivato il momento di fare i collegamenti verso la MCU.
      È sufficiente recuperare il datasheet relativo per controllare la posizione dei PIN:

      ATmega32A - PIN

      I PIN che ci interessano sono:

      • 6 - MOSI - da collegare al PIN 11 di Arduino con il cavo verde
      • 7 - MISO - da collegare al PIN 12 di Arduino con il cavo arancione
      • 8 - SCK - da collegare al PIN 13 di Arduino con il cavo blu
      • 9 - RST - da collegare al PIN 10 di Arduino con il cavo giallo
      • 10 - VCC - da collegare alla +5V di Arduino con il cavo rosso
      • 11 - GND - da collegare al GND di Arduino con il cavo nero

      ATmega32A SPI

      Fatti i collegamenti è tutto pronto: è possibile utilizzare il programma avrdude per testare la corretta comunicazione con la nostra MCU.

      Possiamo quindi lanciare il comando:

      avrdude -c avrisp -p m32a -P /dev/ttyACM0 -b 19200
      

      Facciamo però attenzione ai parametri che utilizziamo:

      • -c indica il tipo di programmer che stiamo utilizzando, nel nostro caso un Arduino programmato per comportarsi come un AVRISP
      • -p indica la MCU che vogliamo programmare, nel mio esempio una ATmega32A
      • -P indica la porta seriale a cui è collegato il nostro Arduino
      • -b indica la velocità di trasmissione seriale e deve essere allineata con quanto indicato nello sketch caricato su Arduino

      In caso di corretta comunicazione dovremmo avere un output simile a questo:

      ~$ avrdude -c avrisp -p m32a -P /dev/ttyACM0 -b 19200
      
      avrdude: AVR device initialized and ready to accept instructions
      
      Reading | ################################################## | 100% 0.02s
      
      avrdude: Device signature = 0x1e9502 (probably m32a)
      
      avrdude done.  Thank you.
      

      Arrivati a questo punto siamo pronti per programmare la nostra MCU, caricando ad esempio un bootloader.

      In un prossimo post vedremo come ottenere lo stesso risultato con un programmer dedicato, nel caso specifico USBasp.

      «Quanto legno roderebbe un roditore se un roditore potesse rodere il legno?»

      1 Risposta Ultima Risposta Rispondi Cita 1
      • yLotharY yLothar ha fatto riferimento a questa discussione su
      • Primo post
        Ultimo post


      Suggerimenti
      • [KBpedia] Mysterium TKL
        yLotharY
        yLothar
        1
        3
        18

      • [KBpedia] Mill Max: valgono la pena?
        alan0fordA
        alan0ford
        1
        3
        21

      • [KBpedia] Dimensione delle tastiere: i formati classici (100%, TKL, 65%, 60% e 40%)
        yLotharY
        yLothar
        0
        1
        25
      Forum dedicato alle + creato con i rubati sull'Isola del e trafugati fin qui via dal Temibile Pirata yLothar.