Non riesco a programmare ATmega644P

Ho difficoltà con un 644P...

In breve, ho caricato il bootloader del Sanguino seguendo questo Tutorial: Tutorial: Burning the Sanguino Bootloader to the ATmega 644P Using an Arduino as ISP. | The Makers Workbench, utilizzando un Arduino come programatore ISP sui pin MISO, MOSI, ecc.

Caricato con successo alla prima botta, testo il chip infilandoci dentro il solito blink all'uscita 13. Lancio e va tutto bene, cerco "a mano" il LED 13 e lo trovo sul PD5 del 644, che in effetti è il D13 di Arduino. Insomma, ho il mio 644 con il suo led che lampeggia ad un Hertz...

Vado a nanna

Nuova giornata e comincio a caricare uno schetch per un display grafico KS0108 based (lo scopo finale è quello, visto che con il 328 non rimane più nemmeno un'uscita per accendere 'na lampadina!). Risultato: solito errore avrdude 015 ecc.
Provo 200 sketch diversi, ma niente, nulla. Nemmeno il blink mi carica più...

Ho a disposizione un TX-RX con 2100, un'altro con 2303 e, ovviamente, l' 8u2 della Arduino UNO (previa rimozione del chip 328), provo in tutte le maniere ma nulla. Sempre il solito errore.

Penso ad problema di reset (autoreset) ma al momento non ho a disposizione nessun condensatore (sono a casa e il laboratorio è distante) per provare qualcosa. Ho solo delle resitenze.

So che Leo e Michele hanno avuto i loro mal di testa con questo chip, ma non sono aggiornato su soluzioni "definitive", come quella del filtro RC (10KOhm + 100pF) per il 1284.

Qualche idea da provare prima di lunedì, quando torno in laboratorio?

Intanto ora sono le 3 di notte, ed il mio 644 continua a guardarmi beffardo, con il suo blink ad un Hz..! :drooling_face:

Ciao,se hai caricato anche lo sketch del blink in ISP credo che il bootloader sia stato cancellato e quindi non riesci a riprogrammare via seriale. Quindi puoi provare a caricare prima il bootloader in ISP e poi in seriale gli carichi il blink...

In effetti non sei stato chiaro sulla modalità che hai usato per il caricamento del blink, anche se il fatto che elenchi una serie di programmatori seriali fa pensare che tu correttamente abbia:
1 - caricato il bootloader mediante ISP
2 - caricato il blink via seriale.
in caso contrario è ovvio che il bootloader non sta funzionando più.
Detto questo per evitare di perderci in un'altra discussione di 200 post sarebbe preferibile che tu postassi i collegamenti (p.es. ti è chiaro che Arduino si collega al 644 con connessioni opposte a quelle degli altri due che hai?) che hai usato e spiegassi esattamente la procedura, in modo sintetico, fornendo il link del bootloader che stai usando, la versione di IDE, ecc.
Giusto per non lasciarti deluso, la prova al volo che puoi fare (ma se non va poi devi fornire tutto quanto ti ho chiesto) è quella di mettere una R da almeno 120kohm in serie all'RX del micro (pin 14). Per quanto mi riguarda è l'unico componente esterno che sono disposto ad usare ragionevolmente; contrariamente a queanto sostenete, forse con qualcosa dentro il micro il filtro RC si realizza comunque ma io col DSO vedo una bella onda quadra mentre col C aggiuntivo una schifezza a denti di pescecane (nell'altro Topic ho messo le immagini tempo fa). Stamattina sono a casa causa malattia, qujindi possiamo fare tutte le prove che vuoi, se ti svegli.....

Ieri notte mi sono letto il post intero di 23 pagine, anche se la parte finale, e semi-conclusiva, lascia ancora aperti molti interrogativi.

Cmq...

  1. Bootloader del Sanguino: Google Code Archive - Long-term storage for Google Code Project Hosting. (cmq si poteva vedere dal link che ho postato)

La versione di Arduino-IDE è la 0023, con la cartella Sanguino-bootloader valida per la 0023, caricata nella sotto-cartella Hardware.

  1. Il Bootloader è stato caricato su un 644 vergine, con tecnica ISP, (ovviamente!) mentre lo sketch Blink è stato caricato con seriale-booloader, scegliendo come Board, la voce: Sanguino w Atmega644P. Il tutto senza alcun problema ed al primo tentativo.

Conosco il fatto che una successiva programmazione ISP sovrascrive il Bootloader, ma non è questo il caso.

La proggrammazione seriale mi sarebbe comoda, ma non ne faccio un dramma: posso sempre programmare il 644P con ISP.

La cosa che mi perplime è il fatto che alla sera funzionava tutto, e alla mattina non fuinzionava più con niente! Mah...

Di quella lista avrai scaricato la Sanguino-0023r4.zip immagino; la board che hai usato è corretta.
Invece le connessioni?

  • per 2100-2303 devi incrociarle: tx->rx e rx->tx, mentre con 8u2 devi lasciarle dritte: tx->tx e rx->rx
  • in tutti e tre i casi devi collegare il RESET del convertitore seriale al RESET del 644, provando sia direttamente che tramite un C da 100nF
  • non trascurare di mettere una R da 10kohm tra il RESET del 644 e 5V, oltre a quarzo e C22pF più vicino possibile ai pin 12 e 13

Fatto tutto ciò, sempre rispettando le indicazioni di cui sopra puoi provare ad interompere la linea RX del micro con una R da 120kohm a 330khm

Fammi sapere come va.

Sono quà con il circuito sottomano...

Le linee RX e TX del 644 sono il piedino 14 ed il piedino 15 (alias PD0 e PD1). Come scheda sto usando questa (molto comoda):

![](http://i.ebayimg.com/t/Mini-Development-Board-ATMEL-ATMega16-32-8535-164-324-644-1284-AVRISP-AVR-DIP40-/00/s/ODY5WDE2MDA=/$(KGrHqNHJBsFC2J4s30YBQucmqRC(Q~~60_57.JPG)

Quindi tutte le connessioni verso il quarzo (16 MHz), alimentazione, Reset (piedino 9) sono corrette.

Quanto ai Prog seriali stand-alone, in effetti mi pare che avessi programmato correttamente il Blink con il collegamento NON incrociato, ovvero TX-->TX ed RX-->RX, ma ieri sera ho provato anche ad invertire, con il risultato di una leggera variazione dei lampeggi dei led di trasferimento TX/RX, ma senza programmae un tubo.

lo schedino (molto bello) ti garantisce che tu non abbia sbagliato le connessioni ai pin, NON che tu non abbia sbagliato in assoluto.
Le connessioni seriali devi fare come ti ho scritto io, l'opposto di quelle è solo perdita di tempo, ti ho parlato della R pull-up sul RESET e del C da 100nF in serie, se rileggi cosa ti ho scritto trovi prove da fare, almeno falle prima di arrenderti.
Immagino (ma un'immaginazione l'ho fatta pure prima, solo che tu non dai conferme, capisco che tu sia incazzato, a chi lo dici ]:D, ma mica te la puoi prendere con me :sweat_smile:) che tu abbia riprovato a caricare il bootloader e poi riprovare la comunicazione seriale.

Michele non è che mi sono arreso, il problema principale è che sono lontano dal mio Laboratorio, e quindi lontano dalla mia Potenza, dal Luogo degli Dei, e credo che tu possa capirmi quando ti dico che sono un pò atapirato.

Una volta in Laboratorio ritorno ad essere il Deus ex machina dei circuiti e in qualche modo si risolve.

Adesso procedo con metodo (e con il POCO materiale che ho a disposizione) provando la resistenza in serie da 120.000, o anche più,
in serie alla RX. Poi faccio qualche partitore, sempre sulla RX, ma NON ho condensatori. Anzi, si, ma sono quelli da 22 pF per il quarzo...

Non è che posso inventarmi molto in queste condizioni eh! :frowning:

Adesso riparto da ZERO e ricarico il Bootloader...

Ti capisco eccome! =( Oggi sono ammalato e domani devo andare al lavoro pena la morte! pomeriggio avevo programmato 5-6 ore di Lab, con una serie di prove da fare, tutte "appese" e importanti; invece devo starmene buono buono per cercare di migliorare lo stato di salute fino a domattina, se esco stasera febbre assicurata, qui ci sono 5° e sta grandinando e noi meno di 10-12° non li abbiamo quasi mai :D.
Mi sto consolando scrivendo lavori che stavo trascurando da mesi, oggi ho scritto non meno di 50-60 pagine, di cui l'80% in parte tradotte dall'inglese, che non conosco ma che sto pian piano imparando, almeno a tradurre, e poi implementate con parti mie, ovviamente, ora ho le mani artrosiche, infatti mi fermo un'oretta, sono seduto qui da stamattina alle 7, eccetto mezzora di pausa pranzo :sweat_smile:
Detto questo ribadisco che con i C a mio parere non devi fare nulla, solo eventualmente levare quello che è in serie al RESET del 644, se c'è su quella scheda, oppure aggiungerlo, se non c'è; ho appurato che a volte è richiesta la presenza a volte no, e siccome sembra che ognuno di noi abbia una situazione personalizzata, bisogna provarle tutte.
Però al tuo posto non mi abbatterei, in fondo a casa ora hai tutto ciò che ti serve, la nostra problematica è molto software. Altra prova che puoi fare è la mia:
IDE 1.0.1 e bootloader/core il cui link trovi nell'altra discussione, ad un certo punto me l'ha fornito Leo, in pratica è la penultima versione del maniacbug, con quello ho finalmente programmato il 1284, seppur con la R da 120-220k (in base alla versione di bootloader, visto che ci stanno la standard e l'optiboot).
Beh, con questo ne hai almeno per un'oretta, il tempo del mio riposo :wink: a dopo.

Grazie Michele. Intanto Bootloader ricaricato (via ISP) con successo (non avevo alcun dubbio!).

Ora riprovo il Blink via seriale...

Sono a casa della mia ragazza, devo reinstallre tutti i driver dei dispositivi...

Adesso scarico il Driver del CP2102...

Ripartendo da ZERO (Bootloader via ISP + Blink con seriale) la programmazione va a buon fine, MA... (ero già contento... :() una seconda programmazione non funziona già più.

In pratica ho caricato il Blink con successo, ma al secondo tentativo, dove ho modificato il delay per farlo lampeggiare un pò più veloce, ho avuto il solito errore:

avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

Mistero... :astonished: =(

A mio parere questa è la prova assoluta che ha ragione Astro, il bootloader, derivato sempre da UNO/2009 quindi dal mega328P non tiene conto delle diverse tempistiche di questi bestioni, speriamo che lui trovi il tempo di completare il lavoro che aveva iniziato, ha promesso che ce lo fornisce...

Ma hai provato con/senza C in serie al RESET e con 120-220k in serie all'RX?

Non ho un condensatore adatto purtroppo. Ora provo con qualche resistenza.

Ma perchè la prima programmazione seriale (quella subito dopo il Bootloader via ISP) funziona?

BaBBuino:
Non ho un condensatore adatto purtroppo. Ora provo con qualche resistenza.

Ma perchè la prima programmazione seriale (quella subito dopo il Bootloader via ISP) funziona?

a saperlo.... io temo che la presenza di uno sketch nel micro crei conflitto alla gestione delle linee rx/tx dopo il reset, però è una cosa che succede solo a te, a conferma che ognuno ha la sua situazione personalizzata :disappointed_relieved:

il CP 2102 NON ha il condensatore sul reset, però al primo tentativo ha funzionato.

Ho l'altro programmatore seriale, al quale ho saldato sul piedino di DTS un piccolo condensatore da 100nF, ma dubito che sia un problema di quel genere.

Secondo me è un problema, come dici tu, di timing di bootloader, ma mi pare anche strano che gli ideatori di Sanguino non se ne siano mai accorti...

Michele, già che ci sei...

Per programmare in ISP è necessario variare il file board.txt con un valore adatto per i Fuse.
I Fuse dell'ATMega 328 sono identici al 644 o cambia qualcosa? Nel senso.. posso usare lo stesso file modificato per il 328 stand alone (ovviamente modificando il nome di intestazione del processore) anche per il 644?

imposta:
maximum_size=65536
low_fuses=0xFF
high_fuses=0xDF
extended_fuses=0xFF
il resto ignoralo
in questo modo hai tutta la flash a disposizione

C'hai raGGione, anche la memoria è di più...

Cmq niente programmazione. La prima da vergine va a buon fine, la seconda nisba (senza cambiare una virgola).

Però una nota: Ieri sera non mi programmava nemmeno alla prima, questo perchè avevo un collegamento con dei ponti ulteriori tra TX/RX dei programmatori e il 644, quindi i fili corti sono un elemento d'obbligo