Go Down

Topic: ATmega328PB (Read 102912 times) previous topic - next topic

astrobeed

Mi sa che per cose come SPI, TWI e simili ... tocca aspettare una nuova revisione del datasheet o della toolchain perché al momento non si capisce un bel nulla e nulla corrisponde ... ::)
In teoria la toolchain Atmel usata tramite Atmel Studio 7 funziona, non ho ancora provato la SPI però le due I2C si e funzionano.
Per quanto riguarda le due UART e i GPIO quelli li ho già testati da IDE, non serve modificare nulla oltre all'inserimento dei file di Watterott, adesso vado a verificare gli address UART del data sheet e del file .h, mi aspetto pure qui una incongruenza, cosa curiosa che sia per la SPI che per PORTE la differenza è pari a 0x20.
Scientia potentia est

gpb01

P.S.: Il datasheet è sempre quello del 10/2015 ... nessun nuovo aggiornamento :(
... in compenso, il ATmega328PB Summary ... contiene una mappatura dei registri completamente diversa ... :o :o :o

Guglielmo
Search is Your friend ... or I am Your enemy !

astrobeed

Forse ne sto venendo a capo, se guardi la mappatura del 328P fino 0x3F viene riportato un doppio address, il secondo è 0x20 più avanti, e corrisponde con quella del 328PB.
P.e. sul 328P per SPCR è riportato sia 0x2C che 0x4C, ora c'è da capire bene questa cosa perché il data sheet non specifica per quale motivo c'è questo doppio address, però gli address dopo 0x3F saltano a 0x60, esattamente 0x20 in avanti.
Scientia potentia est

vbextreme

è l'offset presente anche nel 328p, gli indirizzi vanno sommati all'offset così si ha l'indirizzo reale.
Questo è per un fattore di portabilità verso gli altri chip Avr, ovvero gli indirizzi rimangono gli stessi ma vengono sfasati dell'offset.
Easy framework linguaggio C: https://github.com/vbextreme/EasyFramework
Hack your life: http://vbextreme.netai.net/
Unoffical Telegram group: https://telegram.me/joinchat/ALRu8ACkdTdXyz-2P7v13A

gpb01

... in compenso, il ATmega328PB Summary ... contiene una mappatura dei registri completamente diversa ... :o :o :o
... e mi sembra congrua sia come nomi che come address con il file iom328pb.h :)

Ora, tornando a bomba alla libreria SPI rilasciata da Hackaday ... com'è che mi da tutti quegli errori ? Sono sbagliati i nomi dei registri/bit nella libreria ?

@PaoloP, ma a te funziona ?

Guglielmo
Search is Your friend ... or I am Your enemy !

astrobeed

#335
Mar 10, 2016, 12:10 pm Last Edit: Mar 10, 2016, 12:10 pm by astrobeed
è l'offset presente anche nel 328p, gli indirizzi vanno sommati all'offset così si ha l'indirizzo reale.
No, ed è pure scritto chiaramente sul data sheet perché c'è il doppio address nella nota 4 a margine della tabella, però solo sul data sheet del 328P, anche su quello del MEGA2560, non c'è questa nota sul datasheet del 328PB.

Code: [Select]
4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used.
When addressing I/O Registers as data space using LD and ST instructions, 0x20 must be added to these addresses.
The ATmega48A/PA/88A/PA/168A/PA/328/P is a complex microcontroller with more peripheral units than can be supported within
 the 64 location reserved in Opcode for the IN and OUT instructions.
For the Extended I/O space from 0x60 -0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD instructions can be used.
Scientia potentia est

astrobeed

Visto quanto sopra direi che il data sheet del 328PB non è sbagliato, è solo carente di informazioni, il file iom328pb.h è corretto e si può usare.
Scientia potentia est

PaoloP

@PaoloP, ma a te funziona ?
Si. Ma perché io ho aggiunto le definizioni nel pins_arduino.h

PaoloP

No, ho fatto modifiche dopo la pubblicazione e non le ho inserite su github.
Appena posso sincronizzo la mia copia di lavoro con quella git.

PaoloP

Guglielmo se tu che cancelli i post o il forum fa gli scherzi?

gpb01

#340
Mar 10, 2016, 07:11 pm Last Edit: Mar 10, 2016, 07:11 pm by gpb01
Si. Ma perché io ho aggiunto le definizioni nel pins_arduino.h
... che c'entra Paolo ? :o Qui parliamo del nome dei bit e dei registri, mica della mappatura dei pin ... ::)

Guglielmo

P.S.: Perdona, mea culpa,  mi sono accorto che avevo formulato male la domanda/risposta e l'ho cancellata per riproporla così ... ma tu sei stato più veloce  :smiley-mr-green:
Search is Your friend ... or I am Your enemy !

PaoloP

Qui parliamo del nome dei bit e dei registri, mica della mappatura dei pin
Appunto, il nome dei bit deve essere uguale nelle librerie utilizzate. Se nelle definizioni ho SPIF e nella libreria chiama SPIF1, il compilatore si inca@@a. E ha ragione.
Quindi.... ho si scrivono le librerie con le definizioni dei registri e dei bit dei registri concordi con il file iom328pb.h oppure si scrivono le librerie con i nomi dei registri e bit dei registri come nel datasheet e si aggiorna il file iom328pb.h

Perché il vero problema è che Atmel ha fatto tutto alla "membro di segugio" usando nomi diversi tra il file delle definizioni e il datasheet.

gpb01

#342
Mar 10, 2016, 07:33 pm Last Edit: Mar 10, 2016, 07:33 pm by gpb01
Appunto, il nome dei bit deve essere uguale nelle librerie utilizzate. Se nelle definizioni ho SPIF e nella libreria chiama SPIF1, il compilatore si inca@@a. E ha ragione. ...
Appunto ... ma non mi sembra che queste cose puoi metterle in pins_arduino.h ... ::)  Occorre correggere proprio la libreria SPI visto che iom328pb.h è meglio non toccarlo per ragioni di compatibilità ...

Che Atmel questa volta abbia fatto un bel casino ... è fuori dubbio ...  :D :smiley-mr-green: :D :smiley-mr-green:

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

#343
Mar 10, 2016, 11:49 pm Last Edit: Mar 10, 2016, 11:51 pm by gpb01
Si, hanno fatto veramente un gran casino ...
... nel file iom328pb.h, per la SPI standard (non la 1) hanno cambiato alcuni nomi ed altri no :o

#define SPCR0   _SFR_IO8(0x2C)
#define SPR0    0
#define SPR1    1
#define CPHA    2
#define CPOL    3
#define MSTR    4
#define DORD    5
#define SPE     6
#define SPIE    7

#define SPSR0   _SFR_IO8(0x2D)
#define SPI2X   0
#define WCOL    6
#define SPIF    7

#define SPDR0   _SFR_IO8(0x2E)

... e, per di più, in contrasto con quanto scritto sia nel "summary" che nel "datasheet" (che tra loro sono diversi).

Peggio di così era difficile fare !!!  :smiley-evil: :smiley-evil: :smiley-evil:

C'è veramente il rischio di fare un sacco di lavoro inutile e che, magari con la prossima toolchain, s'accorgano del casino e cambino di nuovo tutti i nomi ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

PaoloP

E non hai controllato i timer, la wire e altre periferiche.  :smiley-mr-green:  :smiley-mr-green:

Go Up