Go Down

Topic: Core Atmega 644P 1284P (Read 10919 times) previous topic - next topic

niki77



senza un core specifico che indichi bene quali pin usare e come usarli e per cosa farlo non si va da nessuna parte.  ;)

Credo che buona parte del lavoro sia qui --> https://github.com/maniacbug/mighty-1284p/blob/master/variants/standard/pins_arduino.h
oltre che nel core.



Ohh, questo si che è un dato di fatto.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72

Nik, l'avevo già detto nei primi post di questo thread.

Sei sicuro di ciò? Io non vedo nessuna particolare opzione nel core di Arduino 1.0.1, solo in un paio di file che definiscono le funzioni dei pin (wiring_analog, wiring_digital ed un altro che non ricordo). Ma non c'è traccia nelle sezioni relative alla gestione della seriale, degli interrupt e delle cose "importanti". Così come non ci sono board nel file boards.txt.
Non è che come me hai file boards.txt modificati o core aggiunti in un secondo tempo?

Un core non è solo il nome di una scheda che compare nell'elenco dei modelli selezionabili ma ci sono tante info che servono appunto a dire al compilatore come usare i pin di un micro nonché le periferiche interne al chip stesso.
E non sempre un core funziona al primo colpo. Ti ricordi il mio core per il 1284 per l'IDE 0022? L'avevo elaborato a partire da un core nato a sua volta dal Sanguino ma correggendolo in alcune cose, tra cui il timer 3, disponibile sul 1284 ma che il core non specificava perché il Sanguino è stato scritto per i 644 e questi hanno solo 3 timer e non hanno il 4° presente invece sul 1284. Avevo aggiunto poi l'indirizzamento dei pin analogici che, curiosamente, non c'era nel core, ed il reference interno a 2,56V per l'ADC.

niki77

#62
Oct 10, 2012, 05:05 pm Last Edit: Oct 10, 2012, 05:07 pm by niki77 Reason: 1
Senti leo , dato che ci siamo intanto che io continuo a bestemmiare per cercare di capire come mai il simulatore ha funzionato lo stesso potresti farmi cortesemente una prova 'hardware' ?

Dovresti provare a creare una cartella 1284p dentro le variants di arduino

arduino-1.0.1/hardware/arduino/variants/1284p

e copiarci il file pins_arduino.h che trovi dentro

arduino-1.0.1/hardware/maniacbug-mighty-1284p/variants/standard

praticamente proviamo a  creare una nuova variants per il core arduino originale e vediamo se funziona.

Ovviamente dopo dentro boards.txt devi mettere la variants creata , ergo 1284p


Io ho provato a compilare ed adesso compila pure ad 8mhz etc etc etc , ma il risultato del simulatore non mi convince più.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72


Senti leo , dato che ci siamo intanto che io continuo a bestemmiare per cercare di capire come mai il simulatore ha funzionato lo stesso potresti farmi cortesemente una prova 'hardware' ?

Dovresti provare a creare una cartella 1284p dentro le variants di arduino

arduino-1.0.1/hardware/arduino/variants/1284p

e copiarci il file pins_arduino.h che trovi dentro

arduino-1.0.1/hardware/maniacbug-mighty-1284p/variants/standard

praticamente proviamo a  creare una nuova variants per il core arduino originale e vediamo se funziona.

Ovviamente dopo dentro boards.txt devi mettere la variants creata , ergo 1284p


Io ho provato a compilare ed adesso compila pure ad 8mhz etc etc etc , ma il risultato del simulatore non mi convince più.



Questo funziona  ;)
Ho usato questa board:
Code: [Select]
1284_8.name=Atmega1284p 16MHz
1284_8.upload.protocol=stk500v1
1284_8.upload.maximum_size=130048
1284_8.upload.speed=19200
1284_8.bootloader.low_fuses=0xff
1284_8.bootloader.high_fuses=0xdc
1284_8.bootloader.extended_fuses=0xfd
1284_8.bootloader.path=optiboot
1284_8.bootloader.file=optiboot_atmega328.hex
1284_8.bootloader.unlock_bits=0x3F
1284_8.bootloader.lock_bits=0x0F
1284_8.build.mcu=atmega1284p
1284_8.build.f_cpu=16000000L
1284_8.build.core=arduino
1284_8.build.variant=1284p


Ora faccio un altro paio di prove.

leo72

Ho provato anche col leOS, che manipola i timer direttamente, e pare funzionare.
Ed anche un segnale PWM.

niki77

Qualcosa mi fà pensare però leo che le seriali debbano funzionare lo stesso, anche senza la variante nuova che abbiamo creato.

Non c'è traccia di alcun che riferibile alle stesse nel file pins_arduino.h

Dai non voglio pensare che Proteus è così del tutto inattendibile !!!

Per ora ho scoperto perchè il led nel simulatore funzionava, perchè io giustamente lo avevo collegato a PB5 che è la stessa porta che viene utilizzata nelle board standard, mentre nel pins di maniacbug  il digital 13 lo fà puntare a PD5...
Infatti da quando ho ricompilato con la variante diversa vedevo lampeggiare da un altra parte
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72

Andrebbero provati, gli interrupt e le seriali, per capire se basta 'sto cavolo di file.
Inoltre oggi scrivo al mio amico Bob, quello della Bobduino, e gli spiego la "scoperta" per capire se il core gestisce anche qualcosa più a basso livello che è sfuggito.

Michele Menniti


...omissis...; i test di Niki sono certamente attendibili (togliti pure il casco :smiley-mr-green:), però giustamente potremmo essere ancora nel campo delle similitudini tra il 1284P ed il 328P. Quindi una prova importante consiste appunto nell'usare quei "segnali" che il 328P NON ha: p.es. i timer aggiuntivi, i pwm aggiuntivi, i pin ADC e DIGITALI aggiuntivi, le seriali hw aggiuntive. Ecco forse il core "esterno" si rende necessario per tutte queste funzioni. ....omissis...


MI pare di capire allora che NON avevo scritto una minchiata, ma semplicemente che NON ero stato compreso  :P giovani frettolosi :D
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Lo avevo detto anch'io all'inizio. Il core comunque offre un bootloader, che l'IDE di Arduino non offre, e questo è un dato di fatto.

Tornando alla questione, ho chiesto a Bob ma da quel che ho capito non credo che neanche lui sapesse di questa cosa. Il core per la sua Bobduino credo sia basato proprio sul core Maniacbug e la board per il file boards.txt gli è stato preparato.

Stasera se riesco a fare altri test provo con gli interrupt.
Se la cosa funziona, allora il cerchio si chiude. Vi ricordate che all'epoca in cui venne fuori la questione di questa nuova gestione dei micro con il file dei pin fu detto che in questo modo sarebbe stato più facile integrare il supporto a nuovi chip? Se così fosse la stessa cosa si potrebbe fare ad esempio con i Tiny. Però a questo punto mi sorge un dubbio. Penso che un core sia un insieme di librerie e funzioni ottimizzate per un certo chip. Andrebbe visto se il core Maniacbug ha gli stessi file del core Arduino oppure essi sono stati modificati.


Michele Menniti

OK, vediamo che ne esce, io spero di andare venerdì in lab, se può servire una mano fatemi sapere.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Superficialmente pare che il core Arduino supporti abbastanza bene i 644/1284 ma sotto sotto non è così.
Basta ad esempio fare un diff fra i file wiring_analog.c del core di Arduino e di quello del core di Maniacbug per accorgersi che le differenze ci sono eccome.
Anche la compilazione mi fa capire che le differenze ci sono. Ad esempio, lo sketch BlinkWithoutDelay compilato con il 1284 supportato tramite core Arduino mi da uno sketch di 3630, compilato con il core Maniacbug mi da uno sketch di 3592.

Quindi io per ora continuo con la vecchia strada, ossia usare un core appositamente sviluppato per una precisa MCU

Michele Menniti

Ma per chiudere definitivamente la cosa non basterebbe che qualcuno del Team Arduino ci dicesse se il 1284P è supportato pienamente o meno dal core di Arduino? Grazie al Cielo sono tutti vivi e vegeti, mica stiamo studiando Storia Romana :smiley-sweat:
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72


Ma per chiudere definitivamente la cosa non basterebbe che qualcuno del Team Arduino ci dicesse se il 1284P è supportato pienamente o meno dal core di Arduino? Grazie al Cielo sono tutti vivi e vegeti, mica stiamo studiando Storia Romana :smiley-sweat:

Sparsi qua e là nei file del core di Arduino ci sono riferimenti a micro diversi dal 328, c'è roba per il 1284 appunto ma anche per i Tiny. Io resto però dell'idea che un conto è un supporto generico al microcontrollore, un conto è un supporto fatto con un core specifico.
Basta compilare un semplice Blink per l'Arduno e per un Tiny e vedere dalla differenza in dimensioni del firmware finale che qualcosa c'è. Ad esempio, io so per certo (lo ha più volte detto il suo creatore) che il core Tiny è ottimizzato per generare codice più compatto rispetto al core di Arduino. Anche se il core di Arduino supportasse i Tiny con una semplice board virtuale, io continuerei ad usare il core Tiny proprio perché specifico. Non so se mi sono spiegato.

Michele Menniti

Ti sei spiegato alla perfezione, non ti lascio per così poco :*
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

niki77


Basta ad esempio fare un diff fra i file wiring_analog.c del core di Arduino e di quello del core di Maniacbug per accorgersi che le differenze ci sono eccome.



E quali sarebbero?
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Go Up