Go Down

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

astrobeed

Non dovrebbe, c'è una classe apposta definita per la SPI1 ... ::)
Vero, avevo dato solo un'occhiata veloce senza approfondire la cosa.
Tra poco faccio il test della SPI usando questo display che usa la SPI sia per la grafica che per il touch, se funziona la libreria va bene, almeno per la SPI0.
Scientia potentia est

astrobeed

Un update per la SPI, partiamo con le cattive notizie, non è stato possibile fare il test con il display di Adafruit perché la loro libreria usa "spi.h" solo per l'init della periferica, poi indirizza direttamente i vari registri, presumibilmente perché hanno cercato di ottimizzare la velocità, pertanto non è possibile compilare perché vengono usati i nomi registri del 328P.
Come buona notizia c'è che la libreria SPI aggiustata da Guglielmo funziona se usata nel modo classico, però ho testato solo la SPI0, devo ancora provare la SPI1, ma non credo ci siano problemi.
Nel frattempo mi è venuta un'idea per risolvere la questione utilizzo SPI con librerie tipo quelle di Adafruit, devo verificare se è realmente fattibile, ma credo di si, se la cosa funziona la applico anche con la Wire perché anche in questo caso se le librerie di terze parti fanno un accesso diretto ai registri non si riesce a compilare.

Scientia potentia est

astrobeed

Nuovo update per la SPI :)
La mia idea ha funzionato, adesso compilo senza problemi anche la libreria di Adafruit per il display TFT con interfaccia SPI, devo ancora provarlo fisicamente sulla scheda Atmel, per farlo devo saldare i connettori femmina sulla fila di pin con passo compatibile per le shield, dopo pranzo li monto e provo fisicamente il display.
La soluzione è sempre stata sotto gli occhi però nessuno l'ha vista, siamo tutti partiti in sesta con le soluzioni "complicate" :)
E' bastato aggingere a SPI.h standard le #define per i nomi dei registri SPI del 328P, ovvero fare un bel copia incolla dal file iom328p.h per quanto riguarda i registri della spi e il suo interrupt.

Questo è il codice che ho aggiunto a spi.h-

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

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

#define SPDR _SFR_IO8(0x2E)
#define SPDR0 0
#define SPDR1 1
#define SPDR2 2
#define SPDR3 3
#define SPDR4 4
#define SPDR5 5
#define SPDR6 6
#define SPDR7 7

#define SPI_STC_vect_num  17
#define SPI_STC_vect      _VECTOR(17)  /* SPI Serial Transfer Complete */


Dato che voglio una soluzione che non tocca le librerie originali ho copiato la cartella SPI del IDE nella cartella " hardware->atmega328pb->avr->libraries" e modificato il file spi.h.
Ovviamente per la SPI1 occorre creare la libreria SPI1, come avevo fatto per la I2C, dove c'è la classe SPI1.
Faccio la stessa cosa anche per la Wire, cosi avremo totale compatibilità, senza dover aggiungere nulla, per la I2C standard e lascio l'attuale Wire1 per la I2C1.
Direi che in questo modo abbiamo risolto elegantemente la questione garantendo compatibilità al 100% anche con librerie di terze parti che accedono direttamente ai registri delle periferiche SPI e Wire.

Scientia potentia est

PaoloP

Il compilatore non ti da l'errore per la doppia definizione?

astrobeed

Il compilatore non ti da l'errore per la doppia definizione?
Sicuramente c'è una warning, non le tengo attive, infatti dopo voglio verificare quali valori sono in comune tra quelli che ho aggiunto e quelli presenti in iom328p.h, così da avere una cosa pulita senza doppioni.
Intanto ho saldato i connettori sulla schedina Atmel, messo sopra il display e funziona.  :smiley-mr-green:
Con un attimo di calma sistemo anche per la SPI1, modifico la Wire allo stesso modo e creo un nuovo pacchetto di installazione, tipo quello di Watterott, che contiene oltre ai file da aggiungere al core/toolchain anche le nuove librerie SPI e WIRE, così abbiamo una release 1.0 effettiva della patch ad Arduino per il 328PB.
Scientia potentia est

PaoloP


gpb01

Astro ... in teoria se prendo il tuo file di installazione, cancello la toolchain Win e butto dentro quella OS X ... dovrebbe andare anche per Mac ... giusto ?

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

astrobeed

Astro ... in teoria se prendo il tuo file di installazione, cancello la toolchain Win e butto dentro quella OS X ... dovrebbe andare anche per Mac ... giusto ?
Penso di si, in fin dei conti le uniche differenze tra la toolchain windows e quella per Mac/Linux dovrebbero essere solo nei file eseguibili, tutti quelli .c .ccp e .h dovrebbero essere identici.
Scientia potentia est

speedyant

Per curiosità "tecnica", pur non essendoci ancora una "scheda", si potrebbe provare una compilazione di qualche sketch con l'ide attuale?

gpb01

Per curiosità "tecnica", pur non essendoci ancora una "scheda", si potrebbe provare una compilazione di qualche sketch con l'ide attuale?
Già fatto con la 1.6.7 (non ho ancora implementato la cosa nella 1.6.8), ne ho compilati, senza problemi, anche di piuttosto pesanti (alcune migliaia si righe)  :D

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

astrobeed

#400
Mar 14, 2016, 09:55 pm Last Edit: Mar 14, 2016, 10:06 pm by astrobeed
Per curiosità "tecnica", pur non essendoci ancora una "scheda",
Le schede ci sono, attualmente oltre alla Xpalained mini 328PB di Atmel, che sto utilizzando per i test, c'è anche la scheda in stile pro mini di Watterott che costa solo 6.5 E.
Tutti i test li sto facendo con l'IDE 1.6.8.
Scientia potentia est

speedyant

Le schede ci sono, attualmente oltre alla Xpalained mini 328PB di Atmel, che sto utilizzando per i test, c'è anche la scheda in stile pro mini di Watterott che costa solo 6.5 E.
Tutti i test lo sto facendo con l'IDE 1.6.8.
Interessante, ma ovviamente bisogna "selezionare" una board custom, immagino. Proverò a dare la caccia ad una scheda da "torturare".

gpb01

Interessante, ma ovviamente bisogna "selezionare" una board custom, immagino. Proverò a dare la caccia ad una scheda da "torturare".
La trovi QUI ;)

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

speedyant


astrobeed

C'è anche questa di Watterott, costa solo 6.5E :)
Watterott a catalogo ha anche la Xplained 328PB di Atmel, 11.9 E, però zero disponibilità.
Scientia potentia est

Go Up