Go Down

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

niki77

La piedi natura a memoria mia passa per io.h che poi per il chip specifico viene prelevata da iom1284.h (basta aprire e leggere io.h).
La seriale suppongo Che ne vada di conseguenza,perlomeno la Serial, la 1 2 e compagnia bella non le ho provate.
Anche Il timer funziona,perlomeno quello usato da delay, altrimenti non avrebbe funzionato il blink.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72

@nik77:
Siccome mi suona strano che ci siano in circolazione diversi core da aggiungere all'IDE di Arduino per supportare il 1284, se, come dici tu, basta creare una scheda nel file boards.txt per fare andare tutto, potresti per favore darci ciò che hai aggiunto al tuo boards.txt nei tuoi test?

niki77

#32
Oct 09, 2012, 12:13 am Last Edit: Oct 09, 2012, 12:17 am by niki77 Reason: 1
Allora, i test che ho fatto oggi consistono in questo:
Preso ide arduino 1.0.1, creata una entry in boards.txt che avesse come build.core=arduino e come build.mcu=atmega1284p e come build.variant=standard
Avviato ide arduino, preso sketch blink e modificato aggiungendo Serial.begin(57600) su setup e Serial.println("bing") tra lo spegnimento e l'accenzione del led dello sketch penso più famoso del mondo.
Prelevato il file hex dalla cartella temporanea creata, caricato nel simulatore (non faccio nomi ma non il giocattolo), collegato un virtual terminal al 1284p ed un analizzatore di segnali avviata la simulazione e ottenuto onda quadra ad 1 hz e messaggi bing che popolavano lo schermo del virtual terminal.
Spero di essere stato abbastanza chiaro.

Ora veniamo alle cose serie.
Mi sono preso uno dei famosi core che dovrebbero fare il mestiere di supportare il famoso atmega1284p.(QUESTA)
Analizzando il codice di tutti i file ho riscontrato che vi sono in molti file differenze illusorie, ovvero righe di codice scritte in maniera diversa ma che alla fine danno lo stesso risultato.
Vi sono anche differenze che non sono illusorie, e ho riscontrato anche che nelle librerie dedicate al 1284p vi sono mancanze (es. in quella che ho io non è definita la costante INPUT_PULLUP, forse perchè  è derivata da una versione arduino core più vecchia).

Alcune cose mi hanno incuriosito, e ve le riporto sotto :

File Arduino.h
Nel codice arduino core
extern const uint16_t PROGMEM port_to_mode_PGM[];

Nel codice 1284p   core
extern const uint16_t port_to_mode_PGM[];

File Wstring.h
Nel codice arduino core
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<__FlashStringHelper *>(PSTR(string_literal)))

Nel codice 1284p   core
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

File Print.cpp
Nel codice arduino core
size_t Print::print(const __FlashStringHelper *ifsh)
{
 const char PROGMEM *p = (const char PROGMEM *)ifsh;
 size_t n = 0;
 while (1) {
   unsigned char c = pgm_read_byte(p++);
   if (c == 0) break;
   n += write(c);
 }
 return n;
}

Nel codice 1284p   core
size_t Print::print(const __FlashStringHelper *ifsh)
{
 const char *p = (const char PROGMEM *)ifsh;
 size_t n = 0;
 while (1) {
   unsigned char c = pgm_read_byte(p++);
   if (c == 0) break;
   n += write(c);
 }
 return n;
}

Alla fine secondo me si riduce tutto a questo, ma perchè manca PROGEMEM??

e questo è quanto.

Anche wiring_analog.h sembra contenere sostanziose differenze ma se si analizza bene il flusso logico del codice (e se non ho le travecole) è praticamente lo stesso funzionamento.
Ora datemi il tempo di indossare il casco e la tuta che sono pronto a ricevere tutte le vostre mazzate!!


P.S. poi di interessante ho letto pure QUESTO
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72

Parto dal fondo: perché non hanno usato PROGMEM? Perché, secondo me, sul 1284 è una cosa meno necessaria rispetto al 328. Quest'ultimo ha 2 kB di SRAM, il primo ne ha ben 16. Quindi capisci come occupare qualche byte sul 328 abbia un peso maggiore rispetto al 1284. L'accesso alla Flash comporta poi operazioni maggiori rispetto alla normale gestione delle variabili in RAM.

Questione core. Io personalmente con l'IDE 1.0.1 ho usato proprio il core che hai linkato. Ma se, come dici tu, la toolchain Avr supporta di suo il 1284p, mi spieghi il motivo per cui tutti usano core alternativi? Secondo me risiede nel modo in cui l'IDE gestisce le informazioni sui vari core. Ad esempio, prova ad usare un pin PWM oppure utilizza un interrupt, per capire se tutto fila liscio con il sistema che hai detto di usare tu. Io al momento non posso sperimentare (adesso sono al lavoro ma anche oggi a casa sono bloccato perché ho tutte le breadboard occupate da altre cose).

Michele Menniti

La spiegazione di Leo riguardo la questione PROGMEM mi sembra assolutamente plausibile; 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. Se così non fosse direi che Niki77 ha fatto una scoperta coi zz, che ci permetterebbe di riprendere un discorso lasciato in stand-by un po' di mesi fa. Ma sono prove che vanno fatte ed anch'io, ormai in piena attività UNI, sono inguaiato, quindi o Niki o morte :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

PaoloP


File Wstring.h
Nel codice arduino core
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<__FlashStringHelper *>(PSTR(string_literal)))

Nel codice 1284p   core
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

Questa è una correzione effettuata a causa di un bug nel core più recente --> http://code.google.com/p/arduino/issues/detail?id=866&can=1&q=__FlashStringHelper

leo72

@Paolo:
non la sapevo questa  ;)

PaoloP


@Paolo:
non la sapevo questa  ;)


Tranquillo... di maniaco che va a splulciare tutte le issue solo per curiosità ne basta uno.  :smiley-roll-blue:

niki77



File Wstring.h
Nel codice arduino core
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<__FlashStringHelper *>(PSTR(string_literal)))

Nel codice 1284p   core
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

Questa è una correzione effettuata a causa di un bug nel core più recente --> http://code.google.com/p/arduino/issues/detail?id=866&can=1&q=__FlashStringHelper


Questa si che è interessante... ora il cerchio è praticamente chiuso.  8)

Quote


La spiegazione di Leo riguardo la questione PROGMEM mi sembra assolutamente plausibile;



plausibilissima ma da me non condivisa, se miri a fare un core quanto più simile come comportamento all'originale non puoi fare una cosa diversa perchè ti fa comodo !

Per il resto se non vi arrendete nemmeno davanti all'evidenza bhe, vi lascio pure tutto il tempo di sperimentare di persona, quando avrete tempo e con comodo, tanto per me non c'è altro da chiarire !  :smiley-mr-green:





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

leo72

Di evidente ci sono solo le tue parole scritte su un forum  ;)
A parte gli scherzi, hai giustamente detto tu che non siamo qui per litigare. Cerco solo di capire com'è che tutti si sbattono per scrivere un core quando poi l'IDE supporta il 1284 attraverso la toolchain Avr. Se così fosse allora qualunque micro Atmel potrebbe essere programmato tramite l'IDE semplicemente creando la relativa board?
Hai provato con i Tiny, senza usare il core Tiny? Osservando il core Arduino ho spesso incontrato diverse volte definizioni per i Tinyx5 e Tinyx4.
Cmq mi pare troppo facile per essere vero. Ma siccome io provo tutto, appena posso voglio replicare il tuo esperimento.

niki77

#40
Oct 09, 2012, 04:25 pm Last Edit: Oct 09, 2012, 04:33 pm by niki77 Reason: 1

Di evidente ci sono solo le tue parole scritte su un forum  ;)

E ti pare poco?  :smiley-mr-green: :smiley-mr-green:


Cerco solo di capire com'è che tutti si sbattono per scrivere un core quando poi l'IDE supporta il 1284 attraverso la toolchain Avr

Mhh forse perchè prima della 1.0.1 quel supporto non c'era?
Comunque stai facendo confusione tra toolchain e core di arduino .


Se così fosse allora qualunque micro Atmel potrebbe essere programmato tramite l'IDE semplicemente creando la relativa board?
Hai provato con i Tiny, senza usare il core Tiny? Osservando il core Arduino ho spesso incontrato diverse volte definizioni per i Tinyx5 e Tinyx4.

No , non qualunque micro Atmel, tra loro alcuni sono profondamente diversi quindi non generaliziamo, ma potenzialmente tutti i micro che hanno gli stessi timer alla stessa risoluzione e supportano le stesse feature utilizzate nel core , ma in tutti i casi NON senza effettuare modifiche.
Quello che vorrei farti capire è che non è per magia che il 1284p funziona con il core di arduino originale, ma perchè qualcuno ci ha messo le mani per farlo funzionare!


P.S. MA PERCHè non ve ne nnate a ff........ !!! :smiley-eek:

LINK

LEGGERE NOOO???  :smiley-mr-green:

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

Michele Menniti

Niki, sei una persona in gamba, ma ogni tanto ti scappa la lingua, la perfezione non è di questa terra; mi pareva di aver chiesto una cosa diversa dalla risposta che ho ottenuto, che comunque mi farò bastare, non vorrei doverne fare due di viaggi :smiley-sweat:

Leo, visto il cortese ed accorato invito di Niki, che dici, partiamo assieme? così gli si manda una cartolina....:D

Bene, io non sono in condizioni di continuare la discussione perché non ho le competenze, pensavo di aver sollevato una questione importante, ma a quanto pare ho detto una minch..., allora continuo a seguire con interesse e, quando sarà possibile, farò qualche prova visto che la cosa mi interessa. Grazie :)
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

Michele ma il vaffa era gratis!
Mi dispiace che ti sei offeso, ma mi si sono svegliate cosi tante madonne appena ho trovato quella issue...
Vado dietro la lavagna ...
:smiley-zipper:
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Michele Menniti


Michele ma il vaffa era gratis!
Mi dispiace che ti sei offeso, ma mi si sono svegliate cosi tante [] appena ho trovato quella issue...
Vado dietro la lavagna ...
:smiley-zipper:

non mi sono offeso, tant'è che ho deciso di partire ;) e di quella issue non c'ho capito niente; ho solo voluto dire che il livello dei miei dubbi è troppo più basso di quello delle tue risposte, quindi non capisco se i miei dubbi sono dissipati o meno, e siccome stai già interloquendo con uno con cui ti puoi capire, semplicemente aspetto la fine della discussione per rifare le stesse domande a lui che, conoscendomi meglio di te, sa come rispondermi.
Una metafora per spiegarmi meglio: io non so cucinare e sto aspettando che sia pronto un uovo bollito, chiedo a mia moglie se è pronto e lei mi risponde "è sul fuoco da 6 minuti", che per me non significa niente mentre per lei significa tutto, le sarebbe bastato rispondermi (forse, non so cucinare sul serio :smiley-mr-green:) "tra 1 minuto è pronto" ed a me avrebbe levato il dubbio. Scusa se ti ho paragonato a mia moglie ma non sapevo come peggio offenderti per vendicarmi :smiley-yell: scherzo XD
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

Certo però Michele che la metafora dell'uovo bollito col tuo avatar....

Fammi strare zitto và   :smiley-yell:  :smiley-yell:
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Go Up