[Risolto] Atmega328-pu 8MHz bootloader

Ciao a tutti,
Ho comperato a buon prezzo alcuni Atmega328-pu (versione NON picopower) che vorrei utilizzare in standalone ad 8 MHz con l'oscillatore interno e caricare tramite il bootloader.

[Ho aggiornato WinAvr all'ultima versione (WinAVR-20100110) sovrascrivendo la cartella C:\arduino-1.0.1\hardware\tools\avr] (passaggio opzionale)

Ho modificato C:\arduino-1.0.1\hardware\tools\avr\etc\avrdude.conf aggiungendo una sezione ATmega328 copiata da ATmega328P e modificando id, desc e signature

#------------------------------------------------------------
# ATmega328
#------------------------------------------------------------

part
    id			= "m328";
    desc		= "ATMEGA328";
    signature		= 0x1e 0x95 0x14;
    #-- altre voci uguali..

Ho creato in C:\arduino-1.0.1\hardware\arduino\boards.txt la voce:

mega3208pu.name=ATmega328-PU 8 MHz internal (w/Arduino bootloader)

mega3208pu.upload.protocol=arduino
mega3208pu.upload.maximum_size=32256
mega3208pu.upload.speed=19200  # IL PROBLEMA SARA' PROPRIO QUI, IL VALORE CORRETTO E' 57600

mega3208pu.bootloader.low_fuses=0xe2
mega3208pu.bootloader.high_fuses=0xde
mega3208pu.bootloader.extended_fuses=0x07
mega3208pu.bootloader.path=optiboot
mega3208pu.bootloader.file=optiboot_atmega328.hex
mega3208pu.bootloader.unlock_bits=0x3F
mega3208pu.bootloader.lock_bits=0x0F

mega3208pu.build.mcu=atmega328  # BISOGNERA' INSERIRE atmega328p PER IL BOOTLOADER
mega3208pu.build.f_cpu=8000000L
mega3208pu.build.core=arduino
mega3208pu.build.variant=standard

Ho scritto il bootloader optiboot fornito con Arduino Ide 1.01 sul micro 328-PU tramite un Arduino Uno, l'operazione è andata a buon fine.
Ho caricato sempre tramite Arduino Uno ISP uno sketch, tutto bene.
Ho provato a caricare uno sketch tramite il bootloader utilizzando un convertitore USB->UART ma ricevo:

avrdude: Version 5.11, compiled on Sep  2 2011 at 19:38:36
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\arduino-1.0.1\hardware/tools/avr/etc/avrdude.conf"

         Using Port                    : \\.\COM14
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Recv: 
avrdude: stk500_getsync(): not in sync: resp=0x00

avrdude done.  Thank you.

Ho provato anche con il bootloader "ATmegaBOOT_168_pro_8MHz.hex" ma non ho risolto nulla..
mi potete aiutare a fare funzionare il bootloader?

[SOLUZIONE]
Non ci posso ancora credere ma...
Il problema era nella velocità! Usando 57600 invece di 19200 o 115200 bps il bootloader funziona ANCHE a 8 MHz.
Questa cosa inspiegabile e non documentata da nessuna parte mi è costata cara... ma alla fine ho risolto!

Come note finali volevo aggiungere che per fare l'upload degli sketch è necessario impostare come mcu

mega3208pu.build.mcu=atmega328p

Questo farà funzionare il bootloader (e non richiede la versione aggiornata di WinAvr) ma potrebbe portare a malfunzionamenti in istruzioni non supportate dal 328-PU che invece il 328P-PU supporta, è consigliato provare a fondo i propri programmi.
Impostando su atmega328 la mcu il bootloader sembra non rispondere, per risolvere probabilmente bisognerebbe ricompilare il bootloader.

Ciao e grazie

c'e' la guida del Menny per il micro -P
http://www.michelemenniti.it/atmega328nop.html

Ho visto la guida ma nel mio caso non funziona. Ho notato che il fuse relativo alla dimensione del boot è su 256 parole.. non dovrebbe essere 512?

Ho provato ad impostarla su 1024 ma non funziona nulla ugualmente.. sembra che il bootloader non funzioni! La guida su che versione dell'IDE è stata testata?

UPDATE: E' stato confermato da Menniti che la guida NON è testata con frequenze diverse dai 16 Mhz e con le velocità di programmazione diverse da quelle di default.

256 word e' corretto per l'optiboot, perche' corrispondono a 512B

la guida e' stata testata sulla release 0.22, pero' a te funziona in gran parte, perche' hai sia messo l'optiboot della 1.01, sia caricato sketch. e' solo un problema sulla seriale.

Il convertitore che usi ha il segnale DTR ?
Lo fai arrivare al reset tramite un 100nF ?
Hai provato altre velocita' sulla seriale ?

Ragazzi ho letto in giro che il bootloader optiboot non è testato per questa versione del micro che differisce per altre cose oltre che al risparmio energetico.

Io non sono riuscito a farlo funzionare neanche dopo tutto il pomeriggio di prove! Con un programmatore come UsbAsp funziona ma con il bootloader non c'è verso! Sembra che lo carica correttamente ma poi non risponde, ho provato con l'oscilloscopio a verificare i pin RX e TX, RX sembra ricevere dal pc i dati giusti ma TX non trasmette...

Ragazzi ma qualcuno è riuscito a far funziona il 328-PU tramite seriale col bootloader?
Qualcuno l'ha ricompilato e ha il file "optiboot_atmega328nop.hex"?

hai letto una chiavica 8) e insisti pure, secondo te quello che è scritto sulla mia miniguida sono frottole?
io, se parliamo dell'optiboot della 0022, l'ho messo su quel micro e l'ho fatto lavorare su Arduino, quindi la questione non si pone, se poi non ci credi auguri, che devo dirti?
Come ti ha detto Test i fuse sono esatti quindi non cercare il problema in quella direzione, quel lavoro è garantito da firma d'autore :grin:
La miniguida riguarda appunto la versione 0022, scaricarla e fare una prova ti costa poco; se ti funziona vuol dire che la gestione hardware è corretta, fai riferimento alla guida di Test per la parte 1.0.1 ed andrà tutto bene; se non ti funziona la stai semplicemente cag e quindi devi andare alla scoperta del problema.
Ciò detto, e non per sapere dei xxxxx tuoi, che ti frega di avere un bootloader a bordo se devi usarlo in stand-alone? hai un programmatore, hai anche un Arduino, prevedi una connessione ISP e carichi direttamente lo sketch.
Comunque sia fai una prova direttamente con uno sketch e vedi se almeno ti funziona in stand-alone senza bootloader, ovviamente devi cambiare il low fuse.

ah, una cosa importante, non ho ben capito se hai usato avrdude da riga di comando quando hai ricevuto l'errore. Se è così sappi che il problema, nel tuo caso, sta nell'aver usato una COM >9 (14). Fai in modo da far riconoscere il tuo aggeggio su una COM2÷9 ed il problema dovrebbe sparire (poi bisogna vedere se ce ne sono altri).

Altra cosa: messo il bootloader hai provato a infilare il micro nel tuo Arduino e caricargli uno sketch via IDE?

Ciao,
Non dubito che la guida sia stata provata, semplicemente non sono riuscito a riprodurre con la versione 1.0.1 il risultato, il bootloader sembra non funzionare.. proverò con la versione 22 anche se mi sembrava che ArduinoISP fosse stato corretto..

Questi Atmega328-PU li devo dare ad un amico che ha una schedina standalone con convertitore USB->UART ma non ha altri programmatori ne Arduino, per questo volevo mettergli il bootloader. Ha la versione 1.0.1 quindi volevo evitare di cambiargli l'IDE..

Senza bootloader funzionano a meraviglia.

Ho usato l'IDE di arduino quando ho ricevuto l'errore, non ho mai avuto problemi con la COM14 con 328P-PU con bootloader..

Dopo il bootloader ho provato ad infilarlo su Arduino ma non funziona, solito errore..

quali sarebbero le differenze tra un PU e un P-PU?

e si potrebbe usare sulla schedina uno originale al posto del p-pu?

Allora, ho ricaricato il bootloader tramite "OptiLoader" Arduino Bootloader e sembra quasi funzionare, perlomeno tramite il convertitore usb->uart il 328-pu risponde!

Ecco cosa dice:

Binary sketch size: 1.082 bytes (of a 32.256 byte maximum)
C:\arduino-1.0.1\hardware/tools/avr/bin/avrdude -CC:\arduino-1.0.1\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328 -cstk500v1 -P\\.\COM2 -b115200 -D -Uflash:w:C:\Users\Leonardo\AppData\Local\Temp\build1498348892862766664.tmp\Blink.cpp.hex:i 

avrdude: Version 5.11, compiled on Sep  2 2011 at 19:38:36
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\arduino-1.0.1\hardware/tools/avr/etc/avrdude.conf"

         Using Port                    : \\.\COM2
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 115200
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
         AVR Part                      : ATMEGA328
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
avrdude: Send: A [41] . [80]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [81]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [04] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [82]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [04] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [98]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
         Hardware Version: 3
         Firmware Version: 4.4
avrdude: Send: A [41] . [84]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [85]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [86]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [87]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [89]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: Send: A [41] . [81]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [04] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [82]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [04] 
avrdude: Recv: . [10] 
avrdude: Send: B [42] . [86] . [00] . [00] . [01] . [01] . [01] . [01] . [03] . [ff] . [ff] . [ff] . [ff] . [00] . [80] . [04] . [00] . [00] . [00] . [80] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: Send: E [45] . [05] . [04] . [d7] . [c2] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: Send: P [50]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: AVR device initialized and ready to accept instructions

Reading | avrdude: Send: V [56] 0 [30] . [00] . [00] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: V [56] 0 [30] . [00] . [01] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
################avrdude: Send: V [56] 0 [30] . [00] . [02] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
################################## | 100% 0.00s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.

avrdude: Send: Q [51]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 

avrdude done.  Thank you.

L'output che mi aveva dato OptiLoader invece era:

OptiLoader Bootstrap programmer.
2011 by Bill Westfield (WestfW)

Target power on! ...
Starting Program Mode [OK]

Reading signature:9514
Searching for image...
  Found "optiboot_atmega328.hex" for atmega328
  Start address at 7E00
  Total bytes read: 502

Setting fuses for programming
  Lock: 3F FFE000  Low: FF FFA000  High: DE FFA800  Ext: 5 FFA400

Programming bootloader: 512 bytes at 0x3F00
  Commit Page: 3F00:3F00
  Commit Page: 3F40:3F40
  Commit Page: 3F80:3F80
  Commit Page: 3FC0:3FC0

Restoring normal fuses
  Lock: 2F FFE000

Target power OFF!

Type 'G' or hit RESET for next chip

Ora provo la versione 22, ma la tenevo come ultima spiaggia..

PS: Ho cambiato la porta in COM2 ma sembra che ci sia ancora qualche problema...

sto provando la versione 22, nella guida non c'è scritto di aggiornare WinAvr, senza non funziona, magari aggiungetelo

Vi tengo aggiornati
Ciao

Scusa mi ero scordato di risponderti:

Testato:
Il convertitore che usi ha il segnale DTR ?
Lo fai arrivare al reset tramite un 100nF ?
Hai provato altre velocita' sulla seriale ?

Si ha DTR e condensatore, l'autoreset funziona correttamente, ho provato anche 19200 come velocità ma nulla..

Ho fatto le prova con la 22 seguendo scrupolosamente la guida ma... non funziona! Nessun segno di vita.
Ma è stato provato il punto 9 della guida, "Per gli aggiornamenti successivi dello sketch (ma anche per il primo caricamento) si
può ricorrere alla tecnica seriale"? Con la programmazione ArduinoISP riesco (anche con 1.0.1) a caricare gli sketch ma tramite la seriale.. picche anche se c'è correttamente il bootloader.

PS: Ho scoperto perché prima aveva quasi funzionato, semplicemente l'IDE cercava di caricare tramite ArduinoISP mentre ero semplicemente in seriale col convertitore, usando "upload using programmer" non da nessun segno di vita

reizel:
quali sarebbero le differenze tra un PU e un P-PU?

e si potrebbe usare sulla schedina uno originale al posto del p-pu?

In linea generale NO, da quel che ho capito cambiano alcuni fuse e alcune istruzioni, la P ha inoltre funzionalità avanzate di risparmio energetico. Ma se non si usano queste funzionalità è lecito usare il 328-PU.

flz47655:

reizel:
quali sarebbero le differenze tra un PU e un P-PU?

e si potrebbe usare sulla schedina uno originale al posto del p-pu?

In linea generale NO, da quel che ho capito cambiano alcuni fuse e alcune istruzioni, la P ha inoltre funzionalità avanzate di risparmio energetico. Ma se non si usano queste funzionalità è lecito usare il 328-PU.

Sulla mia UNO R3 ho messo un 328-PU dopo aver caricato il bootloader tramite ISP e funziona senza problemi.

Puoi dire quali versioni di Arduino, WinAVR e Bootloader hai usato?

Ho scaricato l'IDE 1.0.1 per Linux dal sito ufficiale.
WinAVR su Linux dovrebbe essere avr-gcc, giusto? Versione 4.6.3
Il bootloader non so quale sia. Ho chliccato su Strumenti>Scrivi il Bootloader

LCzxk:
Ho scaricato l'IDE 1.0.1 per Linux dal sito ufficiale.
WinAVR su Linux dovrebbe essere avr-gcc, giusto? Versione 4.6.3
Il bootloader non so quale sia. Ho chliccato su Strumenti>Scrivi il Bootloader

Nell'IDE 1.0.1 è stata inserita la stessa toolchain per tutti e 3 i SO operativi per cui i risultati dovrebbero essere equivalenti.
avr-gcc della toolchain dell'IDE è la 4.3.2. Se hai 4.6.3 hai chiesto la versione di avr-gcc installato sul tuo sistema che, però, con l'IDE 1.0.1 non viene usato perché prima viene considerato l'avr-gcc "integrato"

A livello pratico tra un 328 ed un 328P (lasciamo stare il suffisso "PU" che indica solo i package) cambiano solo la signature ed i fuse. A livello interno cambia invece la gestione del risparmio energetico nel senso che non è possibile spengere direttamente le periferiche come si fa con i modelli con core "P".
Impostando una giusta board nel file boards.txt e programmando senza usare queste funzioni di risparmio energetico non si hanno differenze fra un 328 ed un 328P, tant'è che anche il datasheet è lo stesso per entrambi i modelli.