helloREALworld

Un circuito con PIC18 su breadboard

In questa pagina è presentato un semplicissimo programma che utilizza la porta C del PIC18 come uscita digitale per accendere un LED. SI tratta della versione "reale" del più classico dei programmi per PC:  main(){printf "hello world";}.

Scrivere il primo programma in C per il PIC18 non è difficile, ma è utile avere:

Purtroppo la curva di apprendimento è piuttosto ripida, soprattutto perché occorre progettare contemporaneamente hardware e software. Per questo, a volte, l'uso di uno starter kit potrebbe aiutare, risolvendo almeno in parte i problemi dell'hardware.

Il primo programma: accendiamo un LED

Questo programma non fa altro accendere un LED: un modo per salutare il mondo facendo il verso al più classico dei programmi C per PC. I passi necessari:

L'hardware

La parte centrale dell'hardware è costituito da un LED con in serie una resistenza da qualche centinaio di ohm, connessi tra il pin RC0 (porta C, bit 0) e massa:

Un LED connesso a RC0

Come operazione preliminare occorre individuare sul foglio tecnico specifico del PIC18 in uso quale è il pin RC0 e quale è (o quali sono) il pin di massa (VSS). Il nome potrebbe cambiare, in particolare nella parte che segue lo slash (la stringa /T1OSO/T1CK1 dell'esempio potrebbe mancare oppure essere diversa) . Analogamente, il numero del piedino potrebbe essere diverso.

Evidentemente lo schema appena riportato è parziale: mancano infatti tutti i segnali per il collegamento all'ICD e l'alimentazione.

Abbiamo tre scenari possibili:

 I quattro LED collegati al PIC18

Un LED connesso ad un debug header

.

A questo punto possiamo collegare l'ICD, che fornirà anche l'alimentazione e la possibilità di trasferire il software al microcontrollore.

Il software

Lo scopo di questo primo codice è accendere il LED connesso alla porta C, bit 0. Il codice è diviso in due file, che trovate a fine pagina.

Configuration Bits

La funzione di questi bit è già stata descritta. Il file scaricabile a fondo pagina è specifico per l'esatto modello di PIC18 che si sta utilizzando e quindi potrebbe essere consigliabile generarlo da zero e non copia&incollarlo. 

Alcuni Configuration Bits che potrebbe essere utile osservare:

Questo header file (con nome qualunque, ma estensione .h - Osservazione 3) deve essere salvato nella sezione Header Files del progetto.

Codice C

Esaminiamo il codice, in questo come in altri casi, indipendente dallo specifico modello di PIC18 in uso. Il codice è scaricabile a fondo pagina.

I pin di I/O del PIC18 sono raggruppati in gruppi di massimo otto, indicati con il termine PORTx, dove x è una lettera che, a seconda del modello, varia da A ed E. Per poter accendere un LED connesso tra l'uscita 0 della porta C e massa sono necessarie due operazioni:

  1. Configurare la porta C come uscita
  2. Porre alta l'uscita 0 (LSB) della porta C per accendere il LED

La documentazione è disponibile in una sezione del data book dal titolo indicativo di PORTC, TRISC and LATC Registers. Di seguito un estratto in cui sono mostrate le tre tabelle a cui siamo interessati, con evidenziati i bit che controllano il pin a cui il LED è collegato:

LATC e TRISC

Questo file (con nome qualunque, ma estensione .c) deve essere salvato nella sezione source file del progetto.

Al termine, il progetto deve presentarsi come di seguito mostrato.

helloREALworl: il progetto

Il progetto evidenziato è quello principale (tasto destro → Set as Main Program).

Compilazione, programmazione ed esecuzione

Le operazione di compilazione del codice, trasferimento del codice dal PC al PIC18 ed esecuzione sono realizzate tramite una serie di icone, dal nome auto-esplicativo, leggibile passandoci il mouse sopra:

Le icone

In generale l'ultima icona permette di effettuare automaticamente anche le operazioni precedenti, per cui è in assoluto quella più comoda.

Per evitare comportamenti a volte incomprensibili, un paio di avvertenze:

Per programmare o eseguire codice usando un PIC18 reale occorre ovviamente alimentarlo. Il modo più semplice per farlo è configurare il PicKit3 per fornire la corretta tensione.

Il debug

Il debug si effettua attraverso:

Icone per il debig

I breakpoint

Debug: watch

Una volta che il programma si comporta come progettato, il PIC18 può essere programmato definitivamente (con gli stessi strumenti già visti) e reso autonomo, semplicemente scollegando l'ICD e fornendo l'alimentazione.

Il passo successivo: Continuiamo a salutare...

Osservazioni

  1. Scelta della base numerica. Le seguenti righe di codice hanno gli identici effetti:
    TRISC = 0x00;       // Set all PORTC pin as Output
    TRISC = 0b00000000; // Set all PORTC pin as Output
    TRISC = 0;          // Set all PORTC pin as Output

    Infatti 0x00 = 0 = 0b00000000. Qui un approfondimento.
  2. LATC e PORTC. I due seguenti assegnamenti hanno, nel caso di sola scrittura (come descritto in questa pagina), esattamente lo stesso effetto:
    PORTC = 0xFF; // 0b11111111 - Turn on all PORTC pin
    LATC  = 0xFF; // 0b11111111 - Turn on all PORTC pin

    Qui un approfondimento
  3. Configurations bits. La scelta di includere i configuration bits in un header file è discutibile. Altre opzioni sono inserirli in un separato file sorgente (.c) appartenente al progetto oppure nel file che contiene il main()
  4. Una pagina simile, con codice in assembly: helloREALworld in assembly

Codice

Esercizi

  1. Collegare il LED ad una porta diversa (PORTA, PORTB...): individuare quali pin sono effettivamente presenti e quali sono i registri da modificare
  2. Altre esercizi al termine della pagina continuiamo a salutare...


Data di creazione di questa pagina: settembre 2014
Ultima modifica: 20 aprile 2016

Una pagina simile: helloREALworld (in assembly)


Licenza Creative Commons Attribuzione 4.0 Internazionale


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima