La famiglia dsPIC33GJ06

I PIC sono microcontrollori a 8 bit tra i più diffusi al mondo. Da qualche tempo Microchip ha introdotto una nuova famiglia di microcontrollori: i dsPIC.
Questi presentano importanti differenze con i PIC e vorremmo dare qui una breve panoramica di tali dispositivi analizzando in particolare i dsPIC33.

I dsPIC (Figura 1) sono microcontrollori a 16 bit, ovvero i registri che controllano le operazioni possiedono numero doppio di bit.

Figura 1: dsPIC.

Figura 1: dsPIC

Questo semplifica e migliora in molti casi le operazioni poiché timer, ADC e tutte le altre periferiche hanno a disposizione più bit per operare. Esistono due famiglie di dsPIC: i dsPIC30 e i dsPIC33. Questi ultimi lavorano a 3.3 V ed hanno prestazioni di calcolo anche migliori rispetto ai dsPIC30. Infatti, i dsPIC30 possono arrivare a lavorare a 30 MIPS (cioè 30 milioni di istruzioni al secondo) e per farlo richiedono un clock a 120 MHz. Per ottenere tale clock si utilizzano un quarzo esterno e un PLL interno che moltiplica la frequenza del quarzo x2, x4, x8 o x16. I dsPIC33 possono arrivare a 40 MIPS. Il nome deriva dal fatto che hanno un modulo DSP (Digital Signal Processing) oltre alle normali periferiche dei PIC. Il DSP essenzialmente permette di eseguire molto rapidamente moltiplicazioni che nei normali PIC sono nella maggior parte dei casi eseguite tramite somme multiple (e sono quindi molto lente). Il fatto di avere a bordo un DSP consente di implementare sui dsPIC controllori PID digitali molto efficienti e filtri digitali, cosa che con i normali PIC è molto difficile. Nei dsPIC sono disponibili convertitori A/D interni a 10 e a 12 bit.

I convertitori a 10 bit possono arrivare con una configurazione particolare a una frequenza di campionamento di 1 milione di campioni al secondo. Un’altra caratteristica molto particolare riguarda gli interrupt: nei PIC sono definibili solo due funzioni di interrupt, una a bassa e una ad alta priorità. Invece, nei dsPIC è definibile una routine di interrupt per ogni periferica e ad ogni routine è associato un livello di priorità da 0 a 7. Per coloro i quali amano divertirsi con servocomandi, alcuni dsPIC hanno a disposizione una periferica detta Motor Control PWM che permette molto efficacemente il controllo di motori. Per chi è abituato con i normali PIC, la programmazione dei dsPIC potrebbe sembrare all’inizio un pò ostica. Innanzitutto, è bene dire che, sebbene possibile, non conviene utilizzare il linguaggio assembly per la programmazione visto il numero dei registri e periferiche. Un’altra nota dolente è che sembra molto difficile utilizzare programmatori clone dell’ICD2 per la programmazione, semplicemente perché nella maggior parte dei casi non funzionano. Se però si ha a disposizione l’ICD2 originale, non ci sono grandi difficoltà. Si utilizza il C30 (un compilatore in C analogo al C18, ma per i PIC con registri a 16 bit) in ambiente di sviluppo MPLAB, entrambi scaricabili gratuitamente e senza significativa limitazione dal sito Microchip. Per caricare il programma sul dsPIC si utilizzano l’ICD2 e la programmazione in circuit (il circuito per la programmazione in circuit è lo stesso dei normali PIC). I dsPIC supportano anche il debug in circuit, sempre utilizzando l’ICD2.

I MICROCONTROLLORI PIC33 E ALCUNI LORO REGISTRI

I pin di I/O (Figure 2 e 3) sono considerati le più semplici delle periferiche. Sui PIC16 della serie Midrange si trovano essenzialmente due soli registri associati alle funzioni di I/O: TRISx e PORTx (dove la x va sostituita con la lettera che identifica il banco di porte). Su molti PIC10/12, invece, essendoci un unico banco di porte, il registro PORT diventa GPIO (General Purpose I/O) e il registro TRIS diventa TRISIO: nomi leggermente differenti ma la sostanza rimane la stessa. Su tutti i PIC18 (ma anche sugli ultimi nati delle famiglie PIC10/12/16 Enhanced), oltre a questi due registri è stato aggiunto un registro LATx che per molti aspetti sembra svolgere le stesse funzioni del registro PORTx ma eliminando alcuni inconvenienti che analizzeremo in dettaglio (per cui questo articolo non è destinato solo agli utilizzatori dei PIC a 16 bit). Sui PIC a 16 bit (PIC24 e dsPIC), oltre a questi tre registri ne esistono altri che permettono di settare altre funzionalità specifiche dei “semplici” I/O digitali.

Figura 2: RAM dsPIC

Figura 2: RAM dsPIC

 

Figura 3: registri (esempio).

Figura 3: registri (esempio)

REGISTRI TRIS

I registri TRISx (TRISA, TRISB, TRISC, etc.), o il registro TRISIO su molti PIC10/12, determinano il funzionamento di un pin di I/O come ingresso o come uscita. Se il bit di una porta nel registro TRISx viene posto ad 1, il pin viene impostato come ingresso (ovvero: il pin va in alta impedenza), se invece il bit viene posto a 0, il pin relativo funziona come uscita.

REGISTRI PORT

I registri PORT servono ad accedere al dato presente su un pin di I/O. Quando un pin è configurato come ingresso, una lettura del bit ci indica il livello presente sul pin: se viene restituito un 1 vuol dire che il pin sta leggendo un livello logico alto (HIGH), uno zero indica un livello logico basso (LOW). Se un pin è configurato come uscita e sul bit relativo nel registro PORT scriviamo un 1, portiamo il pin a livello logico alto, se scriviamo uno zero portiamo il pin a livello logico basso. Quando un pin viene utilizzato come uscita e quindi intendiamo impostare il suo livello logico di uscita, il dato che noi andiamo a scrivere viene prima posizionato in un latch, ovvero una cella elementare di memoria e quindi successivamente trasferito al pin (alla “cella” del pin), mentre la lettura del registro PORT viene eseguita direttamente sulla cella di uscita del pin. Il valore in tensione dei livelli logici è in funzione della tensione di alimentazione del dispositivo. Generalmente, il livello logico basso è identificato dal riferimento di 0 V indicato anche come GND o Vss, mentre il livello logico alto è identificato dalla tensione di alimentazione Vdd del PICmicro (in genere 5 V per i PIC10/12/16/18/dsPIC30 e 3.3 V per i PIC24/dsPIC33). Esiste, ovviamente, un valore di soglia per il quale anche un livello logico più basso di Vdd viene identificato come alto, un valore di soglia per il quale anche un livello logico più alto di Vss viene identificato come basso e quindi un range “indeterminato” nel quale un valore di tensione può essere identificato come alto o basso, quindi nel quale non bisogna mai lavorare.

IL REGISTRO LAT

Il registro LAT, sempre presente su tutti i PIC dalla serie 18 in su e sui nuovi PIC10/12/16 serie Enhanced, elimina i problemi relativi a queste operazioni di lettura-modifica-scrittura. Come? In maniera piuttosto semplice: l’operazione di lettura del registro LATx esegue la lettura del latch di uscita anziché del pin. Il vantaggio è palese: se il pin non ha ancora cambiato lo stato logico (perché il processore sta andando troppo veloce e ha letto prima che cambiasse o perché un elevato carico capacitivo rallenta l’operazione “elettrica” di cambio stato) possiamo essere certi che invece nel latch di uscita c’è sicuramente il valore che noi abbiamo impostato e che in seguito sarà trasferito al pin di uscita! La scrittura in LATx, invece, è identica alla scrittura su PORTx, senza alcuna differenza.

CENNI STORICI SUL DSP

I DSP sono classificati secondo l’ampiezza e il tipo di dato che sono in grado di processare: si parla ad esempio di DSP a 32, 24 oppure a 16 bit; a virgola fissa o mobile. Le radici del DSP risalgono agli anni Sessanta-Settanta quando divennero disponibili i primi computer digitali. Ai giorni nostri, infatti, esistono anche processori software (applicazioni) che permettono di analizzare e modificare vari tipi di segnale tramite funzioni matematiche (molto utilizzato l'FFT - Fast Fourier Transform). Il DSP è utilizzato nei più svariati campi delle scienze per i seguenti scopi: miglioramento delle immagini, riconoscimento e generazione vocale, compressione di dati, etc. Le applicazioni sono innumerevoli poiché quasi tutti i segnali analogici possono essere convertiti in digitale. Il primo DSP monolitico lanciato nel 1978 sul mercato fu l’Intel 2920 dotato di ALU priva di moltiplicatore e un'architettura Harvard VLIW (Very Long Instruction Word) di 24 bit immagazzinata su 192 locazioni di EPROM, uno spazio di RAM di 40 parole da 25 bit e interfacce ADC e DAC a bordo. I suoi 2.5 MIPS effettivi erano all’epoca una velocità altissima.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend