In questa seconda lezione incominceremo a “preparare il terreno” per i nostri primi, semplici esperimenti. Verranno utilizzati esclusivamente strumenti di sviluppo software gratuiti (anche se presentanti delle limitazioni, che per i nostri scopi non influiranno), e che quindi potete scaricare e installare senza problemi di licenze per incominciare a entrare nel fantastico mondo della programmazione dei microcontrollori PICMicro in linguaggio C. Ovviamente, trattandosi di un argomento abbastanza complesso, che abbraccia sia elettronica che informatica, sono richieste quantomeno conoscenze di elettronica di base e un minimo di dimestichezza con la programmazione. Per quanto riguarda la programmazione in C, consiglio di dare una buona lettura all’ottimo manuale Tricky C presente nella sezione risorse. Anche se la programmazione in C per i microcontrollori ha qualche “stranezza”, rispetto a quella per il computer, bisogna almeno sapere in C come si effettua un ciclo, come si scrive una funzione ecc, anche se cercherò di spiegarlo. Inoltre vi conviene sapere da subito, se già non la sapete, la differenza tra i sistemi decimale, binario ed esadecimale, per questo vi rimando ad un precedente articolo.
Prima di andare avanti, prego di leggere il disclaimer di SettoreZero qualora non sia già stato fatto.
Per iniziare abbiamo bisogno di componenti sia software che hardware:
Software
MPLAB® IDE
Hitec-C (versione Lite, già inclusa in MPLab con l’installazione completa)
Software di programmazione
Hardware
Un programmatore per picmicro
Una scheda di sviluppo
Un PiCMicro
Riguardo alla scelta del PICMicro, nelle mie lezioni userò prevalentemente un PIC16F877A, che costa relativamente poco (circa 8/9 euro) ed è molto ricco di periferiche. Avremo naturalmente bisogno anche di altri piccoli componenti (led, resistenze, pulsanti, display lcd ecc) che però vedremo di volta in volta in ogni lezione. Vediamo quindi dove e come recuperare tutti questi componenti uno per uno.
Installazione di MPLAB® IDE e Hitec-C
Scarichiamo MPLAB® IDE dal sito della Microchip: MPLAB® IDE (nel momento in cui scrivo, l’ultima versione disponibile è la 8.33, scaricabile in fondo alla pagina dove c’è il link indicato come MPLAB IDE v8.33 Full Release Zipped Installation). MPLAB® IDE è una suite di sviluppo: si tratta in pratica di un ambiente all’interno del quale possono essere integrati vari compilatori, sistemi di debugging (sistemi che servono a capire “dove stiamo sbagliando”) ecc. Insieme ad MPLAB viene installato anche MPASM che è il compilatore assembler (il linguaggio di programmazione predefinito per i PICMicro), che però non utilizzerò nelle mie lezioni: c’è già tanto materiale in giro su questo argomento, primo fra tutti l’ottimo tutorial PICMicro By examples di Sergio Tanzilli, che consiglio comunque caldamente di leggere. Ci tengo a precisare che alcune guide per l’assembler che si trovano in giro su alcuni siti sono copiate pari pari da tale tutorial senza nemmeno dare credito all’autore, questa è una cosa davvero scorretta e ignobile. Anche se in PICMicro by examples si fa riferimento ad un PIC16F84, ormai non più utilizzato (è stato sostituito dal 16F628, che è anche compatibile pin to pin), le regole di base sono valide per tutti i PICMicro, ed è una lettura che non può mancare a chi comincia a programmare i PICMicro: ha fatto la storia!
Installiamo dunque MPLAB® IDE. Lanciato il setup, quando ci verrà chiesto di scegliere che tipo di installazione effettuare, rimaniamo la scelta di default: completa. Tale modalità di installazione include anche Hitec-C. Alla fine dell’installazione verrà presentata la finestra:

Scegliere Si, verrà installato anche l’Hitec-C:

L’Hitec-C è un compilatore che ci permette di programmare in C per i PICMicro, la versione inclusa nell’installazione di MPLab è quella che permette di programmare in C i PICMicro delle famiglie 10,12 e 16, per tale motivo, ad un certo punto dell’installazione, si presenterà questa finestra che ci chiede se vogliamo installare anche il compilatore per le famiglie 18 e 32 (che però dovrà essere scaricato da internet, in quanto non è incluso nell’installazione standard di MPLAB)

Qui possiamo anche rimanere tutto così com’è, senza selezionare nulla, e premere Next. Ci verrà chiesta la selezione della lingua

Purtroppo dobbiamo scegliere inglese, spuntate anche la casella affianco (add to environment path) se avete intenzione di utilizzare il compilatore anche da riga di comando (ma non penso…). Completata l’installazione, da Start->Programmi->HI TECH Software->Hi TECH Pro for the PIC10-12-16 MCU Family, selezionare “Activate or Trial Pro Mode”
![]()
Questo ci permette di selezionare come si dovrà comportare l’installazione di Hitec-C:

Come vedete possiamo disporre di un’installazione completamente funzionante, senza limitazioni, ma per soli 45 giorni, di una versione completa (ma per la quale dobbiamo pagare!) e una versione Lite, senza limiti di tempo, ma con performance ridotte, selezioniamo la terza opzione come da immagine e premiamo Next.
La versione LITE non ci permetterà di utilizzare tutti i PICMicro disponibili (ma fortunatamente il “nostro” 16F877 rientra) e non potremo scrivere programmi molto lunghi perchè la compilazione è limitata a 2000H (=8192) word di programma. Per le applicazioni semplici che utilizzeremo in queste lezioni, 8192 word di programma sono più che abbondanti. Svantaggio principale della versione LITE è che l’output finale non è ottimizzato: la versione full a pagamento permette difatti di ottenere un codice eseguibile (cioè quello da caricare sul PICMicro) più pulito e generalmente più piccolo del 50% rispetto a quello generato dalla versione LITE.
L’installazione è completa.
Programmatore e software di programmazione
Del programmatore abbiamo già discusso nella lezione precedente. Non posso darvi un consiglio preciso su cosa utilizzare, tutto dipende dai gusti, dalla tasca e dalla voglia di imparare. Posso soltanto dirvi che io ho cominciato con il classico programmatore seriale JDM, che poi ho scoperto essere una vera “ciofeca” dal momento che non rispetta nessuno standard di programmazione e poteva essere utilizzato soltanto con il PIC16F84, il quale veniva programmato anche a stento! Per cui almeno questo ve lo voglio dire: all’inizio, se volete imparare e cimentarvi su più di un PICMicro, non usate un programmatore su seriale, sbatterete la testa inutilmente cercando di capire dove state sbagliando! Sono passato quindi ad un programmatore su parallela, che garantisce una ottima affidabilità e compatibilità. Tutti i programmatori su parallela sono cloni del ProPic2, e uno dei più validi in giro tra quelli che ho provato è quello proposto da Sergio Fiocco sul suo sito (qui c’è anche uno schema di un Propic2 clone con la descrizione di come vanno usati software). Tale programmatore è sicuramente ottimo, ma presenta lo svantaggio di dover utilizzare la porta parallela, che su molti pc, portatili in primis (per non parlare dei netbook!), non è più presente (non utilizzate adattatori USB/Parallelo! Ve lo dico da ora: funzionano per il 50% delle applicazioni!). Consiglio la realizzazione di tale programmatore perchè è un’esperienza da fare e permette di capire il meccanismo di programmazione dei PICMicro che è pur sempre una cosa importante.
Personalmente sono passato quindi ad un prodotto della Microchip, il PICKit2, che a mio avviso è davvero ottimo soprattutto per i principianti, e permette di programmare varie famiglie di PIC (compresi i 18F -la famiglia successiva ai 16F- per non parlare dei dsPIC, e delle famiglie 24F e 30F) nonchè memorie EEprom di tipo I2C, SPI e Microwire (e non è cosa da poco!). Quindi: fate voi. Se volete spendere qualcosina, andate tranquillamente sul PICKit2 (io l’ho acquistato su Robot-Italy), il PICKit2 viene fornito in versione standard o compreso di una scheda di sviluppo, è uscito anche il PICKit3, ma il prezzo è più elevato. Io comunque è al Pickit2 che farò riferimento durante le lezioni. Tenete conto che ha un ottimo supporto e vengono anche rilasciati aggiornamenti del firmware (si, il Pickit2 è aggiornabile, in maniera semplicissima, come vedremo tra poco). Gli utenti di Linux e Mac purtroppo si dovranno accontentare di un software di programmazione a riga di comando, perchè per tali sistemi operativi la Microchip, almeno per ora, non ha rilasciato software a interfaccia grafica.
Quindi: un programmatore, per poter trasferire i dati sul PICMicro ha bisogno di un software di programmazione.
Solo per utilizzatori del PICKIT2
Se avete acquistato tale programmatore, il software è già incluso nel CD in dotazione, io generalmente non installo mai i software forniti sul cd perchè potrebbero essere datati. Scarichiamo il software e il firmware del Pickit2 dal sito della Microchip da questa paginaDobbiamo scaricare, in fondo alla pagina, i files denominati come PICkit2 vX.XX Install (scegliere magari la versione con il .NET Framework se non avete installato tale componente aggiuntivo di Windows) e PICKit2 Firmware vX.XX. Il primo è il software di programmazione, il secondo è il firmware da caricare sul programmatore.
Lanciamo il setup del PICKit2 (l’ultima versione al momento in cui scrivo è la 2.61). A fine installazione colleghiamo il PICKit2 alla porta USB e lanciamo il programma PICKit2. Dobbiamo caricare il firmware sul programmatore: si tratta del file PK2V023200.hex contenuto nel secondo file zip che avete scaricato prima.
Piccola nota: mentre fate l’operazione di scrittura del firmware (FLASH in gergo), non staccate la porta USB, sarebbe anche meglio avere un gruppo di continuità in caso andasse via la corrente.
Dal Menù “Tools” selezioniamo “Download PICKit2 Operating System”:
selezioniamo il file PK2V023200.hex, diamo l’OK, Il PICKit2 verrà flashato con l’ultima versione del sistema operativo. Nella finestra dei messaggi appare la scritta “Downloading New PICKit Operating system” e si accende il led “Busy” sull’unità, la barra di progressione avanza, viene quindi fatta una verifica e infine il PICKit ed è pronto per funzionare:
Tale operazione verrà fatta allo stesso modo ogniqualvolta sarà disponibile sul sito della Microchip un aggiornamento del firmware. In caso di problemi durante l’aggiornamento del firmware rivolgetevi al rivenditore del PICKit2 o alla Microchip. Quando viene aggiornato il firmware, dovrà essere aggiornato anche il software di programmazione e viceversa, difatti software di programmazione e firmware procedono insieme: sul forum della Microchip spesso gli utenti del PICKit2 rilasciano una “lista dei desideri (wishlist)” delle funzioni che vorrebbero vedere implementate sul loro programmatore. Altra nota molto interessante è che la Microchip rilascia i codici sorgente sia del firmware che del software di programmazione (scritto in vb.net).
Per i programmatori su parallela e seriale i software generalmente più utilizzati sono ICProg e EpicWin, fate riferimento ai siti ufficiali e ai vari forum di elettronica per capire come usare tali software. Ripeto: qui descriverò unicamente l’utilizzo del PICKit2 e del suo software.
Circuito di base
Passiamo ora a vedere come deve essere composto un circuito di base che permette l’utilizzo dei PICMicro (in questa sede mi riferirò sempre al PIC16F877 anche se in generale le regole sono valide un po’ per tutti i PICMicro)
In questo circuito di base dobbiamo focalizzare l’attenzione su 3 zone:
Alimentazione

I PICMicro funzionano alla tensione standard tipica degli integrati TTL: 5V (ci sono anche quelli in grado di funzionare a tensioni molto inferiori, ma la tensione standard è questa). I 5 volt devono giungere al PICMicro stabilizzati, quindi forniti da un regolatore di tensione di tipo 7805 o simili.
Molti nelle loro applicazioni, soprattutto di robotica, preferiscono avere a bordo della scheda dei regolatori a basso drop-out, anche detti regolatori LDO (tipo l’ LM2940CT-5.0). Cosa significa? Un regolatore di tipo 7805 può accettare in ingresso una tensione minima di 7/8 volts (generalmente la tensione minima di ingresso dei normali regolatori 78XX è pari alla tensione di regolazione + 2÷3 volts, con tensioni più basse non viene garantita la stabilità e il funzionamento), il che significa, ad esempio, che già non possiamo alimentare il tutto con una batteria a 6 volts. I regolatori a basso drop-out permettono invece tensioni in ingresso molto basse, prossime alla tensione di regolazione (generalmente 0,5÷1 volt + tensione nominale) (ovvio che se il regolatore è da 5V e voi in ingresso ce ne mettete 4, non funziona!). Tali regolatori, soprattutto quando si realizzano circuiti destinati a funzionare con batterie, permettono un’autonomia maggiore, ma costano di più e sono più difficili da trovare. Ripeto: tale scelta viene fatta soltanto in applicazioni particolari (robot con batterie piccole). A noi basterà un alimentatore stabilizzato.
I 5Volt vanno portati ai pin 11 e 32 (indicati come Vdd, alcuni li indicano come Vcc) e i pin 12 e 31 (Vss o GND) vanno a massa. Come vedete c’è un piccolo condensatore sull’alimentazione (C1), tale condensatore va messo il più vicino possibile ai pin 11/12 o 32/31 e serve a filtrare verso massa eventuali disturbi sulla linea dell’alimentazione, va bene un condensatore in poliestere da 100nF (0.1µF).
Il PIC 16F877 come vedete ha i pin di alimentazione sdoppiati (cioè ci sono 2 Vdd e 2 Vss), collegateli sempre insieme, se è stato creato così, un motivo ci sarà e probabilmente sta nell’elevato consumo di corrente con tutte le periferiche interne accese. Ovviamente non tutti i PICMicro hanno i pin di alimentazione sdoppiati, il 16F876 ad esempio ha UN Vdd e 2 Vss, la maggior parte invece ha solo UN Vdd e UN Vss. Vi basta sapere soltanto che tutti i Vdd vanno all’alimentazione (positiva) e tutti i Vss vanno a massa.
Oscillatore (Clock)

I microcontrollori hanno bisogno di una sorgente di clock, ovvero di un circuito che genera un’onda quadra a frequenza costante. Questo serve alla circuiteria interna del picmicro per scandire a tempo le operazioni e far funzionare i timers. Tutti i dispositivi digitali che eseguono operazioni hanno bisogno di un clock. I PICMicro possono funzionare con una grande varietà di sorgenti di clock: molti hanno un oscillatore interno (come il PIC16F628), che permette addirittura di risparmiare 2 pin (quelli destinati all’oscillatore esterno) che potranno essere utilizzati per altri scopi e semplificano la realizzazione del circuito: il clock è interno al PIC, non ci dobbiamo preoccupare di crearlo all’esterno e i 2 pin che servono per il clock li possiamo utilizzare per fare altro!
L’oscillatore interno però generalmente non è stabile quanto un quarzo esterno e non andrebbe utilizzato in applicazioni che richiedono grande precisione. Sui PICMicro tale modalità di clock viene generalmente speficata con la sigla INTOSC (INTernal OSCillator) e prevede una frequenza standard non modificabile (ad esempio 4MHz sul 16F628).
La presenza di un oscillatore interno è molto comoda ad esempio quando si devono realizzare circuiti piccolissimi e che devono avere un bassissimo consumo: un telecomando ad esempio, alimentato con una piccola batteria, in tali casi le scelte vanno sicuramente sui pic della serie 12F (quelli ad 8 pin) e non tutti, ma quelli che possono anche funzionare a tensioni molto basse (il 12F675 ad esempio che ha un oscillatore interno da 4MHz calibrato al ±1% e una tensione minima di funzionamento pari a soli 2V). Il 16F877 da noi utilizzato non ha l’oscillatore interno, quindi non ci occuperemo di questa modalità.
L’oscillatore esterno è sicuramente più utilizzato, si tratta in pratica di realizzare un piccolo circuitino che genera il clock. La configurazione classica per un oscillatore esterno è quella disegnata nello schema: un quarzo (Q1) con in serie due condensatori (C2 e C3) che vanno verso massa e i terminali del quarzo sui pin Clock IN e Clock OUT del PICMicro.
Ci sono varie modalità di funzionamento per un oscillatore esterno al quarzo fatto in questo modo. Tali modalità vengono indicate dalla Microchip con le sigle LP, XT e HS. LP sta per “Low Power” e questa modalità prevede l’utilizzo di un quarzo a bassa frequenza. Il termine Low Power vuole sottolineare il fatto che tale oscillatore ha un basso consumo di corrente (di contro abbiamo una bassissima velocità di esecuzione delle operazioni e non ci possiamo permettere di realizzare cose troppo complicate). XT sta per XTal (abbreviazione di Crystal=Cristallo, il quarzo è difatti un cristallo!) e si utilizza per avere un buon compromesso tra velocità di esecuzione e consumi, prevede l’utilizzo di quarzi con un range di frequenze intermedio. Infine HS sta per High Speed (alta velocità) e prevede l’uso di quarzi ad alta frequenza (e quindi una maggiore frequenza di clock che porta a tempi di esecuzione delle istruzioni più bassi). La modalità HS porta naturalmente anche ad un maggior consumo, ma ci permette di realizzare cose più complesse perchè la cpu esegue i calcoli molto più velocemente. Ogni PICMicro ha queste modalità di funzionamento e il suo range di frequenze di quarzi per le varie modalità, dovremo sempre fare riferimento al Datasheet del componente in nostro possesso per vedere come operare e quali componenti utilizzare. Il datasheet del 16F877 è scaricabile in fondo all’articolo, e qui c’è un estratto che indica per ogni modalità quali quarzi e condensatori utilizzare per avere il giusto clock:

Per i nostri tutorial, sul PIC16F877, utilizzeremo la modalità HS con un quarzo da 20MHz (che è la massima frequenza di funzionamento per il 16F877). Dalla tabella potete vedere che con un quarzo da 20MHz si possono utilizzare come C2 e C3 valori da 15 a 33pF, generalmente ci si piazza sempre su un valore intermedio per cui 22pF vanno benissimo. Perchè ci si piazza su un valore intermedio? Perchè a pagina 146, sotto questa tabella, è chiaramente specificato che valori più alti del condensatore portano ad una maggiore stabilità ma richiedono un tempo di assestamento maggiore, quindi un valore di mezzo per noi è più che sufficiente.
Altra modalità di clock è la RC esterna: si può difatti generare un clock utilizzando semplicemente una resistenza e un condensatore come illustrato sempre a pagina 146:

Se proprio ci tenete ad utilizzare questa modalità (che come detto sopra: non garantisce una temporizzazione costante) per i valori potete fare riferimento a quanto indicato sul datasheet. In questo modo si utilizzerà soltanto il pin 13 (Clock IN), e dal pin 14 (Clock OUT) uscirà un’onda quadra pari alla frequenza di oscillazione divisa per 4.
La scelta del tipo di clock (se INTOSC, oppure LP,XT,HS o RC) andrà inoltre comunicata al PICMicro quando andremo a scrivere il programma (oppure se tralasciamo di scriverlo nel programma, dobbiamo impostarlo sul software di programmazione, ma questa è una soluzione che non preferisco perchè a volte ci si dimentica, causando malfunzionamenti). Ogni PICMicro ha difatti un registro di configurazione (quelli della serie 18F ne hanno più d’uno!) nel quale si andranno a settare vari parametri di funzionamento generale: la scelta del tipo di oscillatore è uno di questi. I vari parametri che costituiscono il registro di configurazione (chiamato anche Configuration Word – Parola di configurazione) prendono il nome di FUSES (fusibili, non chiedetemi il perchè di questa scelta del nome!), il registro di configurazione del 16F877 è descritto a pagina 144 del suo datasheet, ci occuperemo in altre lezioni di come va impostato.
Circuito di reset

Tutti i PICMicro presentano sempre (oltre ovviamente ai pin di alimentazione, ai 2 pin per il Clock e ai 2 pin di programmazione) un pin chiamato MCLR (Master CLeaR). La funzione, anzi le funzioni di questo pin sono importantissime. Quando tale pin viene portato a 13.5Volt, il PICMicro capisce che deve entrare in modalità di programmazione (ecco perchè il JDM non riesce a programmare quasi nessun tipo di PIC!), per cui si prepara a ricevere i dati di programmazione sul pin denominato PGD (Program Data) e il clock di programmazione sul pin PGC (Program Clock). Quando MCLR viene messo a 5 volt (o tensione di funzionamento del PICMicro), il PICMicro capisce che deve portarsi in modalità di esecuzione programma (e quindi i pin PGD e PGC non hanno più funzione di programmazione). Infine quando MCLR viene portato a massa (0Volt), il PICMicro si mette in modalità RESET: termina l’esecuzione del programma e il microcontrollore rimane in standby fino a quando MCLR non viene portato nuovamente a 5Volt: quando questo accade, il programma ricomincia daccapo. Per tale motivo su tutti i circuiti di base per lo sviluppo è generalmente previsto un pulsante che “tira a massa” MCLR (denominato RESET sul nostro schema, va bene un normale pulsantino normalmente aperto da circuito stampato) e che ha quindi la funzione di resettare il pic e fargli ricominciare l’esecuzione del programma dall’inizio. Normalmente tale pin viene portato a 5 volt tramite una resistenza (R1 sullo schema. Tale resistenza viene anche chiamata resistenza di Pull-Up. Pull Up vuol dire: tirare verso l’alto, difatti tale resistenza porta il pin a potenziale alto, ovvero a 5 Volt). Per R1 usiamo un valore di 10KΩ. La funzione del diodo D1 (va bene un normale 1N4148) in serie alla resistenza è presto detta: se predisponiamo il circuito con un connettore ICSP (per permettere la programmazione del PIC direttamente sulla scheda di utilizzo), quando il PIC verrà programmato, su tale pin arriveranno 13.5 Volt e il diodo ha il compito importantissimo di bloccare tale tensione per non farla andare sulla linea di alimentazione a 5Volt, se ciò accadesse, oltre al PIC andrebbe in fumo anche il programmatore e altro! (Questo è probabilmente uno dei motivi per i quali è stata introdotta la programmazione a basso voltaggio: LVP Low Voltage Programming, di cui però non ci occuperemo in questa sede).
Sul nostro schema è inoltre previsto il connettore ICSP che ci permetterà di programmare il nostro PIC16F877 senza continuamente staccarlo e ricollegarlo allo zoccolo (io sono sempre di una sana, vecchia opinione: le cose quanto più vengono “smosse”, meno durano!).

Nello schema, per il connettore di programmazione (generalmente chiamato HEADER, anche se la Microchip con il termine Header identifica un connettore utilizzato sia per programmazione che per debug), viene seguita la stessa disposizione del PICKit2 (il pin AUX di tale programmatore non viene utilizzato per queste applicazioni). Se utilizzate un programmatore differente o uno di vostra invenzione/realizzazione, rispettate la disposizione dei pin! Ovviamente il fatto che i pin PGD e PGC siano connessi al connettore di programmazione non vi vieta di utilizzarli anche per le normali operazioni di I/O, che possono essere messe in parallelo.
Una scheda base del genere è di facile realizzazione: farla su una basetta millefori, per chi ha un minimo di esperienza, è un gioco da ragazzi. Poi ovviamente possiamo anche acquistare le schede di sviluppo, vendute un po’ dovunque, questa ad esempio ha anche una sezione per la comunicazione RS232 (anche la Microchip vende le sue). Personalmente il tutorial lo illustrerò utilizzando una scheda denominata “Freedom“, realizzata da Mauro Laurenti e ordinabile (previa offerta di supporto) sul suo sito.

Aggiornamento: Mauro Laurenti ha rilasciato la seconda versione del suo sistema di sviluppo: Freedom2, tale sistema di sviluppo, rispetto al precedente, è molto più ricco di periferiche e integra sulla scheda anche led, pulsanti, lcd ecc, che sono utilissimi per fare prove senza doverli collegare all’esterno.
Ne approfitto ancora una volta in questa sede per ringraziarlo e complimentarmi dell’ottimo lavoro svolto.
Il connettore ICSP presente sulla scheda Freedom non segue la piedinatura del PICKit2,(questo non vale per la scheda Freedom2, la quale ha il connettore standard ICSP), quindi in tal caso dovrete realizzarvi un adattatore, qui c’è un diagramma che illustra la disposizione dei pin del PICKit2 e della scheda Freedom, per realizzare un adattatore potete utilizzare i classici strip di contatti da stampato ai quali salderete una piattina:
Per sapere come vanno collegato il PICKit2 ai vari tipi di PICMicro e alle EEPROM, potrebbe esservi utile questo nostro articolo : adattatore multizoccolo per pickit2.
Tale scheda non è un prodotto commerciale e presenta molte utili predisposizioni che ci permettono di realizzare tante applicazioni senza perdite di tempo, nonchè i connettori separati per ogni gruppo di porte, ma… cosa sono le porte?
Le porte dei PIC
Le porte di un PICMicro, a livello fisico, sono i pin di ingresso/uscita (I/O) del microcontrollore, a livello software invece sono i registri che comandano/leggono lo stato dei pin di I/O. Le porte vengono suddivise in gruppi, rappresentati con lettere (abbiamo le porte A, le porte B ecc. in dipendenza dal PICMicro, sui PIC a 8 pin invece si utilizza una denominazione differente: si chiamano General Purpose – GP, ma la sostanza non cambia assolutamente). Diamo un occhio alla pagina 3 del datasheet del pic16F877:

Voglio chiarire innanzitutto una cosa che sembra stupida ma è molto importante per chi è alle prime armi: un singolo microcontrollore può essere commercializzato in vari formati, i microcontrollori utilizzati a livello hobbystico sono quelli nel formato chiamato PDIP (per il pic16F877: 40 pin disposti su due file da 20) e generalmente presentano una lettera P alla fine della sigla (Esempio: PIC16F877A I/P , la I indica il range di temperatura e la P il formato PDIP, come indicato a pag. 231 del datasheet). Chiarisco questo perchè ho notato come alcuni ragazzi, tramite siti che vendono componenti elettronici online, ordinano i pezzi senza accorgersi che un singolo microcontrollore viene venduto in formati differenti e così si vedono recapitare a casa microcontrollori che non potranno mai utilizzare. Abbiate buon occhio e chiedetevi perchè in uno stesso catalogo ci sono due componenti con la stessa sigla!
Stampiamoci la pagina 3 del datasheet e teniamola sempre sott’occhio! Sul PIC16F877 abbiamo 6 porte A (pins 2-7, indicati come RA0-RA5), 8 porte B (pins 33-40: RB0-RB7), 8 porte C (pins 15-18 e 23-26 : RC0-RC7), 8 porte D (pins 19-20 , 21-22 e 27-30: RD0-RD7) e 3 porte E (pins 8-10: RE0-RE2), per un totale di ben 33 porte di I/O , che non è da poco per un microcontrollore che costa sugli 8/9 euro.
Come potete notare ogni pin ha più di una sigla: a parte la sigla standard (lettera R seguita dalla lettera che identifica il gruppo di porte e quindi il numero progressivo), segue una sigla che ci aiuta a capire (vedremo poi col tempo!) quali sono le altre funzioni che può avere questo pin a parte quella standard di I/O.
Ogni porta ha sempre la funzione standard di I/O: tramite il software che andremo a caricare sul PICMicro, possiamo dire ad esempio se la porta RA0 deve essere configurata per inviare un segnale all’esterno (Output) oppure per ricevere un segnale (Input). Difatti il funzionamento I/O di tutte le porte è comandato da appositi registri (un registro è una particolare locazione di memoria del dispositivo, dedicata a funzioni specifiche, come quella, ad esempio, di stabilire appunto i pin come devono funzionare), chiamati registri TRISTATO che permettono di dire al PICMicro come deve configurare un determinato PIN (se come uscita o se come ingresso).
A questo punto può esservi utile la definizione di “three state” su wikipedia: http://it.wikipedia.org/wiki/Three_state
In pratica un pin può trovarsi normalmente in 2 stati logici: livello basso e livello alto. Il 3° stato consiste in un livello logico indeterminato, che viene definito alta impedenza (Hi Z). Quando il pin si trova in uno stato di alta impedenza può “leggere” uno stato logico proveniente dall’esterno: in pratica il pin che si trova in alta impedenza, ovvero non ha un livello logico, assumerà il livello logico che gli viene imposto dall’esterno. Per tale motivo quando il pin viene settato come ingresso (perchè deve “leggere” dall’esterno), esso va in alta impedenza. Gli altri due stati (livello logico alto o basso) si ottengono semplicemente impostando il pin come uscita (nel registro TRISx) e selezionando quindi il livello di uscita del pin (nel registro PORTx).
I registri tristato vengono indicati con la sigla TRIS seguita dalla lettera del gruppo di porte: TRISA, TRISB ecc, vedremo in seguito come funzionano a livello di programmazione).
Un pin speciale, inoltre, può anche essere configurato per non avere più la classica funzione di I/O ma piuttosto per avere un’altra funzione (e questo si fa utilizzando altri registri appositi, in questo caso il settaggio dei registri tristato viene generalmente bypassato anche se non sempre è così, soprattutto sui pic vecchi): ecco perchè RA0 (pin 2) ha anche la denominazione AN0: questo pin può difatti funzionare o come normale pin di I/O (RA0) oppure come pin di acquisizione di un segnale ANalogico (AN0) (il pic16F877 ha difatti a bordo una periferica interessantissima: un convertitore Analogico/Digitale a 10bit, che può avere fino a 8 canali, gli 8 canali analogici sono i pin contrassegnati anche con le sigle AN, notate come le porte analogiche non fanno tutte parte di uno stesso gruppo di porte ma sono invece distribuite sul alcune porte A e sulle porte E. In particolare la porta RA4, pin 6, non può avere la funzione analogica anche se tutte le altre porte A possono averla).
In questo caso si dice che il pin è multiplexato con un’altra funzione.
Altri potrebbero ancora chiedere: perchè su quell’immagine è riportato PIC16F874A/877A ? Semplice: perchè quel pinout (ovvero la disposizione dei pin, con le relative denominazioni) vale sia per il PIC16F874A che per il PIC16F877A (ovvero: sono pin to pin compatibili. Questi sono due chip molto simili, la differenza tra l’uno e l’altro è illustrata a pagina 5 del datasheet). Fate domande! Siate curiosi, chiedetevi perchè, percome! E’ questa la via da seguire per capire perfettamente il funzionamento di qualsiasi cosa!
Ovviamente se un pin viene configurato per avere una funzione speciale, non potrà più essere utilizzato come Input, se viene configurato come Input, non può essere utilizzato come Output. Impareremo di volta in volta a utilizzare le varie funzioni che un pin può avere, per cui ecco perchè ho detto stampatevi pagina 3 e tenetela sott’occhio: vi aiuta a capire come vanno interpretate le sigle dei pin, vi aiuta a capire come sono disposti i pin. Ma non è solo la pagina 3 ad essere importante! LO SONO TUTTE senza nessuna distinzione! Un datasheet è la parte più importante di un componente elettronico: non potete mai assolutamente pensare di sviluppare una qualsiasi applicazione elettronica se non avete a portata di mano il datasheet dei componenti che utilizzate! Tenete conto che ogni azienda sviluppa prima il datasheet e poi in base ad esso realizza il componente.
Altri documenti molto importanti sono le Application Note che illustrano come utilizzare varie famiglie di componenti e come realizzare delle applicazioni. In fondo all’articolo è possibile scaricare il manuale della Microchip con le informazioni da sapere quando si programma una MCU della famiglia Mid-Range (il 16F877 rientra in tale famiglia).
Appuntamento alla prossima lezione, in cui vedremo come realizzare il primo programma in C, compilarlo, caricarlo sul PICMicro e vederlo in funzione!
Lasciate commenti, mi raccomando.
Downloads
Datasheet PIC16F877 e PIC16F876 (1530)Datasheet regolatore di tensione 7805 (649)
Datasheet regolatore di tensione a basso dropout LM2940 (510)
PIC Mid-Range MCU Family Reference Manual (1195)
» Vai all’ indice delle lezioni e delle risorse del corso di programmazione
Articoli che potrebbero interessarti
Se desiderate che settorezero continui a rimanere gratuito e fruibile da tutti, non copiate il nostro materiale e segnalateci se qualcuno lo fa

Questo sito e tutto il suo contenuto sono distribuiti sotto la licenza 









#1 da gioggi2002 il 23 luglio 2009
Grandi articoli, complimenti!
Aspetto con ansia la prossima lezione… :)
#2 da Ionela il 19 ottobre 2009
Ottima lezione sui microcontrollori! Complimenti!
Voglio arricchire questo articolo, mettendo un link ad una raccolta di articoli sui microcontrollori:
http://it.emcelettronica.com/microcontrollori
Grazie e complimenti ancora!
#3 da Gianni il 19 ottobre 2009
Ciao e grazie,
in effetti in quel link ci sono alcuni articoli che parlano anche di microprocessori, che secondo me andrebbero messi in una categoria a parte, giusto per non confondere gli utenti alle prime armi. Per il resto è interessante e “vasto”, dal momento che da una panoramica su un po tutti i tipi di microcontrollori.
#4 da maverik46 il 18 gennaio 2010
Ciao Giovanni, volevo un chiarimento: quando installo MPLAB posso scegliere automaticamente durante l’installazione se usare hi-tech o C18 oppure C18 me lo devo scaricare a parte ? oppure ci sono due versioni di MPLAB ,una con hi-tech, e una con C18 ? quale dei due compilatori in versione student ( free ) ha piu’ limitazioni ?
#5 da Giovanni Bernardo il 18 gennaio 2010
MPLAB lo devi installare sempre e comunque in ogni caso. Nella versione di MPLAB è incluso Hitec-C versione Lite o versione demo 30 giorni, la prima ha un limite per scrivere programmi (massimo 2000h word di programma), la seconda è full ma dura solo 30 giorni dopodichè non è piu possibile utilizzarlo. Nell’installazione di MPLAB non è incluso MPLAB C18 che va scaricato a parte.
MPLAB C18 richiede MPLAB per funzionare. MPLAB C18 lo puoi scaricare da questa pagina: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014&redirects=c18
Le versioni accademiche si trovano a questo link:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en536656
ed è richiesta la registrazione per poterle scaricare. La versione accademica è comunque una versione Lite e ha dei limiti, che però non so in cosa consistono, di sicuro non c’è l’ottimizzazione completa del codice.
Col C18 ci puoi scrivere programmi per le famiglie dei pic a partire dalla 18 in su, quindi non puoi scrivere programmi per i pic16 e i pic12. Col C normale dovresti poter scrivere programmi anche per i C18 ma non sfrutti tutte le potenzialità di questi dispositivi, che hanno un set di istruzioni più esteso nonchè altre caratteristiche. Per usare i pic18 si deve programmare in C18 altrimenti non serve a nulla. Mauro ha scritto un ottimo tutorial sul C18 che puoi scaricare qui : http://www.laurtec.com/Italiano/Tutorial/C18%20step%20by%20step/Tutorial.html
#6 da Nicola il 12 aprile 2010
Salve,
volevo un chiarimento sul circuito di base. In fase di programmazione i +5V generati dalla sezione di alimentazione del mio circuito devono essere scollegati dal circuito e utilizzare solo i +5 V provenienti dal connettore ICSP ? Qesta linea del connettore la posso sempre lasciare collegata ai pin 32 e 11 ? Il mio dubbio in poche parole è come devo gestire l’alimentazione tra quella portata dal programmatore e quella generata dal mio circuito alimentatore. Credo che inserire dei jumper alla fine sia la soluzione migliore. Si potrebbe avere uno schematico che ad esempio impiega dei jumper per selezionare chi porta i +5V?
Grazie
#7 da Giovanni Bernardo il 12 aprile 2010
Non dovrebbe accadere nulla. Personalmente o alimento direttamente col pickit oppure quando devo programmare stacco l’alimentatore esterno. Se proprio avete bisogno di un jumper non è necessario che vi disegno uno schema: utilizzate uno strip maschio a 3 poli, il polo centrale porta l’alimentazione al circuito del pic, ad un polo esterno arriva un’alimentazione e all’altro polo esterno l’altra alimentazione, il jumper collega il primo polo col centrale o il centrale col secondo polo.
#8 da Nicola il 13 aprile 2010
Grazie mille per il chiarimento. A presto
#9 da Giovanni Bernardo il 13 aprile 2010
Oggi ho provato a tenere attivi sia il pickit che l’alimentazione esterna, non accade nulla, esce soltanto una finestra che indica appunto che il pickit ha rilevato un’alimentazione esterna, per cui lui non fornisce la sua.
#10 da Nicola il 13 aprile 2010
Grazie per l’informazione. In effetti se così non fosse avremo due sorgenti di alimentazione connesse insieme, quella del programmatore e quella del circuito che può essere dannosa al programmatore (almeno credo)
#11 da gianluca79 il 13 aprile 2010
grazieeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
sono felicissimo di leggere una guida chiara e piena di informazioni!!!
GRAZIEEEEEEEEEEEEEEEEEEEEE!!!!!!!!!!!!!!!!!!!!!!!! :-)
#12 da s.yari il 20 aprile 2010
salve, ho installato MPLAB 8.50 su ms seven e ho dei problemi di stabilità; gli stessi si presentano anche con la versione 8.46 e 8.36…nello specifico quando clicco con il tasto sx sulla finestra “untitled workspace” scompaiono le icone della barra strumenti in alto, che riappaiono se poi ci passo sopra col puntatore, inoltre dietro la finestra in questione compare un rettangolo grigio che viene magicamente cancellato muovendoci sopra la finestra (sembra l’effetto gomma da cancellare di paint). Sai darmi una soluzione?grazie
#13 da Giovanni Bernardo il 20 aprile 2010
A me questo sembra più un problema di grafica che non un problema di MPlab. Magari installando i driver aggiornati della scheda video si risolve il problema. Per il resto non so dirti. Sul sito della Microchip non menziona windows 7 ma soltanto che MPlab ide è compatibile con tutti i sistemi windows a 32 bit… per cui se hai il SO a 64 bit non dovrebbe funzionare. Per questa informazione devi comunque chiedere lumi sul forum della Microchip http://www.microchip.com/forums/Default.aspx?
#14 da Giovanni Bernardo il 20 aprile 2010
Ho appena scaricato le release notes di MPlab 8.50 e c’è scritto:
Quindi questo conferma che non è un problema di MPlab in quanto è stato testato sotto windows 7
#15 da s.yari il 23 aprile 2010
sul forum microchip un utente ha avuto il mio stesso problema, risolto poi installando la versione 4.5. Comunque proverò ad aggiornare i driver come consigliato.
Grazie
#16 da Giovanni Bernardo il 23 aprile 2010
La versione 4.5 ?!? Metti il link alla pagina della discussione sul forum.
#17 da s.yari il 24 aprile 2010
http://www.microchip.com/forums/tm.aspx?m=492874
Il problema è identico al mio; non sono però riuscito a mettere in pratica il consiglio suggerito, cioè quello di “sganciare le finestre” .
#18 da Giovanni Bernardo il 24 aprile 2010
Puoi mettere il link alla discussione?
#19 da s.yari il 24 aprile 2010
credevo di averlo messo:
http://www.microchip.com/forums/tm.aspx?m=492874
#20 da Giovanni Bernardo il 24 aprile 2010
mmmm… dice di aver risolto installando la versione 4.5 …. ma è assurdo… comunque se sganci le finestre si risolve?
#21 da s.yari il 25 aprile 2010
non so quale procedura seguire; con il tasto destro sulle finestre non ho niente che mi faccia “sganciare”, ne tantomeno con l’help.
#22 da Giovanni Bernardo il 25 aprile 2010
Le barre si sganciano come su tutti gli altri software: si va col puntatore sulla parte sinistra, dove è disegnata una linea verticale, si tiene premuto e si trascina, in questo momento la barra fa un bordino nero intorno e la si può mettere in qualsiasi posizione, rilasciando il pulsante del mouse assume l’aspetto di una piccola finestra con il tasto X per la chiusura in alto a destra.
#23 da s.yari il 25 aprile 2010
ho reinstallato tutto di nuovo, per ora sembra che vada tutto bene; alle brutte lo tengo così, anche perchè sembra un problema tutto mio.
Grazie per i consigli comunque.
#24 da Nino il 10 giugno 2010
Ciao giovanni, sto cercando, invano, di installare MPLAB 8.50 ma niente, quando lancio il setup.exe, dopo aver acconsentito, compare una finestra di InstallShield che dice : C:\Users\… …\Tools v8.50.msi not found. Ho provato anche con altre versioni ma sempre lo stesso messaggio. Cosa sto sbagliando?! (NB.Utilizzo vista)
#25 da Giovanni Bernardo il 10 giugno 2010
Lancia l’installer come amministratore
#26 da Nino il 10 giugno 2010
Grandeeeeeeeeeee!!! adesso funziona tutto perfettamente. Grazie per la dritta.
#27 da Cristiano il 20 giugno 2010
Grande! Bellissimi articoli complimenti!!
#28 da Cristiano il 20 giugno 2010
Giovanni ho intenzione di costruirmi il clone del Propic2 ! Una volta finito, quando lo collegherò alla parallela Windows (Xp) mi avviserà? Sarà gia pronto per interagire con MPLAB? Come microchip va bene questo? Chiedo che non si sa mai!
DI NUOVO COMPLIMENTI MOLTO MOLTO IN GAMBA!
#29 da Giovanni Bernardo il 20 giugno 2010
Solo l’USB ha l’autoriconoscimento. MPLAB supporta solo i programmatori della Microchip. Con i programmatori su parallela incontrerai parecchi ostacoli. Se sei uno che non demorde e ha tanta pazienza, allora procedi pure ma tieni conto che il pickit2 con circa 30/35 euro te lo porti a casa e non hai nessun tipo di problema: ci puoi programmare tutti i pic e le memorie ed è supportato da mplab. Oramai l’utilizzo dei programmatori su parallela è sconsigliato da tutti: i software non vengono più aggiornati da un pezzo e danno solo grattacapi. Alla fine, considerato il tempo che ci perderai, vale più la pena acquistare il pickit2. Te lo dico per esperienza perchè pure io ci ho perso giornate intere a capire perchè un pic veniva programmato correttamente e l’altro no.
#30 da Cristianoscr il 21 giugno 2010
Capisco, solo che vorrei fare qualcosa di autocostruito, proprio per soddisfazione personale…(credo tu capisca cosa intendo).
Opterò per una freedom2? Mi dica lei capo.
#31 da Giovanni Bernardo il 22 giugno 2010
Va bene pure una scheda autocostruita sicuramente. Il problema è che il più delle volte ci si scoccia a farsi una scheda coi pulsanti, una scheda coi led, una per l’lcd ecc. Il vantaggio offerto dalla freedom II è evidente, hai tutto a portata di mano senza metterti ogni volta ad attaccare e staccare altre schede, e poi sei sicuro che se c’è qualche malfunzionamento è solo da imputare al codice e non alla scheda. La scelta deve essere personale. Io dopo tante schede autocostruite, con la freedom mi sono trovato in maniera egregia e non tornerei mai indietro.
#32 da al-tabar il 4 agosto 2010
ciao,
intanto complimenti per il sito… una vera manna..
pensi che come programmatore possa andare bene questo?
http://openprog.altervista.org/OP_ita.html
sarebbe molto comodo realizzarlo con la USB…
#33 da Giovanni Bernardo il 5 agosto 2010
Dicono che è buono e prima o poi me lo faccio pure io per sfizio. L’unico problema è che ci vuole un pic già programmato, per cui se non hai già un programmatore per pic o se non hai nessuno che puo farlo per te… non lo puoi realizzare.
#34 da al-tabar il 5 agosto 2010
credo proprio che li realizzerò tutti e due!
ciao e buon lavoro
#35 da Ali2000 il 15 agosto 2010
Ciao, capisco che la funzione tri-state di una porta possa generare confusione ma definirla: “(Tristato perchè ogni pin può essere impostato su 3 stati: ingresso, uscita alta +5V, o uscita bassa, 0V.)”
No, no, no!
Tri-state perche’ il pin in questione puo’ assumere la funzione di uscita(alta o bassa che sia quindi di 1 o 0 logico) o ingresso(alto o basso che sia quindi 1 o zero logico) oppure di alta impedenza(ovvero ininfluente sul bus condiviso su cui e’ fisicamente collegato)
riassumendo un piedino tri-state puo’ funzionare come :
- Ingresso
- Uscita
- Alta Impedenza
da qui la definizione di tri-state.
:)
#36 da Giovanni Bernardo il 15 agosto 2010
Hai perfettamente ragione ma non sapevo come fare per farlo capire bene dal momento che in molti non comprendono il concetto di alta impedenza… Cercherò di correggere
#37 da Ali2000 il 15 agosto 2010
Ciao, bel lavoro
:)
#38 da Marco il 18 agosto 2010
Solo ora ho scoperto questo sito e devo assolutamente farti i complimenti per questo tutorial.
Per ora sono alla terza lezione ma presto leggerò le altre.
Ciao
#39 da Andrews il 18 settembre 2010
Il pickit2 è in grado di leggere e scrivere su eeprom della serie 24LC02??
#40 da Giovanni Bernardo il 18 settembre 2010
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en027813
pare proprio di si!
#41 da fitomasterman il 19 ottobre 2010
muy buen curso de c!!
#42 da Vito1984 il 2 novembre 2010
Ciao Gianni,
complimenti x l’ottimo lavoro.
Ho una domanda:
a proposito della precisazione di ali2000, posso dunque impostare il pin (x esempio RB0) in modalità alta impedenza?
Grazie
Ciao
#43 da Giovanni Bernardo il 2 novembre 2010
Li in effetti c’è un errore. Quando imposti un pic come ingresso, esso va in alta impedenza. Ingresso=alta impedenza. Purtroppo c’è un po di confusione su queste cose.
Leggiti il link: http://it.wikipedia.org/wiki/Three_state
La condizione tristate è determinata dal fatto che un pin puo trovarsi a 1 (+5V), a 0 (GND) oppure in uno stato “appeso” in cui la condizione logica non è né zero né 1, l’alta impedenza appunto. Quando imposti il pin in ingresso, esso va in alta impedenza, ovvero non si trova a nessun livello logico, il suo livello logico verrà assunto in base al dispositivo ad esso collegato che lo porterà a zero o a 1. Il pic mette il pin in alta impedenza perchè deve leggere un livello dall’esterno.. non so se sono stato chiaro.
#44 da Giovanni Bernardo il 2 novembre 2010
Ho aggiornato l’articolo scrivendo alcune precisazioni su questo fatto. Se leggete pure l’articolo di wikipedia e comprendete bene il funzionamento dei registri TRIS e PORT dovrebbe essere tutto abbastanza chiaro.
TRISB1=0 ; => pin RB1 come uscita
poi seleziono il livello di uscita con il registro port:
PORTB1 =1 => pin RB1 a livello alto
PORTB1 =0 => pin RB1 a livello basso
e questi sono i primi due stati
Se invece:
TRISB1=1; => pin RB1 come ingresso (il pin RB1 va in alta impedenza, 3° stato)
poi leggendo lo stato di PORTB1 posso capire se all’esterno è stato applicato un livello logico alto o basso:
IF (PORTB1 =1) => è stato applicato un livello alto
IF (PORTB1 =0) => è stato applicato un livello basso
penso che piu chiaro di cosi non si può.
#45 da Vito1984 il 2 novembre 2010
Sei stato chiarissimo!
Grazie 1000
Vito
#46 da gippo il 12 novembre 2010
Ciao Giovanni, avrei 2 domande da farti…
La prima riguarda il connettore ICSP per programmare il PIC senza toglierlo dal circuito…
Uso il PIC16F628A e un programmatore JDM su porta seriale…. ok ok, so che è tra i peggiori però x il momento ho questo e cmq programmazione e verifica avvengono con successo (ho anche controllato la presenza dei 13,5V sul VPP/MCLR…
La cosa strana è questa… ho provato a collegare il mio circuito al programmatore utilizzando il connettore ICSP (presente sul programmatore) e seguendo lo schema illustrato in questa lezione collegando ovviamente i rispettivi piedini x il mio PIC e la programmazione non avviene… caso ha voluto che ho tentato la programmazione anche con un led e una resistenza collegati al piedino 12 (RB6/PGC) verso massa e in questa configurazione la programmazione e la verifica avvengono correttamente… :O appena tolgo questo collegamento non va più… potrebbe dipendere dal programmatore oppure è qualcosa che riguarda il PIC?
Seconda domanda più di curiosità… ho notato che se non si disabilita la programmazione a basso voltaggio appena arriva un disturbo sul piedino 10 (RB4/PGM) il PIC si resetta o cmq va in modaletà programmazione (o qualcosa del genere)… nel datasheet ho trovato che per poter utilizzare quel pin come I/O si deve disabilitare la LVP… questo che significa?? che se non riabilito la funzione (ovvero riprogrammo il PIC a tensione normale con i 13,5V su MCLR) il PIC non potrà essere programmato a bassa tensione?? Leggevo in un tuo articolo che se si setta il piedino MCLR come una normale linea di I/O questo non “sente” più i 13,5V e quindi il PIC non si può più programmare se non in modalità LVP… quindi se imposto MCLR come I/O e disabilito la LVP posso buttare il PIC??
Grazie per le risposte… :)
#47 da Giovanni Bernardo il 12 novembre 2010
Risposta al primo quesito… te la devo proprio dare? Sai già a chi darei la colpa.
Risposta al secondo quesito: la programmazione a basso voltaggio prevede che programmi il pic senza fornire i 13.5V su MCLR ma solo fornendone 5, in questo caso, però, è necessario un ulteriore pin, identificato come PGM. Volendo usare la programmazione LVP tale pin non può essere utilizzato come normale I/O perchè viene utilizzato internamente insieme a MCLR per entrare in modalità programmazione. Ecco perchè non disattivando LVP hai quei malfunzionamenti: il pic con LVP attivo si aspetta di trovare su PGM un segnale di programmazione, quindi se arrivano disturbi che lo mandano in modalità programmazione hai comportamenti strani come reset, perdita di dati e guasti vari.
Le altre cose le hai lette molto male perchè non ho scritto affatto che disattivando la funzione MCLR si deve programmare a basso voltaggio. Disattivando MCLR su alcuni pic o con alcuni programmatori potrebbe capitare che non riesci più a riprogrammarli. Per tale motivo il pickit ha una funzione specifica per questo.
Ma ovviamente col JDM…
#48 da gippo il 12 novembre 2010
Si, scusami, ho riletto l’articolo e in effetti avevo capito male io… li parlavi di “Use Vpp First Program Entry”…
Ultimo dubbio (x ora) se disattivo la LVP non posso programmare il pic a basso voltaggio (quindi è una funzione del pic e non del programmatore, l’ho capito adesso)… ora mi chiedo quel è il vantaggio di programmare a basso voltaggio? Cioè, per programmare a basso voltaggio devo cmq staccare il pic dal circuito e metterlo nel programmatore (xchè se non sbaglio il connettore ICSP non ha un pin da collegare a PGM) ma una volta che ho il pic nel programmatore posso anche andarlo a programmare diciamo “normalmente”… perchè usare LVP??
Scusa se le mie domande possono essere ovvie… :)
Grazie
#49 da Giovanni Bernardo il 12 novembre 2010
Il vantaggio del basso voltaggio è quello di utilizzare circuiti a basso voltaggio… Tipo un circuito alimentato da USB senza usare un survoltore… In pratica il circuito del programmatore può essere molto semplice. Il connettore ICSP sei proprio sicuro che non ha un pin per il PGM? Controlla meglio la piedinatura del pickit. Ovviamente avendo il pickit, usare il basso voltaggio non serve a niente.
#50 da Federico il 23 dicembre 2010
Grazie per questo lavoro
ho installato con le vostre inidicazioni la versione MPLAB Tools v8.60 ma alla fine non mi ha chiesto quale versione avviare!
forse hanno reso il tutto gratuito? oppure le sorprese arriveranno dopo le feste?
oppure sono io il distratto!
#51 da Giovanni Bernardo il 23 dicembre 2010
mplab è gratuito… non arrivo a capire cosa volete dire
#52 da Federico il 25 dicembre 2010
ti chiedo scusa
ho saltato un passaggio e avevo fatto partire il programma dall’icona anzichè da Start, programmi,ecc.
comunque un meraviglioso lavoro!
penso che meriti più di un caffè!
#53 da Adriano il 9 gennaio 2011
Un problema.
Uso MPLAB e il compilatore della CCS. Fino ad ora tutto ha funzionato perfettamente. Di recente, quando creo un nuovo progetto, con project wizard, non riesco ad usare l’ICD2 come debugger. Le buiding properties sono vuote e non appare “debug” nella barra degli strumenti. Tutto funziona correttamente se invece costruisco il progetto in assembler.
Ciao e grazie
#54 da Simone Luca il 27 febbraio 2011
Giovanni perdonami la pignoleria, ma da neofita sono ingordo di informazioni e attento ai dettagli; dove parli dei pin sul PIC16F877 le 3 porte E non dovrebbero invece i pins da 8-10 al posto che 8-11?
Gli studi che ho seguito sono interenti a tutt’altre materie ma gli argomenti che tratti sono davvero affascinanti e tecnicamente stimolanti oltre che molto chiari, anche per un ragioniere :)
#55 da Giovanni Bernardo il 27 febbraio 2011
Si hai ragione, è stato un errore di distrazione. Ho corretto.
#56 da slavin89 il 24 marzo 2011
salve a tutti
dopo aver acquistato il pic mi sono accorto di non aver preso il 16f877A bensi di avere il 16f877, questo cosa può comportare? devo fare qualche variazione al programma ?
e altra domanda..dove posso reperire in rete il pickit della microchip?
saluti
#57 da Giovanni Bernardo il 24 marzo 2011
non devi fare alcuna modifica, il modello con la A è più nuovo e ha una diversa organizzazione della memoria interna, in pratica lo programmi più velocemente, quello senza la A la programmazione dura un sacco ma sono uguali in tutto e per tutto. Il pickit lo puoi acquistare su http://www.robot-italy.com
#58 da slavin89 il 25 marzo 2011
ok grazie, ho visto che in rete c’è lo schema del pikit2 della microchip ma quale file devo scaricare dal sito della microchip per programmare il pic18f2550 che gestische il pickit?perchè nell’area download ci sono un sacco di file ma qual’è il programma?..perchè quasi quasi proverei a costruirmelo da solo
#59 da Giovanni Bernardo il 25 marzo 2011
Se devi costruirtelo da solo, tanto vale che compri un clone cinese. E poi l’HEX come lo carichi nel pic? Ci vuole sempre un altro programmatore. Se hai la possibilità di caricare l’hex nel pic e vuoi tentare la via dell’autocostruzione ti conviene di piu costruire l’open programmer.
#60 da Giovanni Bernardo il 25 marzo 2011
Poi, aspetta! Non è che “in rete c’è lo schema del pickit2″. Lo schema del pickit2 lo ha rilasciato la microchip ed è incluso nel manuale del pickit. Non andare dietro alle persone che si fanno belle con il lavoro degli altri, le cose prendile dai siti ufficiali se no poi ti ritrovi con belle sorprese. Come dicevo, se vuoi cimentarti nell’autocostruzione e hai qualcuno che ti programma il pic, puoi provare a realizzare l’open programmer: http://openprog.altervista.org/
Lo hanno costruito in molti e dicono che vada una bomba.
#61 da slavin89 il 25 marzo 2011
l’hex me lo faccio caricare da un mio amico per la prima volta ..ma non riesco a capire se sul sito della microchip è disponibile l’hex del pickit2 o no e nemmeno capisco dov’è l’hex dell’open source sul link che mi hai dato a meno che non sia il firmware..(la mia ignoranza in materia si vede anche da questi piccoli dettagli :)
#62 da Giovanni Bernardo il 25 marzo 2011
L’HEX del pickit è disponibile nella pagina del pickit: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023805
dove sta? sta scritto “pickit2 v.2.61″, nel file c’è pure l’hex. Ma ora c’è anche il pickit3, le differenze? piu supporto nel pickit3, ma il pickit3 non ha il software stand-alone (c’è una versione beta).
Per l’open programmer, mettiti a leggere il testo, tutti i link vengono dati man mano che si legge
#63 da Giacomo il 27 marzo 2011
Ciao . Complimenti , veramente complimenti . È tutto molto comprensibile e spiegato in modo semplice , anche io che sono alle prime armi sono riuscito a capire . Avrei solo una domanda . Nel sito da cui mi fornisco di componenti non è presente proprio quello ma il PIC16F877-20/P. È equivalente ? Scusate se è una domanda stupida magari. Ma come ho già detto sono ancora alle prime armi .
Grazie anticipatamente
#64 da Giovanni Bernardo il 27 marzo 2011
Si va bene lo stesso, manca la “A” finale il che vuol dire che il tuo pic ci metterà un bel po di tempo in più durante la fase di programmazione. Comunque è strano che un negozio online abbia ancora i pic senza la A
#65 da Giacomo il 28 marzo 2011
Ciao . Grazie per la risposta precedente avrei altre due domande da porti .
Volevo utilizzare questo semplicissimo circuito per programmare il PIC http://xoomer.virgilio.it/diegooneoone/pic.htm è una cosa fattibile ? So che non sara molto funzionale perché su porta seriale ma per tentare le prime applicazioni può funzionare ? Vedo che sullo schema viene utilizzata soltanto un alimentazione supplementare fornita da una pila 9 V , se non erro l’alimentazione sul piedino di programmazione deve essere di circa 13,5 V . Può essere un problema ?
Per ultimo volevo chiedere una cosa dul software da utilizzare con questo programmatore (ic-Prog) . Finita l installazione mi chiede il tipo di programmatore . Quale devo selezionare ? Grazie anticipatamente .
#66 da Giovanni Bernardo il 28 marzo 2011
Mi dispiace ma dei programmatori su seriale non me ne dovete parlare. Se li volete realizzare lo fate a vostre spese.
#67 da Giacomo il 28 marzo 2011
Ok . Grazie lo stesso .
#68 da gaudenzio il 30 marzo 2011
ciao mi chiamo gaudenzio,
mi ha parlato del tuo sito mauro laurenti….
ho dei problemi con il software MPLAB IDE e chiedo a te qualora fossi così gent.le da darmi un consiglio utile….
ho installato MPLAB IDE v8.50 ma non mi compila i programmi con pic 18XXX probabilmente perché serve il compilatore adatto…. come si chiama il compilatore giusto o qual’è il sistema completo affinché si possa lavorare con i pic 16 e i pic 18? e come si fa ad aggiungere a MPLAB IDE il compilatore per i pic18
ho provato anche a scaricare il tuo prog (lez 3) ma mi manca la funzione “delay.c” e la compilazione fallisce….
ti faccio inoltre i complimenti per il sito e per il servizio che offri….
saluti e grazie
#69 da Giovanni Bernardo il 30 marzo 2011
Ciao.
Per i pic16 il compilatore è l’Hitech-C che viene fornito insieme ad MPLAB. Quando installi MPLAB alla fine ti chiede se vuoi installare anche l’Hitech-C. Alla fine dell’installazione lo devi attivare come versione LITE, ho spiegato i passi dell’installazione in questa lezione: http://www.settorezero.com/wordpress/corso-programmazione-picmicro-in-c-lezione-2-installazione-strumenti-di-sviluppo-descrizione-del-circuito-di-base/
Invece per i PIC18 esistono due compilatori, entrambi da scaricare a parte: L’Hitech-C18 e MPLAB-C18. Io, Mauro e molti altri usiamo tutti MPLAB-C18 anche perchè è ricco di esempi. MPLAB-C18 lo installi dopo che hai installato MPLAB IDE. I passi per l’installazione e il settaggio sono tutti descritti nel tutorial di Mauro.
Quando andrai a creare un progetto sceglierai quindi la suite Hitech-C (esce scritto PICC Compiler) se vuoi fare un progetto per un PIC delle serie 10, 12 o 16 mentre sceglierai MPLAB C18 se vuoi fare un progetto per un PIC serie 18.
Le routine di delay non sono altro che una porzione di programma scritta in C quindi assolutamente non fanno parte nè di MPLAB (che è l’ambiente di sviluppo) nè dei tools di programmazione. Le routine di delay che uso io con i pic16 le trovi navigando nel menù “PICMicro” in alto, sfogliati le varie sezioni. Quelle routine sono scritte per funzionare con i PIC12/16 e quindi con L’Hitech-C. Non escludo che possano pure funzionare con i PIC18 e quindi con MPLAB C18, magari basta fare qualche modifica, ora su due piedi non ho provato. Se vuoi programmare i PIC10/12/16 segui le cose che ho già scritto passo passo. Se vuoi programmare i PIC18 segui il tutorial di Mauro.
#70 da gaudenzio il 30 marzo 2011
ciao
e grazie per l’apporto…. effetivamente era descritto tutto bene nel tutorial di laurenti sono riuscito a compilare il programmino e a programmare anche il pic18f4550 usando freedom II….una bella soddisfazione!!
grazie ancora per l’ottimo servizio offerto… ora avrai un nuovo utente… mi farò vivo molto presto!!
ciao
gaudenzio
#71 da GiacomoDalSasso il 1 aprile 2011
Ciao . Avrei un ultimo dubbio prima di cominciare la programmazione . Voglio comperare dal sito RobotItaly il pickit 3 . Ho notato che nono presenti due versioni , quella Express e quella Debugger, se non mi sbaglio . Volevo quindi chedere se come da quello che ho capito io è presente soltanto in più la basetta nella versione Express ?
Grazie
#72 da Giovanni Bernardo il 1 aprile 2011
Esatto, uno ha la scheda di sviluppo e l’altro no
#73 da Paul il 16 maggio 2011
salve!!
un picmicro si può programmare anche usando un software MULTISIM di elettronica
#74 da Giovanni Bernardo il 17 maggio 2011
Al limite lo puoi simulare non programmare
#75 da Paul il 18 maggio 2011
cambia qualcosa se invece di usare PIC16F84 ne uso qualche altro nel software MULTISIM (programma è sempre questa per tutti pic che ha spiegato nella lezione 3)
#76 da Bruno il 12 settembre 2011
Ciao,io sono alla primissima esperienza per cui non maleditemi per le domande banali.Ho intenzione di comprare un pickit3 e il micro da te consigliato ma non ho ben capito come si utilizza il clock.Mi spiego meglio!!!Sul pic da te consigliato non è presente il clock interno per cui i miei dubbi sono:
1.il quarzo è già presente sullo starter kit?devo impostare qualcosa?
2.tolto il PIC dallo starterkit per utilizzarlo in un mio circuito, devo realizzare il circuito di clock con il quarzo da me?
scusate la banalità delle domande ma sono proprio a zero con i micro.Ringrazio tutti per le risposte. :-)
#77 da Giovanni Bernardo il 13 settembre 2011
Il clock non si “utilizza”. Il clock è necessario per “scandire il tempo”. Alcune PIC hanno la possibilità di avere il clock interno. L’avere il clock interno non significa che non puoi usare quello esterno: è una possibilità e decidi tu se usarla o meno. In questo caso, ovviamente, se la scheda ha già montato un quarzo ma vuoi utilizzare il clock interno, o togli il quarzo o te lo tieni perdendo la funzionalità di IO offerta da quei due pin su cui si monta il quarzo. In ogni caso io preferisco sempre il clock esterno, è di certo più preciso di quello interno. Quello interno (quando ce l’hai, perchè non è detto che ce l’hai), è buono perchè ti fa consumare meno corrente, hai a disposizione altri due IO (quelli che dovrebbero essere usati dal quarzo esterno) e risparmi componenti. Di contro è meno preciso e più soggetto a sbalzi. Uno starter kit se ha il quarzo o meno lo leggi sulla documentazione. In genere si ma se tu mi fai la domanda mi viene il dubbio che possa esistere qualche starter kit che utilizza un pic con possibilità di clock interno e quindi omettono il quarzo esterno, ma mi pare poco probabile. In ogni caso farsi una lettura della documentazione penso non faccia male. Se usi lo starter kit, ci fai un programma, poi togli il pic e lo metti in un altro circuito, se hai capito cos’è e a cosa serve il clock non dovresti fare manco la domanda. Se hai scritto un programma che usa delle temporizzazioni è ovvio che devi replicare lo stesso schema del clock, o no? Se poi il programma non usa temporizzazioni, il clock ci vuole sempre ma magari puoi mettere un quarzo di valore diverso cambiando eventualmente la word di configurazione.
#78 da darpra il 22 novembre 2011
ciao, problema: ho installato Hitec-c 9.83 su una rete di computer nella mia scuola. il compilatore viene visto come suite da MPLAB dagli utenti ma funziona solo come amministratore. preciso che alla cartella del compilatore è stato assegnato il controllo completo per gli utenti. possibili soluzioni?
#79 da darpra il 6 dicembre 2011
risolto il problema #78 fornendo agli utenti di rete l’opzione POWER USERS