Core Atmega 644P 1284P

leo72:

niki77:
Da arduino 1.0 in poi il 644p/1284p sono già supportati dal core principale, non occorre neanche un core dedicato.

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?

No, o meglio si , io ho il file board.txt modificato per definire una board con il 1284p, ma l'ho fatto in seguito dopo che ho visto che nel core di arduino (arduino.h) vi erano degli switch specifici per quel chip.
Inoltre è definito il suo pinout su io.h , ha il suo bel file di definizioni io1284p.h, stà definito su wdt.h, sleep.h e power.h
Se devo essere sincero non ho provato a compilare molto di più di un semplice BLINK, ma posso sempre provare,non credo di trovare grosse sorprese.
Quello che vorrei sapere da te è cosa ti aspetti in un 1284p di profondamente diverso da un 1280 ?

niki77:
No, o meglio si , io ho il file board.txt modificato per definire una board con il 1284p, ma l'ho fatto in seguito dopo che ho visto che nel core di arduino (arduino.h) vi erano degli switch specifici per quel chip.
Inoltre è definito il suo pinout su io.h , ha il suo bel file di definizioni io1284p.h, stà definito su wdt.h, sleep.h e power.h
Se devo essere sincero non ho provato a compilare molto di più di un semplice BLINK, ma posso sempre provare,non credo di trovare grosse sorprese.

Scusami ma forse stai confondendo l'IDE di Arduino ed il suo core con le librerie della toolchain AVR mi sa. Tutti i file che hai elencato fanno infatti parte di quest'ultima e non della prima. Per compilare con l'IDE serve un core apposito messo in /hardware. Se usi altri compilatori (come AvrStudio) puoi certamente scrivere codice senza usare l'IDE.

[uote]
Quello che vorrei sapere da te è cosa ti aspetti in un 1284p di profondamente diverso da un 1280 ?

[/quote]
Personalmente un case in formato DIP. L'altro utente che cercava un simil-MEGA non lo so.

In AVRDUDE.CONF sono presenti le informazioni relative al 1284P, nella cartella "core" dell'IDE di Arduino esiste il file Arduino.h che contempla il 1284P. NON esiste un bootloader originale specifico per il 1284P (se non come scaricabile da terzi fornitori) e non trovo nemmeno un file contenente la piedinatura del micro, quindi dovrebbe aver ragione Leo. Ma io non voglio mettere un dubbio la parola di Niki77, quindi sarebbe interessante capire se e come è riuscito a programmare un 1284P col solo IDE 1.0.1

Scanso equivoci oggi ho compilato uno sketch che fa uso di delay e seriale e non ho avuto problemi.
Arduino.h non mi pare faccia parte della toolchain avr, se il chip non fosse supportato che cosa l'hanno messo a fare?(Nelle versioni precedenti se non erro non c'era)
Comunque se Leo è sicuro di qualche cosa di diverso Per quel chip che potrebbe non funzionare sarò felice di provarlo.
Siamo qui per sperimentare, mica per litigare! :grin:

Ovviamente XD
Dunque tu hai creato una board virtuale con questa MCU, senza fare nient'altro, hai mandato uno sketch con delay e seriale e funziona?
Chiarimento: secondo te dove la prende la piedinatura per indirizzare correttamente la seriale ed i vari pin?

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.

@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?

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

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).

La spiegazione di Leo riguardo la questione PROGMEM mi sembra assolutamente plausibile; i test di Niki sono certamente attendibili (togliti pure il casco :grin:), 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!

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 --> Google Code Archive - Long-term storage for Google Code Project Hosting.

@Paolo:
non la sapevo questa :wink:

leo72:
@Paolo:
non la sapevo questa :wink:

Tranquillo... di maniaco che va a splulciare tutte le issue solo per curiosità ne basta uno. :roll_eyes:

PaoloP:

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 --> Google Code Archive - Long-term storage for Google Code Project Hosting.

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

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 ! :grin:

Di evidente ci sono solo le tue parole scritte su un forum :wink:
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.

leo72:
Di evidente ci sono solo le tue parole scritte su un forum :wink:

E ti pare poco? :grin: :grin:

leo72:
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 .

leo72:
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........ !!! :astonished:

LINK

LEGGERE NOOO??? :grin:

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 :sweat_smile:

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

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 :slight_smile:

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 ...
:zipper_mouth_face:

niki77:
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 ...
:zipper_mouth_face:

non mi sono offeso, tant'è che ho deciso di partire :wink: 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 :grin:) "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 :stuck_out_tongue_closed_eyes: scherzo XD

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

Fammi strare zitto và :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: