programmare il 644 ... ma come????

Ciao ragazzi.. scusate se mi intrometto... ma io vi so seguito passo passo e ho fatto gli stessi collegamenti di Paolo S avendo lo stesso adattatore seriale (a dire il vero è del mio amico)
Ho fatto prima il caricamento del bootloader e del priogrammino BLINK via ISP con un arduino uno e funziona a meraviglia... Ho collegato poi l' adattatore seriale come da voi suggerito a Paolo S e mi da il solito messaggio not in sync.
Quando inizia il trasferimento dati, vedo che il led nel pin 13 lampeggia 2-3 volte e poi basta... continua con il BLINK caricato via ISP.
Ho un C da 100n in serie con il reset collegato al DTR. TX -> TX e RX ->RX..

Mi sono letto tutte ste pagine non so quante volte e sinceramente mi sembra tutto ok..
Grazie e scusate se magari vi annoierò sulla cosa, visto quanto è stata trattata.

Non annoi per niente, ci servono altri "tester" :slight_smile:
Da come hai descritto mi sembra che tu NON abbia caricato il bootloader sul micro, visto che hai ancora su il blink :wink:

Ho fatto prima il caricamento del bootloader e del priogrammino BLINK via ISP con un arduino uno e funziona a meraviglia... Ho collegato poi l' adattatore seriale come da voi suggerito a Paolo S e mi da il solito messaggio not in sync.

Se hai caricato prima il bootloader in ISP e subito dopo anche il BLINK in ISP perdi il bootloader e non puoi più caricare in seriale.
Devi prima mettere il BL in ISP e poi ,per caricare uno sketch,colleghi il chip in seriale ed attraverso un convertitore gli mandi lo sketch in seriale............Se hai seguito quanto detto finora e stai utilizzando anche tu il BL di Leo,puoi collegare sul pin 2 del micro un led con la sua R e,quando il micro riceve il reset dal convertitore,il led farà 3 lampeggi,poi inizieranno a lampeggiare i led TX/RX del convertitore e,appena finito di caricare,il led sul pin 2 farà altri 3 lampeggi ad indicare che il chip è pronto ad eseguire il codice appena caricato.......Quindi se lo sketch era il blink,il led sul D13 comincia a lampeggiare....

Invece avevo intenzione di chiedere a te se fosse possibile fare un video, della fase UPLOAD-RESET-START in pratica dal comando fino a quando inizia il caricamento, collegando contemporaneamente tx ad un canale e rx all'altro

Ciao Michele,io ho un DSO della GW instek comperato proprio dal link che hai dato a Leo in quanto conosco molto bene il proprietario(è di Torino) con SD card ma non riesco a capire se posso memorizzare in qualche maniera ciò che visualizza a display......Devo cercare il libretto di istruzioni....Ho scaricato il programmino che ti permette di vedere sul pc lo schermo del DSO ma se provo a registrare pare che tende ad inchiodare tutto quello che ho contemporaneamente in funzione sul pc.....dovrei provare ad aprire l'applicazione del DSO su un pc e caricare il micro da un'altro pc ....mmmmm ...solo che è un po un casino....
Se riesci/sai aiutarmi in questo ti posso fornire il video,altrimenti devo vedere comunque di risolvere la cosa..

Inizialmente su AvrFreaks dicevano che il bug della UART0 riguardasse solo le connessioni verso chip con clock di 20 MHz. Io però ho trovato che anche a 16 MHz c'era il problema. Abbassando invece a 12 MHz ero riuscito a caricare lo sketch.

Tonid, il mio DSO è proprio quello del link e dovrebbe avere la funzione di memorizzazione di un periodo, ma non l'ho provata nemmeno io; finora mi sono limitato a fare dei print screen sulla pen drive USB; dovrei studiarmi il manuale ma chi lo trova il tempo? Non ti preoccupare, non ne vale la pena, come detto dispongo del 644, posso fare alcune prove di caricamento e vedere il comportamento e poi confrontarlo "a memoria" col 1284P; inoltre in settimana entrante dovrebbero ritornarmi i due MCP2200 e poi riprenderò le prove ultime, anche con il CP2102 che a memoria mi pare fosse stato l'unico a permettermi di caricare sul 644 senza alcun fronzolo....

Leo, ciò che hai detto mi era chiaro pure prima, il ragionamento che faccio è: ammesso che funzioni che ne faccio di questa informazione? Non posso certo mettere in piedi una bestia del genere con un miserabile quarzo da 12MHz!

L'ideale sarebbe stato un analizzatore di stati logici,così si potevano vedere i 3 segnali ed il loro comportamento in funzione del tempo :0

Sì, chiaro. Era per capire solo se il chip potesse avere dei problemi di tolleranze interne.

@Michele: Effettivamente poi, pensandoci bene, mi era venuto proprio quel dubbio. Nel pomeriggio scarico nuovamente il bootloader. Ma ho un dubbio... devo impostare nell' ide il 644 16Mhz con o senza bootloader per scaricare appunto il bootloader. Io inizialmente avevo impostato "senza bootloader".

@Tonid: Si ho visto in questo topic il tip del led nel pin 2, ma per farlo devo modificare un file, che ora non ricordo il nome, e poi Leo dice di ricompilarlo.. Con ricompilare, cosa si intende ? Nel senso.. basta scaricare nuovamente il bootloader ? (nel farlo l' ide lo ricompila..) o c'è un compilatore particolare per questi micro ?

superzaffo:
@Michele: Effettivamente poi, pensandoci bene, mi era venuto proprio quel dubbio. Nel pomeriggio scarico nuovamente il bootloader. Ma ho un dubbio... devo impostare nell' ide il 644 16Mhz con o senza bootloader per scaricare appunto il bootloader. Io inizialmente avevo impostato "senza bootloader".

Devi scegliere "con" bootloader altrimenti l'IDE, oltre a non scriverlo, non programma i fuse per preservare lo spazio nella memoria.

@Tonid: Si ho visto in questo topic il tip del led nel pin 2, ma per farlo devo modificare un file, che ora non ricordo il nome, e poi Leo dice di ricompilarlo.. Con ricompilare, cosa si intende ? Nel senso.. basta scaricare nuovamente il bootloader ? (nel farlo l' ide lo ricompila..) o c'è un compilatore particolare per questi micro ?

Non importa ricompilarlo. Ho visto che nel makefile originale è già presente la voce per attivare l'output sul pin 2 per cui anche usando gli hex originali hai quella funzionalità

Scusa Leo, tanto per completare le mie conoscenze su questi micro, quindi c'è un compilatore ad hoc. O ho capito male ?

superzaffo:
Scusa Leo, tanto per completare le mie conoscenze su questi micro, quindi c'è un compilatore ad hoc. O ho capito male ?

No, il compilatore è sempre avr-gcc. Fino alla versione 002x dell'IDE serviva un core specifico per poterli usare con l'IDE di Arduino, dalla versione 1.0 in poi il supporto è stato lentamente integrato in Arduino stesso. Dalla versione 1.0.2 basta aggiungere le voci nel file boards.txt per usarli senza ulteriori modifiche.
L'unica cosa che non c'è nell'IDE è un bootloader specifico, che invece ha preparato un altro utente del forum, maniacbug. E che io ho integrato nel package che puoi scaricarti dal mio sito dove trovi insieme al file boards.txt

leo72:
No, il compilatore è sempre avr-gcc. Fino alla versione 002x dell'IDE serviva un core specifico per poterli usare con l'IDE di Arduino, dalla versione 1.0 in poi il supporto è stato lentamente integrato in Arduino stesso. Dalla versione 1.0.2 basta aggiungere le voci nel file boards.txt per usarli senza ulteriori modifiche.

Questa frase ricordo che l'hai già detta e lì per lì mi era sfuggita, ma ora è meglio approfondire: se è dalla 1.0.2 che non servono modifiche, io nella 1.0.1 avrei dovuto modificare qualcosa? non è che sto impazzendo per non aver fatto qualcosa sulla 1.0.1? :fearful: anche se c'è sempre il 644 che mi mette fuori strada.

Intervento veloce dopo che Michele mi ha spiegato in privato i problemi a cui state andando incontro, lasciate perdere gli "esperimenti" con resistenze e condensatori che non servono a nulla, il problema è nel bootloader che state utilizzando che non è idoneo per il 644/1284.
Adesso non ho tempo per spiegarvi dove sta il problema e la relativa soluzione, sto finendo una libreria per Arduino che renderò di pubblico dominio e devo preparare un rendering 3D di anteprima di una nuova scheda (Linux Embedded) che interesserà anche il mondo Arduino, su questa poi aprirò un topic dedicato.
Non appena ho finito, e non credo se ne parli prima di domani, mi rifaccio sentire in questo topic con tutte le spiegazioni del caso, not get worry, stay tuned :grin:

e cchi sse move de qua! :smiley: Grazie :*

cavoli.. che novità !
Staremo incollati al pc :grin:

Però, aspettando astro, io ho ancora dei problemi (sicuramente banali) con il caricamento dello sketch via seriale.

  1. Ho caricato il bootloader, con la scelta "644 w bootloader".
  2. Collegato al pin 2 con resistenza il led.
  3. Collegato l' adattatore in questo modo TX -> TX, RX -> RX, DTR con un C da 100nF in serie al pin 9

quando cerco di caricare lo sketch blink il led lampeggia un 2-3 volte e poi l' Ide mi da not in sync (provato anche invertire rx e tx, setssa cosa)

Ho provato anche questa strada citata da Michele

Quindi, io partirei dal caricare lo sketch ArduinoISP sull'Arduino UNO. Poi chiudi l'IDE.
Ora il mio core 644_1284: scaricalo (prendi la versione per IDE 1.0.2 sia per l'IDE 1.0.2 che per l'IDE 1.0.3) ed installalo.
Avvia l'IDE, seleziona "Atmega644 @ 16 MHz w/bootloader" e poi scrivi il bootloader sul microcontrollore (così imposti anche i fuse corretti per lavorare a 16 MHz e riservare l'area al bootloader) con la tecnica ISP usando l'ArduinoISP come programmatore.
Adesso prenditi l'Arduino (lasciamo per ora da parte il tuo convertitore USB/seriale), staccagli il chip e fai questi collegamenti:
Arduino ---> 644P
Pin RST ---> pin 9
Pin RX ---> pin 15
Pin TX ---> pin 14
Pin 5V ---> pin 10 e 30
Pin GND ---> pin 11 e 31

Collega l'Arduino, apri l'IDE, poi scegli la voce "Atmega 644 @ 16 MHz w/bootloader", carica lo sketch Blink e spedisci con l'icona di upload. Adesso prendi un LED + R e collegali al pin 19 del 644: se il bootloader ha svolto il suo compito, lo sketch Blink dev'essere sul micro ed il LED deve lampeggiare.

Ma l' errore che mi compare, dopo che il led nel pin 2 lampeggia e anche i led rx e tx dell' aruino lampeggiano, protocol error, expect=014, resp=0x41.. ecc..

Non capisco dove ancora sto sbagliando.. anche perchè non mi sembra molto complessa la cosa.. (ahh io ho un 644P)

@michele:
per la 1.0.1 servono dei file del core modificati per integrare il supporto al 1284 (di serie c'è solo quello per il 644). Tale supporto è stato aggiunto a partire dalla versione 1.0.2. Per tutte le versioni serve poi uno specifico file pins_arduino.h che descrive i pin e le funzionalità ad essi agganciati.

@superzaffo:
ho timore di aver fatto casino quando ho scritto quelle istruzioni. Non mi ricordavo che si doveva ragionare tenendo a mente l'Atmega8U2: sulle schede Arduino il pin RX è collegato al pin RX0 dell'Atmega328 ma è collegato al pin TX dell'Atmega8U2 per cui non va invertito. Stessa cosa per il pin TX. Collega quindi il pin RX con il piedino 14 del 644/1284 ed il pin TX con il piedino 15.

@astrobeed:
che problema sarebbe, che hai riscontrato nel bootloader?

Grazie Leo, infatti ho fatto la prova di invertire ed infatti il problema di protocol error era con i pin invertiti.
Adesso grazie a queste tue istruzioni

  1. usare un filtro RC sulla linea RX del microcontrollore composto da una R da 10K in serie fra il pin RX dell'Arduino ed il pin RX0 del 644P/1284P, ed un condensatore ceramico da 100 pF (100 picoFarad) in parallelo (fra RX0 e GND).

Sono riuscito a scaricare lo sketch via arduino seriale e funziona. :wink:
Adesso però proverò con il convertitore uguale a Paolo S... vediamo.. Lui mi sembra che ha detto che non ha messo niente, ne C sul reset e ne pull up ...
Vediamo...

Ok, fatto anche la prova con l'adattatore usb seriale come quello di Paolo S
Alla fine tutto ok...
Configurazione funzionante a me..
Tx->TX senza pull up
Rx->Rx senza pull up
DTR->reset con C da 100nF in serie e una R da 10K in Pull up.

Nota: Se provo a memorizzare in ISP il bootloader con la resistenza da 10k di Pull-up nel reset, la procedura non funziona.