Programmazione Microcontrollori PIC®

Ho raccolto in questa pagina tutti gli articoli riguardanti la Il Corso di programmazione dei microcontrollori PIC® della Microchip e più in basso approfondimenti e progetti completi con microcontrollori PIC dato che in tanti conoscono settorezero e me (Giovanni/Gianni/CyB3rn0id) per il corso di programmazione sui PIC e che iniziai a scrivere svariati anni fa (Luglio 2009!),  dopo aver cominciato a sperimentare in assembler grazie al Pic by Example di Sergio Tanzilli, al forum di Sergio Fiocco aka Fiser/FiserTek e il blog di Guido Ottaviani aka Guiott. Nel corso del tempo Microchip ha cambiato tutta la toolchain di sviluppo per cui, per evitare di riscrivere tutto daccapo (dato che la teoria è sempre la stessa), pubblicai degli aggiornamenti che utilizzavano i nuovi tool: ovvero MPLABX al posto di MPLAB IDE e i compilatori XC al posto di Hitech, C18, C30 e C32. Man mano che passano gli anni le cose cambiano sempre di più, io invecchio e la vista mi abbandona, e di conseguenza non riesco a starci dietro, per cui è chiaro che molte cose non funzioneranno più al primo colpo ma necessiteranno di modifiche, piccole o grandi che siano, ma, ripeto: i concetti rimangono sempre gli stessi. Non sono più assiduo sul campo dei Microcontrollori PIC per tanti motivi che non mi va di spiegare, ma continuo ad esserci affezionato dai tempi in cui si chiamava General Instruments e rappresentano comunque il primo tipo di microcontrollore che mi ha permesso di imparare dal “nudo metallo”, insegnandomi anche a ragionare su certe tematiche. Ritengo ancora i microcontrollori PIC dei prodotti molto validi, che si rinnovano di continuo (e questa è la cosa più importante di tutte) e, sotto certi aspetti, imbattibili e non escludo che possa tornare a farci un pensiero e dei tutorial.

All’epoca chiamai questa serie di articoli Corso di programmazione PICmicro in C dividendo gli articoli in Lezioni ma non sono un professore, né tantomeno pretendo di insegnare qualcosa a qualcuno dal momento che sono io il primo che deve imparare. Queste diciture, quindi, erano intese più per me che per un eventuale pubblico. Il fatto di scriverli su un blog personale è perchè costituisce una specie di Diario di apprendimento individuale e poi perchè questo facilita il contatto con persone appassionate e aziende che ti supportano. Fu infatti grazie a questo che ebbi l’opportunità di conoscere e stringere amicizia con le persone citate sopra, tra le tante altre conosciute durante gli anni.

Dato che la lista seguente è compilata a mano non escludo che possa mancare qualcosa: ovvero qualche articolo già pubblicato sul sito ma che non ho aggiunto in questa pagina, dato che, come vedete, anche settorezero viene rinnovato di continuo per supportare le nuove tecnologie senza dimenticare le vecchie. La cosa migliore, se non trovi qualcosa, è utilizzare la funzione di ricerca oppure scegliere la categoria nel riguadro “categorie” (questi riquadri si trovano nella barra di navigazione a destra). Alcuni snippet di codice o esempi di come procedere potrebbero semplicemente trovarsi nella categoria Programmazione o Matematica. Se anche in questo caso non riesci a trovare qualcosa che sei certo ci fosse, puoi contattarmi ma non inviarmi codice da correggere e tue idee da realizzare perchè non risponderò: non ho tempo di fare consulenze gratuite, altrimenti se lo avessi, avrei continuato ad aggiornare questi tutorial.

Giovanni ‘Cyb3rn0id’ Bernardo

Elenco lezioni Corso programmazione microcontrollori PIC® in C

  • Lezione 1 – Cosa è un microcontrollore, caratteristiche, note introduttive. Scegliere programmatore e linguaggio di programmazione [link]
  • Lezione 2 – Installazione degli strumenti di sviluppo, circuito di base [link]
    • aggiunta: Risolvere i problemi del PICkit3 [link]
    • aggiunta: Risolvere l’errore Target has invalid calibration data [link]
    • aggiornamento: Transizione da MPLAB IDE a MPLABX e dai compilatori Hitech ad XC [link]
    • aggiornamento: Il programmatore PICKit 4 [link]
    • aggiornament0: Schede di sviluppo Curiosity Nano e MPLAB X Code Configurator [link]
    • aggiornamento: Il programmatore MPLAB Snap [link]
  • Lezione 3 – Il primo programma in C, led lampeggiante con i delay [link]
    • aggiornamento: Led lampeggiante con delay, su MPLAB X [link]
    • aggiornamento: Impostazione del Clock e della Word di configurazione [link]
  • Lezione 4 – Gli interrupt [link]
    • aggiunta: La gestione degli interrupts sui PIC10/PIC12/PIC16/PIC18/PIC24/dsPIC [link]
  • Lezione 5 – Usare l’interrupt sul Timer0, led lampeggiante su interrupt [link]
    • aggiornamento: Led lampeggiante su interrupt Timer0, con MPLAB X [link
  • Lezione 6 – Gestione ingressi digitali: usiamo i pulsanti [link]
    • aggiornamento: Gestione pulsanti, con MPLAB X [link]
  • Lezione 7 – I display LCD alfanumerici basati sul controllore HD44780:
    • parte 1: I display alfanumerici intelligenti HD44780 [link]
    • parte 2: Hello world, realizziamo un semplice menù da visualizzare sul display [link]
    • parte 3: Caratteri personalizzati e animazioni [link
    • aggiunta: libreria con controllo del flag busy [link]
    • aggiornamento: I display alfanumerici intelligenti, con MPLAB X [link]
  • Lezione 8 – I display led a 7 segmenti, contatore up-down in multiplex [link]
    • aggiornamento: I display led a 7 segmenti, con MPLAB X [link]
  • Lezione 9 – Utilizzo della memoria EEprom interna [link]
    • aggiunta: Salvataggio dati complessi in EEprom [link]
  • Lezione 10 – L’USART e la comunicazione seriale [link]
    • aggiornamento: Esempio di configurazione UART dal Code Configurator [link]
  • Lezione 11 – Il convertitore Analogico/Digitale sui microcontrollori PIC
    • parte 1: Il convertitore A/D [link]
    • parte 2: realizziamo un  Termostato [link]
    • aggiornamento: Il modulo ADCC (Analogico Digitale con Computazione) [link]
    • aggiornamento: Il modulo ADCC, realizziamo  un termometro digitale [link]
  • Lezione 12 – Il modulo MSSP e la comunicazione I2C
    • parte 1: Introduzione [link]
    • parte 2: Utilizzare le EEPROM esterne I2C [link]
      • aggiunta: Salvataggio dati complessi in EEprom [link]
    • parte 3: comunicazione con l’RTCC DS1307:
      • La lezione non l’ho mai pubblicata ma pubblicai la libreria [link
    • aggiornamento: Utilizzare le librerie I2C generate dal Code Configurator, lettura accelerometro [link]
    • aggiornamento: Leggere le EEprom I2C con MPLAB X e XC8 [link]

Approfondimenti

Questi non sono progetti completi veri e propri ma esempi di applicazioni nella vita reale che fanno uso delle nozioni imparate durante i corsi e sono quindi da considerarsi come approfondimenti di programmazione. Tra parentesi è indicato il compilatore utilizzato: se non è specificato si tratta dell’XC oppure si tratta di un articolo di carattere generale e quindi senza sorgenti veri e propri. Dato che l’XC8 deriva comunque dall’Hitech, fare modifiche per adattarlo ai nuovi strumenti è piuttosto banale ed ho indicato in questo articolo le linee guida da seguire anche se, purtroppo per alcuni e fortunatamente per molti (me compreso), le cose sono in continua evoluzione.

  • La gestione degli interrupt sui PIC ad 8 e 16 bits [link]
  • Scegliere il PIC adatto al nostro progetto in base al package [link]
  • I package DIP, PDIP, SPDIP e SDIP [link]
  • Differenza tra LAT e PORT, funzioni di IO avanzate [link]
  • LED che non si accendono: disabilitare le funzioni analogiche [link]
  • Rimappare le periferiche con la funzionalità PPS sui PIC a 16bits [link]
  • Impostare Clock e Config Word sui PIC a 16bits [link]
  • La memoria dati sui PIC a 16bits: Zone di memoria X, Y, DMA e PSV [link]
  • Le routine di Delay sui PIC a 16bits [link]
  • Impostazione e funzionamento modulo ADC sui PIC a 16bits [link]
  • Emulazione EEPROM dati sui PIC a 16bits [link]
  • Utilizzare un encoder in quadratura (Hitech) [link]
  • Utilizzare un encoder in quadratura: esempio di menù su display (Hitech) [link]
  • Usare gli Shift Registers per aumentare il numero di uscite (Hitech) [link]
  • Shift Registers : pilotare 16 led con un 74HC595 (Hitech) [link]
  • Visualizzare valori su una bargraph (Hitech) [link]
  • Usare l’IO Expander I2C PCF8574 (Hitech) [link]
  • Pilotare i motori a spazzole in PWM (Hitech) [link]
  • Generare i segnali PWM sui PIC a 16 e 32 bit con i moduli Output Compare [link]
  • Regolare il PWM con un trimmer su PIC10F [link]
  • Utilizzare un tastierino a matrice (Hitech) [link]
  • Utilizzare un tastierino a matrice con un solo I/O, sfruttando il modulo AD (Hitech) [link]
  • Tastierino a matrice + 16 led con 74HC595 e modulo AD : Luci8 (Hitech) [link]
  • Leggere più canali analogici insieme e inviare i risultati su UART (Hitech) [link]
  • Il bus One-Wire (Hitech) [link]
  • Appunti sul Timer 1 [link]
  • Pilotare un servocomando usando un trimmer (Hitech) [link]
  • Pilotare un servocomando a distanza con i moduli Aurel (MikroC) [link]
  • UART e Clock su PIC12F [link]
  • Oscillatore interno: a cosa serve OSCCAL ? [link]
  • Display 7 segmenti: usare i 74HC595 [link]
  • Display 7 segmenti: libreria per MAX7219 [link]
  • Display 7 segmenti: gestione in assembler [link]
  • Misurare il livello di carica batteria LiPO [link]
  • Misurare il livello di carica di una batteria senza utilizzare IO [link]
  • Misura temperatura e umidità con DHT22 [link]
  • Regolazione luminosità / Breathing led con PWM su PIC10F (Hitech) [link]
  • Compilatore Hitech : i nomi mnemonici che causano errori [link]
  • PICKit : risolvere l’errore No Device Detected [link]
  • Risolvere l’errore Fixup Overflow Storing (Hitech) [link]
  • Hitech 9.7 : risolvere il crash [link]
  • Il PICkit1 (UNO!) [link]
  • Funzioni di IO avanzate sui PIC32: la gestione atomica dei bit [link]

Progetti Completi con i Microcontrollori PIC

Anche qui vale quanto detto sopra: tra parentesi è indicato il compilatore utilizzato: se non specificato si tratta dell’XC oppure si tratta di un articolo di carattere generale e senza sorgenti. Dato che l’XC8 deriva comunque dall’Hitech, fare modifiche per adattarlo ai nuovi strumenti è piuttosto banale ed ho indicato in questo articolo le linee guida da seguire. Se invece cerchi altri progetti che non sono elencati qui (perchè non usano un microcontrollore PIC ma piuttosto Arduino, ESP8266, Raspberry o altro) allora prova a vedere nella categoria progetti oppure in questa pagina.

  • MetroMik – Metronomo digitale con PIC16F1825 [link]
  • Alcool tester (Hitech) [link]
  • Adattatore multizoccolo ed EEPROM per il PICkit [link]
  • Controllo remoto Relè e Temperatura con i moduli XBEE (Hitech):
    • I moduli XBEE [link]
    • Easy Bee – La mia guida alla scelta e comprensione dei moduli XBee [link]
    • Controllo Relè e temperatura [link]
  • Lettura dei calibri digitali (C18):
    • Tipi di protocolli seriali usati dai calibri [link]
    • Innalzare il livello di tensione per renderlo compabile col PIC [link]
    • Interfaccia per PIC18F2550 (articolo che realizzai per Droids): [link])
    • Software per la lettura su PC [link archiviato]
  • Joystick Arcade USB (C18) (articolo che realizzai per Droids: [link])
  • Adattatore USB per Joystick Commodore64 / Atari (C18) [link]
  • Tastierino a matrice USB (C18) [link]
  • Uno scrigno magico che emette suoni [link]
  • Portachiavi con effetto Persistence Of Vision (POV) [link]
  • Generatore di onda quadra fino a 32MHz [link]
  • Disturbatore acustico con PIC12F (Hitech) [link]
  • Termometro digitale con display a 7 segmenti [link]
  • Cronometro digitale con display 7 segmenti [link]
  • Orologio con display touch – ovvero: utilizzare un PIC come controller di un display LCD custom [link]
  • Orologio con display 7 segmenti : Simple clock (Hitech) [link]
  • Orologio con display 7 segmenti modello big (Hitech) [link]
  • Casa delle bambole controllata via bluetooth (Hitech) [link]
  • Filtro contro le telefonate anonime (Mikro C) [link]
  • Sensore di livello troppo pieno (Hitech) [link]
  • Un ROV terrestre (C18) [link]
  • Automatismo GSM per campanile (C18) [link]
  • Timer per Bromografo [link]
  • Voltmetro e Amperometro con PIC16F88 (Mikro C) [link]
  • Centralina per persiane elettriche (Hitech):
  • Controllo volume con telecomando IR e autoapprendimento (Hitech) [link]

Repository con i sorgenti di esempio

  • Repository con tutti i sorgenti vecchi e alcuni nuovi [link]
  • Repository con gli esempi fatti con le Curiosity Nano su MPLABX [link]

Tutti gli articoli

Dal momento che sopra potrei non aver elencato tutti gli articoli, qui ci sono i link delle categorie:

Attenzione, però: 

Non si chiamano PICmicro!

É probabile che in qualche vecchio articolo mi riferisca ai Microcontrollori PIC® col termine errato  PICmicro: è purtroppo un grave errore che facevamo un po’ tutti all’epoca in cui abbiamo iniziato a programmare questi dispositivi utilizzando lo  storico tutorial Pic By Example di Sergio Tanzilli (e non dimentichiamo il tutorial di Sergio Fiocco che però non usava la parola PICmicro). La Microchip dice di non utilizzare più quella denominazione e, anche se sto cercando di correggere man mano, in molte parti del sito e in alcuni URL potreste ancora trovare scritta quella parola.

Pagine obsolete

Questa sezione deve essere considerata obsoleta. Ho lasciato i link per questioni storiche dato che a molti utenti piace così ma ripeto: questi link portano a pagine che purtroppo non sono aggiornate.

Librerie

Questa sezione contiene le vecchie librerie per microcontrollori PIC, ma si tratta di roba molto vecchia, sviluppata per il compilatore Hitech. Vai qui soltanto se sai quello che fai.

Schede di sviluppo / Demoboards

Recensioni e prove delle schede di sviluppo (meglio conosciute col nome di Demoboards) che utilizzavo/utilizzo normalmente nei miei articoli. In questo elenco sono però riportate schede di sviluppo molto vecchie anche se ancora utilizzabili.

Manuali e Libri

Anche se sono dell’opinione che niente può sostituire i datasheet, le application note e le applicazioni di esempio fornite da Microchip, in questa pagina sono raccolti i vecchi documenti essenziali della Microchip e i manuali di programmazione che ho ritenuto i migliori in assoluto anche per chi si trova alle prime armi. La maggior parte dei documenti qui inclusi sono in formato PDF. In altri casi può trattarsi di libri da acquistare. Ma è comunque una pagina non aggiornata: meglio utilizzare la sezione categorie.

Strumenti per lo sviluppo : IDE, Compilatori, Programmatori e Utilities

In questa sezione raccolsi i link alle pagine dalle quali si scaricavano gli IDE (ovvero gli ambienti integrati di sviluppo), i compilatori, le pagine di supporto ai programmatori per microcontrollori PIC più diffusi e dalle quali è possibile trovare supporto, software di programmazione ed eventuali firmware e in più le utilities, ovvero quei programmini  ausiliari che possono semplificarci la vita di tutti i giorni. Punta ad una pagina vecchia, che ho lasciato per motivi storici.

Links

Vecchi siti che trovavo utili all’epoca in cui ho cominciato a programmare i microcontrollori PIC da dove reperivo informazioni ed esempi fatti bene. Da anni dato che è tutto un proliferare di siti che sono copia/incolla di altri, non vedo quasi più nulla su internet a meno che non si tratti di forum ufficiali (tipo quello della Microchip) o siti delle case madri:  I links erano suddivisi in italiani ed esteri ma dato che questa pagina non è più aggiornata da anni, probabilmente molti link sono morti.

Condividi questa pagina su un Social cliccando su un pulsante

Se questa pagina ti è piaciuta o ti è stata utile, potresti dedicare un minuto a leggere quest'altra pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)