16 commenti su “Arduino e Atmega328: Un po’ di chiarezza

  1. Ciao!
    mi chiamo Mario, ed ho apprezzato TANTISSIMO il tuo “Facciamo Chiarezza”.
    Mi ha aiutato molto.
    Sono un veterano dei microprocessori, ed ho SEMPRE COMPILATO i miei programmi per darli “in pancia” al uP. Ora ho voluto provare arduino, e mi sono trovato letteralmente nei casini!
    Ho il mio bravo file .hex compilato, che vorrei infilare in qualche modo in un ATMEGA328, ma non ci riesco.
    Ho costruito una board, pretendendo di poterlo programmare IN CIRCUIT, come facevo ai miei tempi…
    Niente di tutto questo. Non ci riesco. E pare, da quanto scrivi, non sia possibile senza usare sketch.
    Ho provato il Ponyprog2000 con un’interfaccia seriale fatta con un cavo USB-seriale, ma niente da fare.
    Inoltre, il mio ATMEGA328 l’ho acquistato già programmato con il bootloader.
    Non so se serve, se mi da’ fastidio per programmarlo, come cancellarlo/inibirlo per fare la programmazione… insomma sono in alto mare!
    Mica potresti darmi qualche dritta?

    • Ciao Mario,
      è tutto abbastanza semplice, soprattutto se provieni già dal mondo dei microcontrollori…
      Per programmare IN CIRCUIT, non va bene il cavo USB/Seriale… Quello funziona solo per programmare gli Atmega328 con bootloader Arduino.
      Devi usare un programmatore per Atmega (tipo USBTinyISP), e collegarlo correttamente come indicato nel mio articolo sulla programmazione senza bootloader
      A questo punto puoi caricare il tutto con Arduino IDE (se hai il programma sorgente) usando il comando “File –> Upload using programmer”. In questo modo sovrascriverai il bootloader di Arduino (che altro non è che un file .hex scritto per permettere il caricamento via seriale).
      Se hai già il file .hex e non vuoi usare Arduino IDE, hai varie possibilità. Il Ponyprog2000 non l’ho mai provato, ma probabilmente funziona a patto che tu lo usi un programmatore come USBTinyISP.
      Alternativamente puoi usare il programma da riga di comando AVRDUDE:
      C:\Arduino\hardware/tools/avr/bin/avrdude -CC:\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -cusbtiny -Uflash:w:C:\Users\Luca\AppData\Local\Temp\build297348768681355585.tmp\Blink.cpp.hex:i
      Questo è praticamente il comando che usa Arduino IDE quando compili e fai l’upload via programmatore… Facendo così non dovresti avere probelmi…
      A presto

      • Ciao,
        ti ringrazio della tua cortese e velocissima risposta!!!
        Ti chiedo di scusarmi se approfitto a della tua pazienza, ma ti chiedo ancora un pò d’aiuto per risolvere questo dannato (per me) problema al più presto….
        Come ti ho scritto, il programma l’ho già editato e compilato con il compilatore BASCOM, in basic (che conosco, il C++ di Arduino non lo conosco purtroppo).
        Non voglio e neanche posso, riscriverlo in C++ (non ne sarei capace, per lo meno in tempi brevi).
        Purtroppo, non dispongo della piastrina Arduino (anche se l’ho acquistata DI CORSA su ebay, ieri).
        Ora, tu mi dici di acquistare USBTinyISP.
        E’ necessario che lo acquisti, se tra qualche giorno dovrei avere l’ARDUINO?
        O mi servirà comunque?
        Ed inoltre, mi sorge spontanea la domanda: Ma è proprio necessario usare l’ IDE di ARDUINO visto che non programmo in C?
        Per me è paradossale, addirittura, dover ricorrere alle righe di programma, tipo DOS, per effettuare una programmazione!!!
        Perciò avevo pensato di usare Ponyprog2000, e ho costruito un’interfaccia al micro, seguendo le istruzioni sullo stesso sito di ponyprog, usando un adattatore USB-seriale: ma purtroppo senza successo.
        Ponyprog mi dà errore (-24) come se non “sentisse” l’ ATMEGA328.
        Inutile dirti, ovviamente, che non ci sono errori di collegamento avendo ricontrollato
        A questo proposito, Volevo anche chiederti: ma quanto tempo ci si mette per programmare un ATMEGA328? (più o meno).
        Domando, perché ho letto in giro sulla rete, che anche con Arduino è un processo LUNGHISSIMO!
        Infine: Ho acquistato dei micro ATMEGA328 con già il bootloader incorporato: ho sbagliato?
        E’ possibile “cancellarlo”?, o si può tranquillamente ignorare, seguendo una particolare procedura (che ignoro, anche questa, al momento)?
        Chiedo scusa, di nuovo, ma veramente non saprei come districarmi senza aiuto.
        ciao
        Mario

      • Ciao Mario,
        non preoccuparti, sono qui per questo… 🙂
        Cerco di fare un po’ più di chiarezza…
        Il sistema ufficiale per programmare l’Altmega328 (lasciando perdere Arduino), è utilizzare AvrStudio e il programmatore dedicato AvrISP mkII… Il software è gratuito, ma il programmatore costicchia…
        Arduino è quandi nato come sistema per programmare un’Atmega328 via seriale, utilizzando l’apposito bootloader (un software che permette appunto di fare l’upload e download via seriale standard)…

        Se tu vuoi programmare l’Atmega328 senza utilizzare Arduino, e senza utilizzare l’Arduino IDE, o usi il sistema ufficiale di cui sopra, oppure usi un programmatore di terze parti (l’economico USBTinyISP per esempio), e per fare l’upload usi avrdude come indicato nella mia risposta precedente…
        Può darsi, ma non se sono sicuro, che possa funzionare anche con Ponyprog2000, con AvrStudio e forse anche con qualche altro software. Il sistema più semplice per me rimane avrdude da riga di comando…
        Usando questo sistema sovrascrivi (e quindi cancelli) il bootloader di Arduino.

        Altra cosa se invece vuoi programmare l’Atemga328 con bootloader Arduino.
        In questo caso o usi sempre avrdude indicando il file .hex, ma usi il convertitore seriale per fare l’upload del file, oppure più semplice usi XLoader, software studiato appunto per fare l’upload di file .hex su piattaforme Arduino.
        In questo caso però il tuo Atmega328 avrà comunque sempre il bootloader di Arduino, se vuoi usare l’Atmega328 come vero e proprio microcontroller standalone, devi usare uno dei sistemi indicati prima.

        L’unico sistema reale per programmare “In Circuit” resta comunque il programmatore dedicato.

        Per quanto riguarda i tempi di programmazione, con Arduino siamo intorno ai 2-3 secondi, con un programmatore dedicato intorno ai 6-7 secondi…

        Spero di esserti stato utile
        A presto

  2. Ciao,
    Grazie moltissime per la tua risposta …. e della tua pazienza! 🙂
    Allora, siccome (come ti ho già detto) ho acquistato di corsa una piastra ARDUINO, non vorrei comperare materiale ridondante/inutile.
    Mi piace moltissimo l’ Xloader e spero di poterlo utilizzare con successo.
    Se non dovessi riuscirci, ricorrerò all’ AVRDUDE come dici tu.
    Allora: cerco di “inventare” una procedura passo passo, seguendo quanto mi hai scritto:

    Partendo dal fatto che mi piacerebbe utilizzare il programma Xloader, posso usare l’ARDUINO che mi arriverà, per riprogrammare l’atmel, secondo la procedura “PROGRAMMAZIONE SENZA BOOTLOADER” che mi hai indicato prima?
    O devo per forza acquistare anche l’ USBtinyISP? Ti chiedo di essere chiaro su questo: ho visto infatti che questa piastrina si trova su ebay o in Inghilterra o peggio ancora in Cina, e io, purtroppo, non ho molto tempo.
    Tieni presente inoltre, che a me il bootloader non mi interessa che ci sia o non ci sia.
    L’essenziale è che non mi dia “fastidio” sia nella programmazione che nel funzionamento dopo la programmazione, del micro.
    Questo perché, una volta programmato, il micro deve funzionare da solo. Sempre.

    Altra domanda: Cosa intendi per programmazione IN CIRCUIT? Io intendo il fatto che si possa programmare il micro una volta saldato sul circuito finale e collegandosi solo al conn. ISP (o ICSP). Giusto?
    Se è così, perché dici che mi serve il programmatore dedicato? E quale sarebbe? l’ AvrISP mkII ??
    In questo caso, stà tranquillo: non voglio acquistarlo (spero!).

    Ma dopo tutto questo: Una volta effettuata la fatidica programmazione, come faccio ad essere sicuro che la programmazione è andata a buon fine?
    Dalla schemata di Xloader non ci sono “tasti” che mi permettono di leggere l’ ATMEL!
    ciao
    Mario

    • Ciao Mario,
      mi sa che invece che semplificare, ti ho complicato ulteriormente le cose…
      Dimentica tutto quello che ho detto e ricominciamo da capo…
      1 – Installa Arduino IDE
      2 – Segui la procedura “Programmazione senza bootloader”, fino al punto 3
      3 – Usa Avrdude per programmare l’Atmega, con la differenza che al posto del paramentro -cusbtiny devi usare -cavrisp

      Questa è la procedura più veloce in assoluto se hai fretta, ma è anche la più complessa…
      La più semplice è quella con USBTinyISP, ma devi avre tale programmatore…

      Per quanto riguarda le tue domande:
      1 – XLoader funziona solo se c’è il bootloader di Arduino
      2 – Il bootloader può “dare fastidio”… Principalmente c’è dall’altro codice che viene eseguito dal micro, e questo porta per esempio ad un ritardo di circa 1/2 secondo all’accensione del micro
      3 – Per “In Circuit” intendo proprio quello che hai detto tu… Per programmatore dedicato intendo: A) ArduinoISP – B) UsbTinyISP – C) AvrISP mkII – sono tutti equivalenti.. Il concetto è che per fare programmazione “In Circuit”, non puoi usare la seriale, ma un programmatore
      4 – Per essere sicuro che la programmazione è andata a buon fine, usando avrdude, ti fa federe la percentuale di completamento, alla fine fine ti dice “avrdude done”
      5 – Questa guida ti spiega più o meno come fare quello che vuoi fare tu, cioè programmare un’Atmega328 usando una board Arduino (http://www.sparkfun.com/tutorials/200)

      Spero di averti aiutato, rimango comunque a tua disposizione per ulteriori delucidazioni.
      A presto

      • ciao! :-)))

        Grazie, e grazie ancora per la tua PREZIOSA cortesia!
        Il tuo “tutoraggio” sta dando i suoi PREZIOSI risultati!!!

        Ieri sera sono riuscito a programmare l’ATMEGA328 utilizzando Ponyprog2000 e un’interfaccia PARALLELA!
        “L’inghippo” era spiegato anche nel manuale di Ponyprog:
        All’avviso di “Device not present (-24)” dovevo cliccare
        su “ignore” anziché “abort” ! ! !
        Incredibile!
        Comunque ora posso leggere e scrivere comodamente, senza nessun problema e…. SENZA ARDUINO!
        Ora però c’è un altro problema:
        Il file .hex che ho compilato e programmato NON FUNZIONA!
        Nulla di particolare, dirai… è la prima volta che programmi su questo micro..e sono d’accordo!

        Però NON MI FUNZIONA NESSUN PROGRAMMA, neanche quelli che sono dati come esempio nel BASCOM.

        Ed è in questo che “sniffo” lo zampino del bootloader Arduino, già programmato nel chip.
        A questo indirizzo, trovi lo schema elettrico che ho implementato:

        Fai clic per accedere a Trash%20Compactor%20-%20Schematic.pdf

        potresti darmi un tuo parere, secondo te dove sbaglio ancora?
        ciao
        Mario59

      • Ciao Mario,
        il bootloader non esiste più… nel momento che programmi, il bootloader viene sovrascritto…
        Prova a caricare questo hex: http://www.techsys.it/ajaxplorer/data/public/1cf6105d41e1d75905e16704200e8dab.php?lang=en
        Dovrebbe accendere e spegnere una volta al secondo il LED1 collegato alla porta “PC2″…
        L’ho scritto e compilato con Arduino IDE.
        Se non funziona prova a fare l’upload usando avrdude invece che con il software Ponyprog.
        Se non va ancora, a quel punto probabilmente è collegato male qualcosa, oppure sono settati male i fuse per l’oscillatore…
        Prova evenutalmente a scollegare l’oscillatore che magari è programmato per andare a 8Mhz invece che a 16Mhz…
        Fammi sapere
        A presto

  3. Ciao Toggio!
    Innanzitutto voglio ringraziarti per aver compilato il programmino! Molto gentile da parte tua!
    Ho programmato il chip con Ponyprog2000 e.. voilà! tutto funziona!
    Guarda qui un piccolo video della scheda appena programmata!

    https://dl.dropbox.com/u/18252828/sdc10887.mpeg

    A questo punto sembra lampante che è un problema di parametri di compilazione.
    Quindi vorrei farti vedere il sorgente ed il compilato prodotto da BASCOM.
    Può darsi che tu riesca a vederci qualcosa di errato:
    Il sorgente: https://dl.dropbox.com/u/18252828/tc.bas
    Il compilato: https://dl.dropbox.com/u/18252828/tc.hex

    ti sarei molto grato se tu potessi fornirmi una qualche dritta.
    grazie e… attendo trepidante!!!
    ciao
    Mario59

    • Ciao Mario,
      dal video il lampeggio sempra che dura 2 secondi, invece che 1 secondo, quindi c’è un primo problema sul clock direi…
      Inoltre ho provato a caricare il tuo hex con Xloader su Arduino ed effettivamente non funziona…
      Secondo me c’è qualche problema con il compilatore…
      Visto che il programma è molto corto io lo rifarei con Arduino…
      Il C++ di Arduino è un po’ più semplice di quello dell’AVR e ci sono migliaia di esempi in giro…
      Secondo me è la via più semplice…
      A presto
      Luca

    • Aspetta…
      forse ho trovato…
      Prova a sostituire la riga $regfile = “m8def.dat” con $regfile = “m328pdef.dat” o “m328def.dat”!!!
      Fammi sapere
      A presto

  4. Ciao Toggio,
    si in effetti il problema (per lo meno, penso, il primo di quelli a venire) era proprio nella direttiva $regfile. Infatti adesso, programmato di nuovo il chip, non si blocca più e sul display appaiono i primi “farfugliamenti”…
    Ora, vorrei chiederti questo: dato che il compilatore ha già in sè delle macro per pilotare gli LCD, non penso debba preoccuparmi delle tempistiche dei segnali dati allo stesso, non ti pare?
    Infatti, per scrivere sul display, devo dare il comando lcd “ciao” per scrivere ciao.
    Poi, il simulatore presente nel compilatore, non effettua proprio una simulazione in “tempo reale”, in quanto gli effetti che vedo sul display reale, sono differenti da quello in quello simulato.
    Tu che ne pensi?
    ciao e grazie infinite di avermi aiutato!
    Mario59

  5. Ciao Toggio,
    Mi è arrivata una board, l’ Arduino Duemilanove. Ora vorrei chiederti: usando questa pagina che mi hai indicato giorni fa:
    http://arduino.cc/en/Tutorial/ArduinoISP
    E’ possibile caricare UN QUALSIASI SOFTWARE sul secondo ATMEGA328? Oppure questo schema di collegamento serve soltanto per caricare e/o ricaricare un bootloader in un ATMEGA “vergine”?
    Inoltre vorrei chiederti: Come è possibile che il mio compiler BASCOM generi un codice errato, per cui non riesco a pilotare correttamente l’LCD?
    Vorrei sapere se a te è mai capitata una cosa del genere.
    Grazie se potrai rispondermi.
    ciao
    Mario

    • Ciao Mario,
      si, Arduino Duemilanove dovrebbe essere ingrado di caricare qualsiasi software sul secondo Atemga328,
      Per quanto riguarda BASCOM, non so esattamente quale sia il problema, ma per mia esperienza ci vuole un po’ a collegare correttamente l’LCD, quindi credo sia un problema di connessione.
      Un consiglio spassionato: passa al C++ per la programmazione… Anche se inizialmente può sempbrare più difficile, hai i seguenti vantaggi:
      1 – E’ più standard
      2 – E’ più potente e flessibile
      3 – Trovi infinitamente più esempi in giro per la rete

      Io non sapevo (e non so) minimamente programmare in C++, ma prendendo gli esempi già fatti e cercando nei vari tutorial ho imparato il C++ di Arduino senza difficoltà…
      A presto
      Luca

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...