Home

Il prototipo

Una breve introduzione a XC8: HELLO WORLD!

Ma in quante salse è stato proposto il fatidico HELLO WORLD? Davvero molte! E come esimersi dal riproporlo in questa sede?
La "scusa" è quella di continuare a parlare di MPLABX e dei nuovi compilatori che Microchip sta lanciando, quelli della famiglia XC. Nel 2012 sono stati proposti XC8, XC16, XC32, XC32++, compilatori C (e C++) rispettivamente per le famiglie a 8, 16, 32 bit dei prodotti Microchip. Sono stati sviluppati come derivazione di prodotti già esistenti aggiungendo nuove funzionalità e dando ai prodotti XC una nuova veste non solo esteriore.



Le licenze XC

I compilatori XC sono disponibili con tre tipologie di licenza: Free, Standard e Pro. Ciò che le distingue sono fondamentalmente soltanto due aspetti: il livello di ottimizzazione del codice ed il prezzo del prodotto. I due aspetti sono strettamente correlati e direttamente proporzionali: tanto più è elevato il prezzo del compilatore tanto maggiore è il livello di ottimizzazione disponibile.
Microchip ha sempre tenuto una politica dei prezzi che però permette all'utente di "assaggiare" il prodotto, prima di acquistarlo. Così, per 60 giorni e per qualunque compilatore XC venga installato, si ha a disposizione una licenza PRO pienamente funzionante. Scaduto il limite dei 60 giorni, l'utente può a sua scelta, acquistare una licenza Standard o PRO oppure continuare ad usare il compilatore con una limitazione nelle ottimizzazioni, secondo la licenza Free.


Livelli di ottimizzazione

Il compilatore XC8

Per i PICMicro a 8 bit è disponibile XC8, scaricabile liberamente dal sito di Microchip. Nasce sostanzialmente da una evoluzione del compilatore PICC di Hi-Tech, software house che Microchip ha acquisito qualche da non molto; XC8 ha subito una maturazione, qualche miglioria (a detta della Casa) e certamente non ne mancheranno in futuro. Una cosa importante è che XC8 si integra alla perfezione in MPLABX ed è possibile eseguire compilazioni, trasferimenti e debugging direttamente da MPLABX.
Una volta scaricato e installato, MPLABX avvisa che è disponibile un nuovo compilatore; dal menu TOOLS, scegliendo la voce OPTIONS e successivamente Embedded si ha modo di verificare che il compilatore sia stato caricato e che i percorsi dei file eseguibili siano corretti.

 

Selezione del compilatore XC8

Hello World!

Nel proporre un esempio di compilazione con XC8, non c'è niente di più immediato che far lampeggiare un LED. Anche se l'esempio è ormai inflazionato, rappresenta un buon trampolino di lancio per impratichirsi senza dover avere troppe righe di codice che, a mio parere, possono "distrarre" il neofita.

Lo schema di partenza è mostrato nel seguito, schema che propone un LED connesso ad un PICMicro e la porta ICSP per la programmazione mediante PICkit2, PICkit3, ICD2, ICD3. L'esempio (ed anche il codice che viene mostrato) è stato pensato per funzionare con PIC12F675 e con PIC12F683, dispositivi che hanno lo stesso pin-out.

La sezione di alimentazione, in grado di generare i 5V per far funzionare il circuito, non è stata mostrata. A dire il vero, per un funzionamento "didattico", magari montando il circuito su millefori, la parte di alimentazione può essere omessa, facendo in modo che il programmatore alimenti direttamente la scheda.

Schema elettrico

Dopo aver avviato MPLABX, si deve creare un nuovo progetto, seguendo quanto indicato in questo articolo. Si deve aver cura di scegliere il PICMicro adatto a questo progetto (PIC12F675 oppure PIC12F683) ed il compilatore XC8.

A questo punto è sufficiente aggiungere il codice C riportato qui nel seguito, compilare e trasferire il codice. L'effetto del lampeggio è immediato!

 

/*
Project: HW_12F675
Ver 1.0
Author: Paolo Rognoni, 2012
MCU: Microchip PIC12F675 and PIC12F683
Clock: 4 MHz (internal clock)
Compiler: XC8 - Version 1.12
File: HW_12F675.c

This software shows the HELLO WORLD Led blinking, using either PIC12F675 or
PIC12F683. The source code is ready for both PICMicro

This software is given under license CC-BY-NC-ND (Italy) as describe in the following
License: Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Italia
http://creativecommons.org/licenses/by-nc-nd/3.0/it/legalcode
http://creativecommons.org/licenses/by-nc-nd/3.0/it/deed.it

Link:
http://www.picexperience.it
http://www.electroyou.it

*/

#include <xc.h>

#define LED GPIObits.GP2
#define _XTAL_FREQ 4000000

/* Configuration bits */
#ifdef _PIC12F683_H_
#pragma config CP = OFF, MCLRE = ON, FOSC = INTOSCIO, WDTE = OFF
#endif

/* Configuration bits */
#ifdef _PIC12F675_H_
#pragma config CP = OFF, MCLRE = ON, FOSC = INTRCIO, WDTE = OFF
#endif

void InitPic (void);

void main(void)
{
    
    /* PICMicro initialization */
    InitPic();

    /* Never ending cycle...*/
    while(1)
    {
        LED^=1;             /* LED alternate ON and OFF */
        __delay_ms(200);    /* delay macro (200ms) */
    }

}

void InitPic (void)
{
/* I/O port configuration */
    GPIO  =  0x00;

#ifdef _PIC12F683_H_
    CMCON0 = 0x07;      /* Disable comparators */
    OSCCON = 0x60;      /* Oscillator frequency: 4MHz */
#endif

#ifdef _PIC12F675_H_
    CMCON =  0x07;      /* Disable comparators */
#endif
    ANSEL =  0x00;      /* Disable A/D module */
    TRISIO = 0x3B;      /* Only GP2 is set as OUTPUT */
    WPU = 0;            /* Disable internal pull-ups */
    OPTION_REG = 0x80;  /* Disable internal pull-ups */
}


Come si può notare, ho impiegato due macro messe a disposizione del compilatore XC; come detto, il codice C è compilabile tanto per PIC12F675 quanto per PIC12F683 e, benché questi PICMicro abbiano caratteristiche similari, differiscono per alcuni aspetti come il nome e la presenza di alcuni registri. Per passare da un progetto compilato per PIC12F675 a uno per PIC12F683 è sufficiente aprire la finestra delle proprietà del progetto e selezionare un altro PICMicro.

 

Il ritardo impostato di 200ms è stato rilevato con l'oscilloscopio, ed ecco il risultato:

 

LED blink on the oscilloscope

 

Per alimentare il circuito con la sola tensione fornita da ICD3 è sufficiente tornare nelle impostazioni di progetto e, nella voce ICD3 selezionare la voce POWER e successivamente spuntare la voce POWER TARGET CIRCUIT FROM ICD3:

  Power circuit from ICD3

 

Mi manca il PIC... si prova la simulazione!

Mi è capitato proprio questo: sono rimasto senza PIC12F675! Come fare, allora? Senza disperare, ho potuto verificare il funzionamento del codice C preparato, impiegando SIMULATOR, il debugger. Il simulatore lo si attiva nelle proprietà del progetto, selezionandolo nella voce Hardware tool:

Simulator

 

Un video

Ed ecco il blinker in funzione. Niente di che, soltato una breve dimostrazione di come funziona MPLABX con XC8. Il video mostra diversi aspetti argomentati in questo articolo come la compilazione per due PIC differenti, la simulazione ed infine l'alimentazione fornita da ICD3:

 

 

Licenza

Questo articolo ed il software rilasciato rientrano nell'ambito della licenza CREATIVE COMMONS BY-NC-ND Italia 3.0, secondo quanto indicato nelle note legali qui riportate.

 

  Sintesi delle note legali (italiano)
Creative Common License Note legali (italiano)
  Legal Code (international)
  Commons deed (international)

 

Bibliografia

Licenza Creative Commons
Questa opera viene distribuita con licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported.
ShoppingASEhandelASErhvervIndexDKServiceIndexDK