Go Down

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

astrobeed

Scusa intendo le librerie terze parti.
Un update sul import delle librerie, funziona solo se non si usa il portable, per fare le prove stavo usando una installazione dedicata del IDE 1.6.5 r5 con lo sketchbook dentro documenti, come da default, col portable non le trova e tocca copiare i file a mano e importarli nel progetto.
Scientia potentia est

testato

ecco spiegato infatti io uso sempre e solo portable.
Toccherebbe segnalarlo ad Atmel, ma come si fa ad aprire un bugreport ufficiale ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed

Ho rifatto tutta la procedura di sostituzione della toolchain e ho fatto la copia diretta della cartella hardware di Watterott dentro quella dell'installazione di Arduino, ora compila per il 328PB senza errori, probabilmente avevo dimenticato qualcosa quando ho copiato i file singolarmente.
Risolta la questione compilatore adesso tocca risolvere la questione core.
Scientia potentia est

astrobeed

Un update, devo ancora verificarlo in pratica, però sembra che la seconda UART viene già gestita regolarmente senza dover toccare nulla nel core, basta usare un "Serial.begin1(xxxxx)" per inizializzarla.
Questo perché la gestione delle seriali hardware nel core non è gestita in base al tipo di micro, ma dalla presenza delle definizioni dei relativi registri nel compilatore, che a sua volta è legata al micro dichiarato.
Dopo verifico in pratica se la seconda UART è realmente funzionante.
Scientia potentia est

astrobeed

#259
Feb 27, 2016, 03:21 pm Last Edit: Feb 27, 2016, 03:21 pm by astrobeed
Confermato, la seconda UART funziona come Serial1 senza dover modificare nulla nel core.
Scientia potentia est

astrobeed

Altra buona notizia, nel file pins_arduino.h di Watterott sono presenti anche le definizioni per i quattro gpio aggiuntivi.
Sia i due canali ADC in più, A6 e A7, che i due GPIO in più, 22 e 23, sono funzionanti senza dover modificare nulla nel core, in alternativa si possono usare quattro GPIO in più, 20, 21, 22, 23, se non servono i due canali ADC aggiuntivi.
Scientia potentia est

gpb01

Gran bella notizia Astro ...
... fondamentalmente quella che mi serviva era proprio la seconda seriale :D

Purtroppo ... Mouser è fuori scorta per i 328PB ... quelli normali li danno a 14 settimane, ho preso quelli a range esteso (tanto costano poco di più) e ... dovrebbero arrivare il 9 Marzo ... ::)

Guglielmo

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

astrobeed

Gran bella notizia Astro ...
... fondamentalmente quella che mi serviva era proprio la seconda seriale :D
Pure a me interessava in particolar modo la seconda seriale, visto che anche i gpio in più funzionano siamo già a buon punto. :)
Domani vedo se riesco a sistemare anche la seconda I2C, che mi interessa, a questo punto io sarei a posto perché per la seconda SPI non ho alcun interesse, i timer in più wiring non li ha mai gestiti neanche sulla Mega2560, quelli li uso in modo diretto con i loro registri.

Quote
Purtroppo ... Mouser è fuori scorta per i 328PB ... quelli normali li danno a 14 settimane,
Da Digikey sono disponibili immediatamente, oltre 1000 pezzi a magazzino.
Scientia potentia est

astrobeed

Per quanto riguarda l'I2C sono dolori, almeno per il momento potete scordarvi l'uso della libreria wire perché a sua volta si appoggia alla twi della avrlibc che ancora non supporta il 328PB, vale anche per la versione 2, pertanto non ci sono le corrette definizioni per i registri.
Altro problema è che le definizioni dei registri I2C tra il 328P e il 328PB non differiscono solamente per la presenza dello 0 o 1 aggiuntivo, ma anche nelle definizioni dei singoli bit.
In pratica tocca scrivere una libreria dedicata per la gestione delle 2 I2C del 328PB, però devo ancora verificare in Atmel Studio 7 come è gestita la cosa, magari è possibile estrarre qualcosa.

Scientia potentia est

PaoloP

#264
Feb 28, 2016, 09:35 am Last Edit: Feb 28, 2016, 09:37 am by PaoloP
Altra buona notizia, nel file pins_arduino.h di Watterott sono presenti anche le definizioni per i quattro gpio aggiuntivi.
Sia i due canali ADC in più, A6 e A7, che i due GPIO in più, 22 e 23, sono funzionanti senza dover modificare nulla nel core, in alternativa si possono usare quattro GPIO in più, 20, 21, 22, 23, se non servono i due canali ADC aggiuntivi.
C'erano già anche nel mio pin_arduino.h  :)

Per l'I2C anche io ho difficoltà, come già detto l'Atmel ha cambiato tutte le definizioni dei registri.... ma perché?

gpb01

Da Digikey sono disponibili immediatamente, oltre 1000 pezzi a magazzino.
... si, avevo visto, grazie, ma avevo anche altro materiale da ordinare da Mouser ed ho fatto un ordine unico ;)

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

astrobeed

Per l'I2C anche io ho difficoltà, come già detto l'Atmel ha cambiato tutte le definizioni dei registri.... ma perché?
Perché il 328PB e il 324PB sono i primi due AVR con la doppia I2C e questo richiede una differenziazione dei registri, esattamente come già c'è per la seriale.
Scientia potentia est

PaoloP

#267
Feb 28, 2016, 10:20 am Last Edit: Feb 28, 2016, 10:21 am by PaoloP
Quindi si potrebbe fare come per la seriale.... un header principale e poi i sotto file header 1 e 2.
E si includono in base alle definizioni dei registri.

Differenziazione ok, ma perché rinominare anche il primo registro e non solo il secondo? Idem per la SPI.

astrobeed

Quindi si potrebbe fare come per la seriale.... un header principale e poi i sotto file header 1 e 2.
La seriale funziona perché la struttura multi UART è già prevista, p.e. il mega2560 ha 4 uart, e la selezione non avviene a livello di core, ma tramite la verifica dei registri interessati a livello di compilatore.
In pratica il numero delle UART usate da Arduino non dipende da una serie di if sul modello della mcu, come per altre caratteristiche, ma dalle define messe in atto dal compilatore, a sua volta in funzione del tipo di mcu dichiarato.
Il vero problema è che attualmente non esiste nessun supporto low level, le avrlibc, per la doppia I2C e la doppia SPI, su questa non ancora verificato ma non mi pare esistano altri AVR con la doppia SPI, in pratica puoi usarle solo utilizzando direttamente i relativi registri, la stessa cosa vale per Atmel Studio 7, ho appena verificato.
Scientia potentia est

astrobeed

Sono riuscito a compilare per la I2C usando la wire, per farlo ho creato una nuova libreria denominata WirePB partendo da un copiaincolla della cartella Wire originale, ho modificato tutti i riferimenti ai registri aggiungendo 1 ai nomi, va fatto anche per il file twi.c e twi.h contenuti nella cartella "Wire/util", e ho modificato il file twi.h delle avrlibc in questo modo:

Code: [Select]

da --> #define TW_STATUS (TWSR & TW_STATUS_MASK)
a  --> #define TW_STATUS (TWSR1 & TW_STATUS_MASK)


In questo modo la compilazione avviene senza errore, vale solo per la I2C 1 che corrisponde a quella aggiuntiva sul 328PB, devo ancora verificare se funziona sul serio, poi c'è da gestire la questione delle pullup interne, ma questo è il minore dei problemi.
Se la I2C funziona anche in pratica provo a modificare la classe Wire in Wire1 e Wire2, modificare twi.h delle avrlibc in modo che in base al modello di micro usa il corretto registro, TWSR oppure TWSR0/TWSR1, se tutto va come deve ho risolto anche la questione I2C, basterà usare WirePB.h invece di wire.h aggiungendo la relativa cartella alle librerie di Arduino.

Scientia potentia est

Go Up