Go Down

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

PaoloP

Non ho controllato se sul forum internazionale stanno portando avanti anche loro lo sviluppo di librerie per il 328PB.
No. Nessuno.
Gli unici siamo noi e il tizio su hackaday.
Poi c'è Watterott con il repository su GitHub ma senza librerie al momento.

gpb01

#361
Mar 11, 2016, 11:58 am Last Edit: Mar 11, 2016, 11:59 am by gpb01
.... oppure MikroC AVR che è appena stato aggiornato per il 328PB ....
Magari Astro, :smiley-confuse:

gli ho scritto, e NON solo io ... hanno risposto che lo implementeranno in una prossima release, ma la attuale 6.1.1 NON lo supporta (... e sul sito NON ho visto aggiornamenti in questi giorni, né l'apposita funzione dell'IDE rileva alcun aggiornamento).

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

astrobeed

Magari Astro, :smiley-confuse:
Hai ragione, avevo letto che facevano a breve l'update però non l'hanno ancora rilasciato, è un prodotto che non uso, dei loro compilatori ho preso quello per gli ARM che è decisamente comodo per sviluppare applicazioni semplici in tempi brevi.
Scientia potentia est

astrobeed

Gli unici siamo noi e il tizio su hackaday.
Però il tizio su hackday fornisce informazioni incomplete, a partire dai file da includere, non mi pare molto affidabile. :)
Scientia potentia est

gpb01

#364
Mar 11, 2016, 12:06 pm Last Edit: Mar 11, 2016, 12:07 pm by gpb01
Però il tizio su hackday fornisce informazioni incomplete, a partire dai file da includere, non mi pare molto affidabile. :)
... concordo ... la libreria SPI NON ha neanche provato ad usarla con gli esempi a corredo, altrimenti avrebbe visto le decine di errori che tira fuori !!!  >:(

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

astrobeed

Facciamo un attimo il punto della situazione, allo stato attuale abbiamo sicuramente funzionanti i quattro GPIO aggiuntivi del 328PB e le due UART, per poter dire di avere un update reale del IDE di Arduino serve almeno mettere in funzione le due I2C e le due SPI, i timer standard sembrano essere tutti funzionanti, devo ancora verificare se la libreria servo e tutti i pwm vanno come atteso, ma non credo ci siano soprese, idem la tone e la pulsein.
Una volta sistemati I2C e SPI non sarebbe male sviluppare una nuova libreria per l'accesso ai timer aggiuntivi, che sono un bel valore aggiunto su questo micro in quanto non usati dal core e liberi per l'uso, p.e. per gestire un semplice scheduler senza toccare le risorse standard di Arduino.
Se nel frattempo nel IDE 1.6.9 prendono in considerazione di aggiornare la toolchain all'ultima disponibile di Atmel, operazione semplicissima da fare, questo risolverebbe un sacco di noie. :)

Scientia potentia est

astrobeed

Intanto una conferma per il pwm, funziona perfettamente su tutti i sei pin, per il 328P, con la corretta frequenza, 980 Hz su 5 e 6, 490 Hz su tutti gli altri, anche la millis() va bene, sebbene non ho motivo per pensare che non funziona dopo verifico anche la servo().

Scientia potentia est

astrobeed

Alla lista dei todo per il 328PB, al fine di avere un core aggiornato per questo micro, aggiungo la gestione dei tre canali pwm aggiuntivi, però occorre tenere conto che vanno ad impegnare i pin 0,1,2, ovvero la seriale standard e INT0.
Scientia potentia est

astrobeed

Confermato anche il funzionamento della libreria servo, assieme al pwm questo conferma che i tre timer, 0-1-2, usati dal core di Arduino funzionano senza problemi anche sul 328PB senza dover modificare nulla e che non c'è nessun "casino" con i nomi dei registri. :)
Scientia potentia est

PaoloP

Astro, quale file pins_arduino.h stai usando? Quello di Watterott non ha i timer 3 e 4.
Nel mio invece c'è un errore del timer 3A ripetuto 2 volte, uno è 3B. Mentre il 4B è duplicato sul pin 3. Come si fa?


astrobeed

Astro, quale file pins_arduino.h stai usando? Quello di Watterott non ha i timer 3 e 4.
Nel mio invece c'è un errore del timer 3A ripetuto 2 volte, uno è 3B. Mentre il 4B è duplicato sul pin 3. Come si fa?
Sto usando il file di watterott, non ha alcuna importanza inserire i pin dei timer 3 e 4 perché tanto per Arduino non esistono, sarà la libreria, da fare, che li gestisce ad indirizzare correttamente i vari pin, da fare molta attenzione con le normali funzioni, come ho già fatto notare i tre pwm aggiuntivi, dati dai timer 3 e 4, vanno ad usare la seriale standard e int0.
La mia idea per usare i timer in più non è tanto per eventi esterni, collegati ai pin, ma per gestire eventi interni senza dare fastidio agli altri eventi di Arduino gestiti tramite timer, p.e. una libreria servo che non toglie pin pwm perché usa il timer 3, o 4, invece del timer 1, etc.
Scientia potentia est

astrobeed

Confermo anche il perfetto funzionamento della tone e della pulsein, così abbiamo provato tutte le funzioni che implicano l'uso dei timer e ci siamo tolti il dubbio dei possibili casini con il loro utilizzo da parte del IDE.
Voglio fare un paio di prove anche con la freqcount e la timer1, non fanno parte del IDE però sono molto utilizzate e programmano direttamente i timer manipolando i registri, se anche queste funzionano possiamo archiviare definitivamente la questione timer.
Scientia potentia est

gpb01

#373
Mar 11, 2016, 04:37 pm Last Edit: Mar 11, 2016, 04:50 pm by gpb01
Riscontro un problema nel file iom328pb.h ...

... mentre per la SPI sono definiti tutti i vari bit (address 0x2C, 0x2D e 0x2E) per la SPI1 (address 0xAC, 0xAD e 0XAE) NON sono definiti e ... non so che nomi usare (quelli del datasheet danno errore ... ma probabilmente perché non li trova in iom328pb.h) !

Che si fa ?  Si modifica il file iom328pb.h aggiungendo i "bit" mancanti nella SPI1 ? ? ? ::)

Guglielmo

Edit: Sto provando ad usare gli stessi nomi usati per la SPI ... in fin dei conti sono solo indici di bit quindi NON dovrebbe essere importante. Vi aggiorno ... ;)
Search is Your friend ... or I am Your enemy !

astrobeed

che si fa ?  Si modifica il file iom328pb.h aggiungendo i "bit" mancanti nella SPI1 ? ? ? ::)
L'avevo già spiegato qualche post dietro, i nomi usati per i singoli bit sono definiti solo una volta, senza divisione tra SPI0 e SPI1, perché sono da usare come indice per accedere ai singoli bit e non come accesso diretto al bit.
Per esempio con SPCRx abbiamo ;

Code: [Select]
#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 SPCR1   _SFR_MEM8(0xAC)


Dove i vari singoli bit hanno lo stesso nome di quelli del 328P, sono valori numerici e non indirizzi diretti del registo SPCRx, per questo servirebbe una struttura.

Da notare che la situazione è perfettamente identica nel file iom328p.h, unica differenza è nel nome registro che è senza numero.

Code: [Select]
#define SPCR _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
Scientia potentia est

Go Up