Per programmare un PIC prima di tutto si deve acquistare un programmatore, nel mio caso un PicKit 3 comprato per una decina di euro su un e-commerce cinese
Da notare i colori della pedinatura tra il programmatore e lo zoccolo ZIF |
Per programmare i PIC si puo' usare MPLAB X Ide, scaricabile dal sito Microchip. Attenzione che questo e' il solo ambiente di sviluppo. Per compilare i programmi dovra' essere scaricato anche il compilatore (per esempio XC8)
Creazione di un nuovo progetto in MPALB |
Selezione del microcontrollore |
Selezione del programmatore |
Selezione del compilatore |
Quando si crea un nuovo progetto un MPLAB non viene creato un file sorgente da compilare. Dopo aver creato il progetto si deve selezionare la cartella Source Files ed Add New C Main File
Per poter programmare il PIC in PICKIT 3 si deve impostare l'alimentazione dal programmatore. Questo si effettua da Run/Set Project Configuration/Customize/PicKit3/Power/Power target circuit form PicKit3
Ovviamente il primo tentativo di programmare il microprocessore e' stato quello di usare un Led. Il PIC16F877A ha 4 porte digitali (A,B,C,D) programmabili da 8 bit in input ed output
Il PIC 16F877A non e' in grado di funzionare in modo autonomo perche' necessita di un oscillatore esterno (alcuni integrati della famiglia PIC hanno invece l'oscillatore integrato). Il quarzo deve essere posto ai pin 13 e 14 con a valle dei condensatori.
Si possono usare varie combinazioni di clock (per esempio 4MHz con condensatori da 15 pF)
http://www.elektrojo.com/img/cms/fig4-29.png |
Per rendere l'apprendimento un po' piu' semplice mi sono comprato una Pic Dev Board da un AliExpress. Prima nota : e' stata una pessima scelta perche' la documentazione a bordo e' tutta in cinese e organizzata in modo confuso. Sono riuscito a farla funzionare solo perche' insieme alla scheda era presente un CD con dei video tutorial (in cinese ma comunque comprensibili)
Sulla scheda sono gia' montati diversi dispositivi.
1) 8 Display a 7 Led
2) connettore per display LCD 12864
3) connettore per display LCD 1602
4) connettore per DS18B20 (termometro digitale)
5) tastiera 4x4
6) tastiera 4x1
7) 2 potenziometri collegati all'ADC del PIC
8) DS1302 (RealTime Clock) con batteria tampone
9) connettore PS2
10) RS232 connettore seriale DB9 con Max 232
11) interruttore di accesione
12) buzzer
13) 24C02 EEPROM 512 Bytes
14) HS0038 Universal IR Receiver
15) pulsante di reset per il PIC
16) resistenza variabile per gli LCD
17) 8 led verdi
Per usare il programmatore con la Dev Board quest'ultima deve essere alimentata separatamente mediante una alimentatore a 5 V (pin + al centro) oppure dalla porta microUsb (altrimenti MPLAB IDE segnala che non c'e' abbastanza tensione, circa 4.85 V) per procedere con la programmazione)
Da notare la pedinatura di connessione tra il PICKIT3 e la Dev Board |
La Dev Board ha gia' montato un quarzo da 4MHz. I led, come si vede dallo schema elettrico della Dev Board sono connessi alla porta D
Per alimentare i led si deve pero' fare un passo ulteriore. Si deve aggiungere un Jumper sul connettore 5x2 tra i pin VCC e LED VCC
Jumper bianco a fianco delle due resistenze variabili |
Questo e' il programma. A differenza di Arduino si deve impostare la configurazione del processore mediante i Configuration Bits in cui si indica per esempio la sorgente dell'oscillatore ed eventuali protezioni
Per impostare i Configuration Bits si seleziona da dentro MPLAB Window/PIC Memory Views/Configuration Bits. Si selezionano i valori desiderati e poi si clicca su Generate Source Code to Output. Si copia e si incolla quindi il risultato nel codice del sorgente
In questo programma viene acceso e spento il led connesso alla porta D0
------------------------------------
#include <xc.h>
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void delay(void);
void main(void)
{
TRISD=0x00;
PORTD=0xFF;
while(1)
{
RD0=!RD0;
delay();
}
}
void delay(void)
{
unsigned int a;
for(a=0;a<50000;a++);
}
------------------------------------
Nessun commento:
Posta un commento