Problemi con ATmega1284 e programmatore isp

Buona sera a tutti, anzi vista l'ora buona notte,
volevo un chiarimento sulla sigla dell'ATMEGA1284. Entrando nello specifico premetto che ho costruito un programmatore ISP sulla falsa riga di quello illustrato da "Michele Menniti", con due differenze. La prima è che al posto di avere tanti ZIF quanti sono i microcontrollori con differenti piedinature, ha un solo ZIF e i microcontrollori da programmare vengono selezionati in base ad un selettore che fa ruorare diversi rotary-switch. La seconda è che il suo è bello e funzionante mentre il mio fa schifo ed è quasi funzionante. :cold_sweat:
Ho provato a programmare diversi 328 e alcuni Tiny84 con esito positivo, per concludere i test è d'obbligo la prova con un ATmega 1284 e qui nasce il problema, seguo scrupolosamente i vari passaggi della guida GPAT_V4, carico uno scketch di prova (blink, con il pin 5 da testare) e mi appare l'errore:

"avrdude: Expected signature for ATMEGA1284P is 1E 97 05
Double check chip, or use -F to override this check."!!!

Mi sembra di capire che l'IDE si aspetta un microcontrollore che abbia come "firma" 1E 97 05 e non lo trova, dopo varie prove e vari tentativi sempre col medesimo risultato mi è venuto il dubbio che forse l'ATmega 1284 che ho comprato non sia supportato, nello specifico il mio è marchiato PU, mentre nella procedura si parla di un controllore marchiato P.
Vi è qualche differenza tra queste due sigle dal punto di vista della programmazione, oppure il problema è da ricercare da un'altra parte???
Inoltre la seconda parte dell'errore dice di usare il comando "-F" per annullare il controllo, è possibile in alternativa usare questa soluzione?

Grazie a tutti

Meluino

Ciao e scusa la domanda banale, ma hai verificato la piedinatura dei vari chip?
Le posizioni dei pin MISO/MOSI/SCLK cambiano da micro a micro. Verificali nei datasheet di ognuno. Li trovi nel sito Atmel o con una ricerca su Google.
C'è anche un ottimo lavoro di un utente del forum --> http://arduino.cc/forum/index.php/topic,145531.0.html

Ciao Meluino, ti ringrazio per gli apprezzamenti ma non dovresti buttarti così giù, in realtà hai avuto una gran bella idea, alla quale sono anche interessato, quindi se vorrai condividerla mi farebbe piacere. Purtroppo non stai fornendo un'indicazione fondamentale, che è quella della versione IDE che usi, inoltre è importantissima l'osservazione di PaoloP, quindi dovresti controllare se i pin specifici per l'ISP del 1284P sono effettivamente collegati correttamente, mediante i tuoi switch (basta un comune tester). Infine la firma che indichi è corretta ed è quella del modello 1284P-PU che poi dovrebbe essere anche il tuo. L'errore è dovuto al 99% proprio al fatto che la comunicazione ISP non sta avvenendo correttamente, oppure che il tuo micro sia già stato programmato ed ora necessiti di un clock esterno (nel mio Programmatore ISP è previsto, tu l'hai messo? Oppure ancora che la sigla del micro non sia quella ed allora potresti effettivamente avere una firma diversa.
Dacci info.... :slight_smile:

Ciao e scusa la domanda banale, ma hai verificato la piedinatura dei vari chip?

Ciao Paolo, è da un mese che sto lavorando a questo progetto ed il controllo dei pin è stata la prima cosa che ho fatto. Ora il programmatore ce l'ho al lavoro ed inizio il turno questa sera, comunque appena arriverò ricontrollare i pin sarà sicuramente la prima cosa che farò, spero vivamente di arrivare ed accorgermi di aver confuso magari il MISO col MOSI, sarei comunque felicissimo anche se l'errore mi imbarazzerebbe un po'. Comunque in questo nutro una debole speranza. :~

Purtroppo non stai fornendo un'indicazione fondamentale, che è quella della versione IDE che usi

Ciao Michele, la versione dell'IDE è la 1.0.1, anche qui ho fatto una piccola Odissea, nel senso che ho provato diverse versioni, utilizzando il materiale che Leo72 mette a disposizione sul suo sito (così come ho fatto per il Tiny84), ma qui ho incontrato problemi di diversa natura, non riuscivo nemmeno a compilare lo scketch. Per cui ho utilizzato la versione 1.0.1 ed il link che scrivi sulla tua guida, una volta sistemato questo problema (ammesso che io ci riesca) è mia intenzione tornare indietro e verificare i problemi incontrati con le procedure di LEO, così da capire dove sbagliavo.

ora necessiti di un clock esterno (nel mio Programmatore ISP è previsto, tu l'hai messo?

Il circuito elettrico è esattamente il tuo ho predisposto lo zoccolo per il clock esterno che ancora non è montato, in quanto non è ancora in mio possesso. Ho letto che se il microcontrollore è vergine è impostato per lavorare col quarzo interno e quindi le porte XTAL1 e XTAL2 non sono abilitate, per cui ho pensato che la programmazione potesse avvenire comunque, così come è successo per il 328 e per l'84.

in realtà hai avuto una gran bella idea, alla quale sono anche interessato, quindi se vorrai condividerla mi farebbe piacere.

Sicuramente questa sera posterò un paio di immagini del lavoro svolto, anche se quella che definisci una gran bella idea, così come pensavo io all'inizio, è risultato essere invece il punto debole di tutta la struttura. Infatti per un utente un po' sbadato, come posso essere io, la probabilità di mettere un micro con una determinata piedinatura e dimenticarsi di girare il selettore, o impostarlo su una sezione errate è molto alta. Non nascondo infatti che durante i vari test mi è capitato anche questo, infatti non vorrei, a memoria comunque non mi sembra, aver commesso questo errore anche con l'ATmega1284 ed aver guastato dei pin di comunicazione.
Purtroppo ora questo non lo posso verificare perchè ho un solo 1284, in quanto mi serviva per testare l'opera completa, anche perchè non so se sarò mai in gardo di creare un progetto che necessiti un tale controllore, comunque il programmatore ne era predisposto ed era giusto provarlo. :wink:

ciao

Meluino

C'è anche un ottimo lavoro di un utente del forum --> http://arduino.cc/forum/index.php/topic,145531.0.html

Ho dato uno sguardo la link e sono rimasto a bocca aperta per un quarto d'ora. Qualche tempo fa avevo aperto un topic per avere delucidazioni sulle piedinature dei vari avr (su quale file trovarle), perchè volevo appunto creare anch'io una sorta di tabellario. Per fortuna che non mi ero ancora messo al lavoro in questo progetto perchè obbiettivamente quello che avevo in mente non era nemmeno una briciola in confronto a quello che ho visto.

Veramente complimenti

Meluino

Meluino, tu hai per caso un Atmega1284-PU, la cui firma è 1E-97-06? La firma 1E-97-05 è riferita ad un Atmega1284P-PU. "PU" indica il package, cioè DIP, ma attenzione appunto alla "P" attaccata al codice del microcontrollore, che indica il tipo di core.
Potresti controllare sul tuo chip che codice trovi?

Io ho un ATmega 1284 PU.
Penso che tu abbia colto nel segno Leo XD.
A questo punto per provare cosa devo fare, basta solo modificare la firma all'interno dell'avrdude.
Grazie

Meluino.

Dai uno sguardo a questa discussione --> http://arduino.cc/forum/index.php/topic,144625.0.html
Lo sketch citato nella duscussione per programmare la scheda lo trovi qui --> GitHub - nickgammon/arduino_sketches: Publicly-released sketches for the Arduino microprocessor

@PaoloP:
ma lui programma il chip via ISP, non gli serve un bootloader.

meluino:
Io ho un ATmega 1284 PU.
Penso che tu abbia colto nel segno Leo XD.
A questo punto per provare cosa devo fare, basta solo modificare la firma all'interno dell'avrdude.
Grazie

Meluino.

Ma come selezioni il chip? Dal menu Strumenti/Tipo di Arduino? Se sì, allora devi cambiare il file boards.txt dove hai inserito le caratteristiche del chip e mettere "atmega1284" al posto di "atmega1284p" nella riga xxxx.build.mcu della voce che stai usando.

Ricorda che il core "non P" presenta alcune differenze rispetto al core "P" per cui la gestione del risparmio energetica non è identica.

Ho provato ad eseguire la modifica sul file boards.txt, ma durante la compilazione mi appare l'errore:

"MCU 'atmega1284' supported for assembler only"
e poi l'IDE fa una lista di tutte le mcu supportate.

=(

Meluino

ed infatti devi modificare anche il file avrdude.conf per mettere i dati del tuo 1284 (sei stato disattento, anch'io avevo scritto

la firma che indichi è corretta ed è quella del modello 1284P-PU che poi dovrebbe essere anche il tuo

, bastava controllare ed il problema usciva subito). Scaricati la mia guida per il 328noP e fai le stesse operazioni per il tuo 1284noP, vedrai che alla fine ti funzionerà :wink:

A me compila anche per "atmega1284".
Io uso l'ultima toolchain Atmel, non so se dipende da questo.

Potresti postare l'errore completo, per capire se è il compilatore che lo emette oppure l'IDE?
A proposito, che core stai usando per la compilazione?

Michele, avrdude entra in ballo solo durante l'operazione di scrittura del firmware.
Durante la compilazione è una questione riguardante solo il compilatore avr-gcc per cui quell'errore non dipende da avrdude né dal suo file di configurazione ma da qualche strumento della toolchain.

@MicheleMenniti

scusa, hai ragione, però anche quelli della ATMEL hanno marchiato i micro con p, pu, senza pu, pu+p, diciamo che non rendono le cose molto semplici. :wink:

Potresti postare l'errore completo, per capire se è il compilatore che lo emette oppure l'IDE?

unknown MCU 'atmega1284' specified
Known MCU names:
avr2
at90s2313
at90s2323
at90s2333
at90s2343
attiny22
attiny26
at90s4414
at90s4433
at90s4434
at90s8515
at90c8534
at90s8535
avr25
attiny13
attiny13a
attiny2313
attiny24
attiny44
attiny84
attiny25
attiny45
attiny85
attiny261
attiny461
attiny861
attiny43u
attiny48
attiny88
at86rf401
avr3
at43usb320
at43usb355
at76c711
avr31
atmega103
avr35
at90usb82
at90usb162
attiny167
avr4
atmega8
atmega48
atmega48p
atmega88
atmega88p
atmega8515
atmega8535
atmega8hva
at90pwm1
at90pwm2
at90pwm2b
at90pwm3
at90pwm3b
avr5
atmega16
atmega161
atmega162
atmega163
atmega164p
atmega165
atmega165p
atmega168
atmega168p
atmega169
atmega169p
atmega32
atmega323
atmega324p
atmega325
atmega325p
atmega3250
atmega3250p
atmega328p
atmega329
atmega329p
atmega3290
atmega3290p
atmega406
atmega64
atmega640
atmega644
atmega644p
atmega645
atmega6450
atmega649
atmega6490
atmega16hva
at90can32
at90can64
at90pwm216
at90pwm316
atmega32m1
atmega32c1
atmega32u4
atmega32u6
at90usb646
at90usb647
at94k
avr51
atmega128
atmega1280
atmega1281
atmega1284p
at90can128
at90usb1286
at90usb1287
avr6
atmega2560
atmega2561
avrxmega4
atxmega64a3
avrxmega5
atxmega64a1
avrxmega6
atxmega128a3
atxmega256a3
atxmega256a3b
avrxmega7
atxmega128a1
avr1
at90s1200
attiny11
attiny12
attiny15
attiny28
Blink_prova.pde:-1: error: MCU 'atmega1284' supported for assembler only

A proposito, che core stai usando per la compilazione?

:cold_sweat: scusa Leo potresti farmi una domanda di riserva. :cold_sweat:
Sto utilizzando il materiale scaricato all'indirizzo "http:\maniacbug.wordpress.com/2011/11/27/arduino-on-atmega1284p-4/, come descritto nella guida GPAT_V4.

Meluino

Come dici tu Leo, io però ricordo che il problema del 328noP era identico, e l'elenco delle MCU conosciute so che viene tirato fuori dal file che ho detto, però non insisto.

meluino:
scusa, hai ragione, però anche quelli della ATMEL hanno marchiato i micro con p, pu, senza pu, pu+p, diciamo che non rendono le cose molto semplici. :wink:

Basta sapere cosa sono :wink:
Un micro è marchiato con un codice composto da:
ATyyyyyXXXXXZaa-WW

AT sta per Atmel :stuck_out_tongue:
yyyyy è la famiglia: "mega" o "tiny" sono quelle che di solito vengono usate per prodotti Arduinici o compatibili ma esistono anche altre famiglie tipo "90" ecc..
Z è il tipo di microcontrollore, esempio "8" oppure "4" oppure.
XXXXX indica la dimensione in kB della Flash, ed insieme a "Z" e "yyyyy" costituisce il codice del micro.
Ad esempio ATmega328 -> famiglia "mega", tipo di core 8, 32 kB di Flash.
Un ATmega168 è identico ad un ATmega328 (stesso core, "mega8"), cambia solo la Flash: 16 contro 32.
Su un ATtiny24/44/84 abbiamo la famiglia "tiny", il core "4" e la Flash rispettivamente di 2/4/8 kB.
aa indica informazioni accessorie del core:
ad esempio, "V" è un core che può lavorare a basse tensioni (1,8V) ma anche con clock max di 10 MHz. "P" indica il core PicoPower, che ottimizza il consumo energetico mediante la possibilità di disattivare le periferiche interne non utilizzate; "A" indica alcune revisioni del core che permettono di lavorare a basse tensioni come la versione V (1,8V) ma nel contempo di poter operare fino a 20 MHz. Esiste anche "PA", che ovviamente somma i benefici del core P a quelli della revisione A del core stesso.
WW è il package: "PU" sta per DIP, poi c'è "AU" per i TQFP, "MU" per gli MLF ecc..

Potresti postare l'errore completo, per capire se è il compilatore che lo emette oppure l'IDE?

unknown MCU 'atmega1284' specified
Known MCU names:

Ma ti viene fuori premendo l'icona "upload" o quella "compile"?
Se ti viene fuori nel primo caso, allora ha ragione Michele ed è avrdude a "bofonchiare". Sennò è il compilatore.

Basta sapere cosa sono

Sicuramente, la mia voleva essere solo una battuta per "giustificare" la disattenzione. La cosa giusta prima di intraprendere qualche progetto è sicuramente avere delle nozioni base su quello che si sta facendo ed è per questo probabilmente che si commettono tanti errori, almeno nel mio caso.

Ma ti viene fuori premendo l'icona "upload" o quella "compile"?

L'errore appare premendo l'icona compile.

Meluino.

Ok.
Allora, facciamo così:
abilita la compilazione "verbose" e poi posta tutto quello che viene fuori nel terminale dell'IDE.

Ciao Leo, innanzitutto ti chiedo scusa se non ho postato prima ma purtroppo impegni mi hanno impedito di poterlo fare, comunque l'errore con i "verbose" è il seguente:

/Users/XXXXXXXX/Downloads/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega1284 -DF_CPU=8000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=101 -I/Users/XXXXXXXX/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/standard -I/Users/XXXXXXXX/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard /var/folders/-H/-HYfat8eE04X2NCxEgfScE+++TI/-Tmp-/build8727062362299454613.tmp/Blink.cpp -o /var/folders/-H/-HYfat8eE04X2NCxEgfScE+++TI/-Tmp-/build8727062362299454613.tmp/Blink.cpp.o 
unknown MCU 'atmega1284' specified
Known MCU names:
   avr2
   at90s2313
   at90s2323
   at90s2333
   at90s2343
   attiny22
   attiny26
   at90s4414
   at90s4433
   at90s4434
   at90s8515
   at90c8534
   at90s8535
   avr25
   attiny13
   attiny13a
   attiny2313
   attiny24
   attiny44
   attiny84
   attiny25
   attiny45
   attiny85
   attiny261
   attiny461
   attiny861
   attiny43u
   attiny48
   attiny88
   at86rf401
   avr3
   at43usb320
   at43usb355
   at76c711
   avr31
   atmega103
   avr35
   at90usb82
   at90usb162
   attiny167
   avr4
   atmega8
   atmega48
   atmega48p
   atmega88
   atmega88p
   atmega8515
   atmega8535
   atmega8hva
   at90pwm1
   at90pwm2
   at90pwm2b
   at90pwm3
   at90pwm3b
   avr5
   atmega16
   atmega161
   atmega162
   atmega163
   atmega164p
   atmega165
   atmega165p
   atmega168
   atmega168p
   atmega169
   atmega169p
   atmega32
   atmega323
   atmega324p
   atmega325
   atmega325p
   atmega3250
   atmega3250p
   atmega328p
   atmega329
   atmega329p
   atmega3290
   atmega3290p
   atmega406
   atmega64
   atmega640
   atmega644
   atmega644p
   atmega645
   atmega6450
   atmega649
   atmega6490
   atmega16hva
   at90can32
   at90can64
   at90pwm216
   at90pwm316
   atmega32m1
   atmega32c1
   atmega32u4
   atmega32u6
   at90usb646
   at90usb647
   at94k
   avr51
   atmega128
   atmega1280
   atmega1281
   atmega1284p
   at90can128
   at90usb1286
   at90usb1287
   avr6
   atmega2560
   atmega2561
   avrxmega4
   atxmega64a3
   avrxmega5
   atxmega64a1
   avrxmega6
   atxmega128a3
   atxmega256a3
   atxmega256a3b
   avrxmega7
   atxmega128a1
   avr1
   at90s1200
   attiny11
   attiny12
   attiny15
   attiny28
Blink:-1: error: MCU 'atmega1284' supported for assembler only
In file included from /Users/XXXXXXXX/Downloads/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/include/avr/pgmspace.h:82,
                 from /Users/XXXXXXXX/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/standard/Arduino.h:8,
                 from Blink.cpp:10:
/Users/XXXXXXXX/Downloads/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/include/avr/io.h:330:6: warning: #warning "device type not defined"

Ciao

Meluino

Ad occhio è proprio un errore del compilatore.
Potresti provare ad aggiornare la toolchain con quella di Atmel.

Per Windows i nostri astrobeed e Menniti hanno scritto questa guida:
http://blog.elettronicain.it/2012/04/05/arduino-full-memory/

Fai un tentativo.