Salta al contenuto principale

Con questo secondo articolo si mostra come si può imparare a programmare facilmente un microcontrollore Microchip, il PIC16F18875 contenuto all'interno della Microchip Curiosity HPC Development Board (DM164136), dal costo davvero contenuto.

Al momento in cui scrivo questo articolo il costo della Board, che include anche altri utili componenti, è di circa 43 euro. Costava 28 euro qualche anno fa.

La programmazione viene fatta con il linguaggio C e il compilatore XC8 della Microchip. L'ambiente di sviluppo che usiamo è MPLAB Xpress IDE, in cloud.

 

Leggere questo articolo dopo il primo.

Nel seguente datasheet dal sito ufficiale si può vedere lo schematico della Board.

Lo scopo di questo secondo esempio è di fare lampeggiare il solo led D2, poi D3, poi D4, poi D5 con intervallo di mezzo secondo. Nel passaggio tra un led e l'altro, per mezzo secondo tutti e quattro i LED devono essere spenti. Ciascun led deve rimanere acceso per mezzo secondo. Dopo D5 deve ricominciare da D2, ciclicamente.

Il Pin RA4 è collegato al diodo Led SMD D2, il Pin RA5 è collegato al diodo Led SMD D3, il Pin RA6 è collegato al diodo Led SMD D4, il Pin RA7 è collegato al diodo Led SMD D5.

Non si vuole usare MCC Code Configurator.

 

Si usa MPLAB Xpress IDE in cloud, creando un nuovo progetto.

New Project --> Microchip Embedded ---> Standalone Project

Family: Mid Range 8-bit MCUs (PIC 10/12/16)

Device: PIC16F18875

eppoi si sceglie il nome significativo al progetto: PIC16F18875_Curiosity_Blink_D5

Si comincia inserendo il programma principale main.c:

Ecco il codice:

#include "config.h"  // custom edited config file.
#include <xc.h>

#define _XTAL_FREQ 500000

void main(void) {
    SYSTEM_Initialize();
    TRISA = 0b00000000;  // we set RA4, RA5, RA6, RA7 as Output
    PORTA = 0x00;
    while(1) {
        LATAbits.LATA4 = 1;
        __delay_ms(500);
        LATAbits.LATA4 = 0;
        __delay_ms(500);
        LATAbits.LATA5 = 1;
        __delay_ms(500);
        LATAbits.LATA5 = 0;
        __delay_ms(500);
        LATAbits.LATA6 = 1;
        __delay_ms(500);
        LATAbits.LATA6 = 0;
        __delay_ms(500);
        LATAbits.LATA7 = 1;
        __delay_ms(500);
        LATAbits.LATA7 = 0;
        __delay_ms(500);
    }
    return;
}

Non si riporta anche il codice di configurazione config.h e config.c che conviene prendere da uno dei tanti esempi preesistenti, oppure si può prendere quello del primo articolo di questa serie.