
Introduzione ai processori dsPIC Microchip
In questa pagina farò una breve panoramica sull'impostazione di MPLAB IDE, MPLAB SIM30 e MPLAB C30, ovvero l'ambiente di sviluppo e simulazione per la nuova famiglia di processori DSP introdotti dalla Microchip. Una volta installato MPLAB IDE, per creare un nuovo file in linguaggio C è necessario andare su File->New dopodichè, apparirà una pagina vuota dove andare ad inserire il codice sorgente. Una volta scritto il codice è necessario salvarlo, possibilmente nella cartella dove risiederà il progetto, andando su File->Save As e dando un nome qualunque con estensione c (es. mionome.c). Fatto ciò andiamo a creare il nostro progetto mediante il menu Project->Project Wizard. apparirà la seguente finestra:

Andiamo avanti cliccando su "Next" e selezioniamo il dispositivo che vogliamo utilizzare per il nostro progetto (si faccia riferimento ai datashets presenti sul sito della Microchip).

Al prossimo click su "Next" il software ci chiede di settare i percorsi sul nostro hard disk dell'ambiente di lavoro "Microchip C30 Toolsuite". Verifichiamo che il percorso dell'applicazione "MPLAB ASM30" sia corretto come mostrato nella figura seguente:

Procediamo con la verifica dell'applicazione "MPLAB C30":

Infine, con la verifica dell'applicazione "MPLAB LINK30":

A questo punto, facendo click su "Next" ci viene chiesto il nome del nostro progetto e la cartella di lavoro.

Al prossimo "Next" ci vengono chiesti i files .c da aggiungere al progetto. Ricordate il file che avevamo creato all'inizio?Bene, possiamo aggiungere proprio quello, seguendo naturalmente il percorso nel quale era stato salvato.

Naturalmente basta selezionare il file, fare click su "Add>>". Oltre al file sorgente dobbiamo inserire anche il linker script relativo al dispositivo utilizzato nel nostro progetto. Per fare questo, andiamo nella cartella "support", poi nella cartella "gld", selezioniamo il file relativo al nostro dispositivo e lo aggiungiamo cliccando su "Add>>".

A questo punto, cliccando su "Next" arriviamo alla schermata finale di riepilogo del nostro progetto e portiamo a termine la procedura cliccando su "Finish".

La procedura automatica creerà il nostro ambiente di lavoro e farà presente la lista dei files inclusi nel progetto.

Fatto questo, non ci resta che andare ad impostare il compilatore mediante il menu Project->Build Options->"nostro progetto". Verifichiamo che i percorsi di tutte le librerie e dei linker siano corretti.

Spostiamoci sul tag "MPLAB C30" e verifichiamo anche qui che le impostazioni relativi alla chiave "general" siano corretti.

Dal menu a scorrimento selezioniamo "Memory model" e verifichiamo che tutto sia corretto.

Infine verifichiamo le impostazioni del pannello "Optimization".

Ora andiamo sul tag MPLAB LINK30 e inseriamo il valore 512 nella casella relativa alla voce "Heap size".

Infine andiamo sul tag "MPLAB ASM30" e verifichiamo anche qui che tutto sia corretto.

A questo punto siamo pronti per la compilazione del nostro file sorgente. Andiamo su Project->Buil All.

Se è tutto ok la compilazione va a buon fine, altrimenti vi da errore e sarà necessario ricontrollare i passaggi precedenti.

Visto che ormai abbiamo imparato a creato un progetto, partiamo con un piccolo esempio in linguaggio C (si faccia riferimento alla breve introduzione al linguaggio C) per il controllo del convertitore A/D presente nei dsPIC.
/*M.M.Electronics SoundTek*/
#include "p30f2011.h"
#include <stdio.h>
int cnt;
int ADCValue;
int main (void)
{
TRISB=0x01; //RB1 configurata come input
ADPCFG=0xFFFD; //Configurazione RB1 input analogico
ADCON1=0x00E0; //Conversione A/D (auto counter)
ADCHS=0x0001; //Channel 0 neg=Vref-, pos=RB1/AN1
ADCSSL=0; //Skip ANx for input scan
ADCON3=0x1F02; //Sample time=31Tad, Tad=internal 2
Tcy
ADCON2=0; //Configurazione interrupt conversione
A/D
ADCON1bits.ADON=1; //Abilita modulo di conversione
A/D
while (cnt<10)
{
PORTB=cnt;
ADCON1bits.SAMP=1; //Inizia campionamento
while (!ADCON1bits.DONE); //Attendi fine
conversione
ADCValue=ADCBUF0; //Trasferisci valore convertito
cnt++;
}
}
Il programma inizia con l'inclusione di un file relativo al processore che stiamo utilizzando e cioè il PIC30F2011. Tale file contiene tutte le dichiarazioni relativi ai registri presenti nel dispositivo. Poi viene incluso il file relativo allo standard I/O, dopodichè vengono dichiarate due variabili intere. Il listato vero e proprio ha inizio in corrispondenza della voce "main". Qui vengono configurate le linee della porta B mediante il registro TRISB facente riferimento all'header "p30f2011.h". Il valore assegnato a tale registro è 1 e quindi la linea RB1 sarà configurata come ingresso mentre le restanti linee saranno delle uscite. Con la seconda istruzione vengono impostate le proprietà della porta B e in particolare la linea RB1 come ingresso analogico e le restanti linee come ingressi digitali. Con il registro ADCON1 viene impostata la conversione A/D automatica, cioè la conversione viene avviata automaticamente alla fine di ogni conversione continuamente. in alternativa è possibile impostare la gestione manuale del modulo di conversione, mediante la quale la conversione ha inizio in corrispondenza del settaggio del bit SAMP del registro ADCON1. Con il registro ADCHS impostiamo l'ingresso negativo del convertitore al potenziale di riferimento negativo e l'ingresso positivo sulla linea RB1. Quindi con questa impostazione in ingresso al convertitore avrò il segnale presente sulla linea RB1/AN1. Il registro ADCSSL consente di saltare la scansione sequenziale degli ingressi al fine campionare soltanto il segnale presente sulla linea RB1. Il registro ADCON3 consente di impostare la velocità di campionamento e di conversione. In questo caso viene preso come riferimento il clock di riferimento del sistema moltiplicato per 2. Con il registro ADCON2 invece, impostiamo la generazione di una interrupt in corrispondenza di ogni conversione. Diversamente è possibile impostare l'interrupt ogni 2, 3 conversioni e così via fino ad un massimo di 16 conversioni. Con il settaggio del bit ADON del registro ADCON1 viene acceso il modulo di conversione. L'istruzione while esegue il corpo di istruzioni presente fra le parentesi graffe fino a quando la variabile cnt<10. Con la prima istruzione il valore di cnt viene mandato sulla porta B. Con il settaggio del bit SAMP del registro ADCON1 ha inizio il campionamento, che come impostato in precedenza ha una durata di 31Tad. Fatto questo, mediante un while viene controllato lo stato del bit DONE del registro ADCON1. Se tale bit è 1 la conversione è ancora in corso altrimenti è stata portata a termine e si passa all'istruzione successiva. Qui il valore campionato dalla conversione viene trasferito nella variabile ADCValue per un'elaborazione successiva dopodichè viene incrementata di una unità la variabile cnt.
Spero di essere stato abbastanza esaustivo con questa breve panoramica sul mondo dei processori dsPIC Microchip, naturalmente se avete idee e progetti da pubblicare saranno accolti con piacere. Grazie.