PIC 32 Primi passi By Mirko

Stampa
( 4 Votes ) 
Valutazione attuale:  / 4
ScarsoOttimo 
Categoria principale: Elettronica Categoria: Microcontrollori
Data pubblicazione
Scritto da Mirko Visite: 4065

PIC 32 primi passi

Descrizione

Dopo aver lavorato ben bene con il 16F ed il 18F ho richiesto dei campioni del 32 alla microchip, arrivati è cominciato il lavoro: hardware e software.
Vedremo in questa pubblicazione la realizzazione di un adattatore per PIC 32MX440F128H in formato QFP 64 pin e l'implementazione dello stesso su un millefori ed un piccolo programma per il lampeggio di un LED.
E' chiaro che il fine non è utilizzare un 32 per far lampeggiare un LED ma appunto prendere confidenza con PIC, programmatore, compilatore e debugger per muovere i primi passi.
Un particolare ringraziamento, anche se non lo conosco personalmente, va a LUCIO DI JASIO autore del libro "Programming 32-bit microcontroller in C" un libro che è d'obbligo leggere per chi vuol cominciare con i 32, i soliti altri documenti non da leggere ma da studiare sono il datasheet del pic e il manuale d'uso del PICKIT2/3, prestare particolare attenzione alla parte hardware poichè lavorando con una scheda di sviluppo rudimentale oltre che sperimentale bisognerà dimensionare correttamente tutti i componenti collegati al PIC e prima di lanciare il programma verificare sempre le porte corrispondenti utilizzate.

Hardware.

I campioni gratuiti arrivati dalla microchip sono in formato QFP che è un formato SMD 64 pin e tra gli SMD uno fra i più difficili per quanto riguarda il suo montaggio, d'altronde a caval donato non si guarda in bocca!
Quindi ho realizzato un PCB che mi ha dato la possibilità di poter utilizzare e sfruttare questo prezioso e potente PIC.
E' necessario un programmatore  PICKIT2 o 3 per poter programmare il 32 via ICSP, vanno bene anche i clone o gli autocostruiti, in tal senso la microchip fornisce completamente tutta la documentazione per autocostruirlo con sorgenti a corredo, in più in rete trovate tutte le varianti (interessante e più completa è quella elaborata da SARIN SUKUMAR), io personalmente ho acquistato un clone2 completo di connettore textool da Hong Kong, perchè a conti fatti tra il 2550, componenti passivi, connettori, quarzo e scheda come costi c'eravamo vicini ecco la carrellata di foto della realizzazione dell'adattatore:

-Disegno del circuito realizzato con FIDOCAD:

adattatore0
 
-Circuito realizzato in casa con metodo della fotoincisione:

adattatore1

-Foratura e montaggio connettori strip,dei condensatori di filtro e PIC32, quest'ultimo,saldato
con l'ausilio del flussante:

adattatore3

-Vista da sotto, si può notare al centro del PIC32 c'è un foro da 3mm con una stagnatura, questa soluzione poco piacevole alla vista e sicuramente alla microchip  gli verranno i peli dritti, è nata per assicurare  che la parte sottostante del PIC sia collegata a massa e possa al tempo stesso assicurare un buono  scambio termico (d'altronde con i normali attrezzi ed utensili casalinghi di più non si poteva fare! ):

adattatore4a

Da tener presente che le foto qui pubblicate ingrandiscono molto ma in realtà il PIC32 misura 
solamente 9mm per lato quindi è ancora più piccolo della superficie di un tasto della tastiera.I condensatori sono stati montati direttamente nell'adattatore perchè devono essere il più vicino possibile ai piedini del PIC  come specificato dal datasheet. Invece nel millefori saranno montati solamente i componenti per una  configurazione minima:

conf1
La configurazione minima consigliata dal datasheet, da notare che il 64 pin ha solo tre punti d'alimentazione Vdd-Vss e il quarzo non è strettamente necessario in quanto si può sfruttare quello interno:

clock
Risulta molto complessa la configurazione del clock,anche se, come vedremo poi esistono le scorciatoie.....in ogni caso è utile se non indispensabile avere ben chiaro lo schema a blocchi del clock, la scelta per il progetto sarà l'utilizzo del clock interno da 8 MHz che nel listato figurerà FRC come sorgente clock appunto.

Curiosità:
Oltre alla possibilità dell'utilizzo dei due clock interni ci sono i due clock esterni il primario ed il secondario, questo ultimo appunto è necessario per far funzionare una periferica interessante l'RTTC:

rttc

e qui abbiamo un orologio, con datario e possibilità di allarmi, completo. Diamo uno sguardo ora alla nomenclatura della piedinatura, alle caratteristiche ed allo schema a blocchi:

pin
Come vi dicevo prima(vedi la nota) la parte in metallo sotto il chip dev'essere connessa a massa, i piedini contrassegnati in neretto possono lavorare a 5 V (non dimentichiamoci che il PIC32 lavora a dai 2,3 fino 3,6V),
nella foto seguente sono riportate le caratteristiche principali:

caratteristiche

  Invece qui abbiamo lo schema a blocchi:

blocco1

 
Il BUS è chiaramente a 32 bit, avevamo visto che nei 16F e 18F i registri di configurazione erano ad 8 bit, qui tutti i registri sono a 32 bit. Altra differenza che salta agli occhi è che l'area FLASH_PROGRAM, DATA_PROGRAM e EEPROM non è più definita dall'hardware ma bensì è una memoria unica, nel nostro caso di 128k, la quale si definisce o meglio si partiziona in fase di stesura del sorgente e se non specificato il compilatore assegna partizioni standard autonomamente,altrettanto interessante è la CPU Core,in questo link: 
http://it.emcelettronica.com/arm-vs-mips-arm7tdmi-s-vs-mips32m4k (senza che faccia l'antipatico copia/incolla) 
è ben spiegato e finalmente in italiano (la differenza tra gli ARM ed i PIC32) in dettaglio le sue caratteristiche. 
Vediamo ora alcune foto dello schema elettrico e della sua realizzazione sul millefori:

schemasfondo
 
Si può notare il connettore ICSP per flashare il pic, il pulsante reset, due led ed un pulsante che saranno quelli implementati nel sorgente. I condensatori di filtro (montati nell'adattatore) utilizzati sono in poliestere e non ceramici  come specificato dalle caratteristiche del datasheet.

IMG 20120625 1234241

Nella parte sinistra c'è un LM317 per adattare la tensione di alimentazione da 5V a circa 3,3V (nello schema elettrico non è stato inserito) si notano i connettori strip dove andrà inserito l'adattatore. Non cercate il quarzo perchè in questo progetto ho utilizzato quello interno!

IMG 20120625 123559

 
Qui l'adattatore PIC già inserito nello stampato.

Software.
 
Mplab e C32 come compilatore, il PICKIT2 è integrato nell'ambiente Mplab e consente,oltre alla programmazione, anche un buon debugger. Se il PICKIT è un clone (come il mio!) non viene riconosciuto direttamente dal MPLAB ma bisogna scaricare sempre dal sito microchip il software apposito e tutto funzionerà perfettamente.

ASSOLUTAMENTE NECESSARIO leggere due note scaricabili dalla microchip:
51553E.pdf e PIC32_Starter_Kit_Usrer_Guide.pdf come al solito è tutto in inglese.. quindi doppio lavoro!

Si procede come sempre da wizard project si seleziona il pic, il compilatore, la cartella dove saranno contenuti

poi tutti i file dall'HEX al sorgente visibile qui sotto:

/************************************************************
 Program: Press a button to toggle LED1 or LED2, internal clock and            
 minimal configuration pin (see datasheet). 
MCU: PIC32MX440F128H 64 Pin QFN
Compiler: C32 V2.02
Development software: MPLAB IDE 8.83 + PICKIT2 
Author : Mirko Musto 01/07/2012
*******************************************************/

#include              // Adds support for PIC32 Peripheral Library functions and macros

#pragma config FNOSC = FRC                         // Oscillator Selection
#pragma config FPLLIDIV = DIV_2                    // PLL Input Divider
#pragma config FPLLMUL = MUL_20                 // PLL Multiplier
#pragma config FPLLODIV = DIV_1                  // PLL Output Divider
#pragma config FPBDIV = DIV_1            // Peripheral Clock divisor
#pragma config FWDTEN = OFF             // Watchdog Timer
#pragma config WDTPS = PS1                        // Watchdog Timer Postscale
#pragma config FCKSM = CSDCMD                  // Clock Switching & Fail Safe Clock Monitor
#pragma config OSCIOFNC = OFF          // CLKO Enable
#pragma config POSCMOD = OFF          // Primary Oscillator
#pragma config IESO = OFF                            // Internal/External Switch-over
#pragma config FSOSCEN = OFF           // Secondary Oscillator
#pragma config CP = OFF                     // Code Protect
#pragma config BWP = OFF                            // Boot Flash Write Protect
#pragma config PWP = OFF                            // Program Flash Write Protect
#pragma config ICESEL = ICS_PGx2                // ICE/ICD Comm Channel Select
#pragma config DEBUG = OFF                        // Debugger



#define SYS_FREQ (8000000)


void DelayMs(unsigned int msec){
                                               unsigned int tWait, tStart;
                                               tWait=(SYS_FREQ/2000)*msec;
                                               tStart=ReadCoreTimer();
                                               while((ReadCoreTimer()-tStart)     // wait for the time to pass
                                      }
int main(void){
                   char murcielago = 0x00;

                   // LED setup - Turn off leds before configuring the IO pin as output
                    mPORTDClearBits (BIT_1 | BIT_2);       
                   mPORTDSetPinsDigitalOut (BIT_1 | BIT_2 );      // Set RD1 and RD2 as outputs
                   mPORTDSetPinsDigitalIn  (BIT_3);                   // Set RD3 as input switch

while(1){                                                                // endless loop

 if(BIT_3==0){

                   murcielago=!murcielago;                       // if press P1 toggle LED1 else toggle LED2
                   DelayMs(1000);
                    }
 if(murcielago==1){
                            DelayMs(100);
                            mPORTDToggleBits(BIT_1);                    // toggle LED1
                      }
 else{
         DelayMs(100);
         mPORTDToggleBits(BIT_2); // toggle LED2
        }
 };
return 0;
}

Il sorgente sopra esposto prende spunto da un esempio presente nel datasheet microchip che poi è stato opportunamente modificato ed adeguato alle esigenze del progetto. Di fondamentale importanza è la libreria: #include   // Adds support for PIC32 Peripheral Library functions and macros
questa consente l'accesso, la configurazione e l'utilizzo di tutte le periferiche del PIC stesso attraverso il richiamo di funzioni o delle macro, è chiaro che la conoscenza di tale libreria vi consente il pieno sfruttamento delle risorse disponibili, facendoci risparmiare molto tempo in termini di programmazione specie quando si trattano MCU molto complesse. Ciò non toglie il fatto che si possa utilizzare il classico modo a cui eravamo abituati (TRISA,PORTA ect.) ma visto questa vantaggiosa possibilità messa a disposizione dalla microchip (e ben testata) perchè no? Certo all'inizio bisogna spendere del tempo per studiare e capire la libreria ma poi si vola!

I vari pragma sono per le configurazioni basillari, esempio:

#pragma config FNOSC = FRC      // Oscillator Selection

Questa serve per abilitare il clock interno da 8 mHz (vedere datasheet la voce del registro FOSC) e clock diagram.

#define SYS_FREQ (8000000)

Con questa macro non curandosi affatto del tipo di quarzo utilizzato o se, come nel nostro caso clock interno, si decide a priori a che frequenza far lavorare le periferiche del PIC che non dimentichiamo arriva a 80 mHz, attenzione però, intendiamoci il tipo di clock (PRI,FRC ect.), quarzo (XT,HS ect.) ed altri vanno obbligatoriamente e correttamente dichiarati dopo di che possiamo modificare la velocità del clock secondo le nostre esigenze.
Il resto del sorgente è spero di facile interpretazione quindi non mi dilungo oltre.
Vediamo or alcune foto del progetto realizzato e funzionante:

Foto0071

Si può notare anche il programmatore PICKIT2 clone, a tal proposito in rete c'è molta confusione a riguardo del fatto che il pikkit 2 può o non può programmare i 32,
chiaramente nel sito microchip è specificato chiaramente l' unica pecca è che l'mplab non abilita il pik kit2 per programmare questi pic esiste di fatto un software
esterno al Mplab il quale consente la programmazione solo per alcune serie 32 di pic ma non il debug .

Foto0072
Siamo arrivati al termine della pubblicazione, spero che sia di aiuto per chi vuol iniziare.