Atmega328p 8Mhz stk500 sync dopo il primo sketch

Salve a tutti!

Ho da poco caricato tramite porta parallela questo bootloader ATmegaBOOT_168_atmega328_pro_8MHz.hex con i fuse settati in questo modo: low_fuses=0xE2 high_fuses=0xD9 extended_fuses=0x07.

L'upload di sketch avviene tramite adattatore USB-Serial su breadboard.

Il primo upload va sempre a buon fine. Se voglio riuploadare lo stesso sketch subito dopo mi dà stk500_sync() error e quindi se voglio caricare un altro sketch devo riprogrammare il 328 ricaricando il bootloader.

E' normale tutto questo? E' un problema di fuse? Dovrei abilitare il Boot Reset Vector? Devo usare un altro bootloader tipo Optiboot? E' un problema di porte COM?

Non sono un tecnico e sarei grato se qualcuno mi aiutasse a capirci qualcosa.

Buona giornata!

Ciao,
nemmeeno io sono esperto, ma quell'errore di solito è legato al reset; potresti provare a premere il pulsantino del reset prima di rifare l'upload, tanto per capire, poi nel frattempo qualcuno ti darà la soluzione certa.

Fusecal mi dice che con quei fuse metti il 328 a 1 MHz... (attivi l'oscillatore a 8 MHz e poi il divisore per 8), imposti la flash da riservare al bootloader a 2 KB ed il valore dell'extended fuse non è giusto....

Leo, con lfuse = 0xE2 Fusecalc attiva l'oscillatore interno ma non divide per 8... Forse ti sei confuso...

Non avevo ripremuto bene "Apply values" una volta messi tutti i valori.
Cmq restano i problemi col il valore $07 per l'extfuse che non è a "norma" e lo spazio del bootloader impostato a 2 KB.

Potresti per favore spiegarmi alcune cose?

  1. stai usando un Atmega standalone oppure rimetti il chip nell'Arduino?
  2. se lo metti nell'Arduino, che Arduino usi?
  3. parli di bootloader: quale usi?

Ho cambiato vari valori dei fuse ma nemmeno va. In particolare con l'efuse ho provato 0x04 e 0x05.

  1. Per fare il burn del bootloader uso la porta parallela collegata su Arduino Uno, il bootloader è quello che si trova nella cartella Arduino ATmegaBOOT_168_atmega328_pro_8MHz.hex

Una volta caricato il bootloader tolgo il chip dall'arduino e lo metto su una breadboard con usb-to-serial e basta. Come già detto il primo upload dello sketch (il blink) và a buon fine, i successivi mi da errore. Se provo a fare l'upload da Arduino Uno funziona bene...

A questo punto credo che ci sia qualcosa di sbagliato sulla breadboard. Ma è elementare, ho collegato i TX e RX del IC con quelli della usb-to-serial e poi collego l'alimentazione. Devo collegare qualcosa sul reset? Oppure è qualcosa sulla porta COM.

Ma per programmare un Atmega non puoi usare i pin RX/TX, quelli servono solo per il trasporto dei dati da e per Arduino (porta seriale).
Per programmare un Atmega devi usare un altro schema (vedi apposita discussione).

Credo che il problema sia nell'adattatore USB-to-Serial ( questo: Arduino Serial USB Board - DEV-08165 - SparkFun Electronics ) che non fa l'autoreset. Se provassi a collegare il DTR dell'adattatore al Reset dell'atmega328?

Nella pagina di quel componente ad un certo punto leggo fra i commenti:

To program a arduino mini pro, add a 100nf cap between pin 4 (middle connector long side (connected to pin 2 on the ft232)) to the arduino reset pin. tx -> tx rx -> rx

Forse potrebbe adattarsi anche al tuo caso.

Purtroppo nemmeno va :~

Guarda prova a cambiare approccio: potresti programmarlo usando avrdure-gui :
http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html
qui invece al posto di bruciare il bootloader ci metti lo schetk come hex ,che ottieni mentre lo compili premendo shift, mentre poi setti i fuses come vuoi
Spero di aver aiutato niko

Ho risolto, altro bootloader (Arduino mini pro) + autoreset. Grazie a tutti x l'aiuto!