PICmicro

PICMicro Basic
Il corso base sui Microcontrollori, per capire cosa è un PIC con un linguaggio semplice ed immediato



PICMicro Advanced
Approfondiamo i concetti di programmazione ed utilizziamo le periferiche



PICMicro Cult
Il corso CULT, il primo in Italia. Tradotto in un numero indefinito di lingue e versioni.



PICMICRO basic

1. Che cos'è un microcontroller

La prima domanda che ci si pone è esattamente questa: cos'è un microcontroller e in che modo può essermi utile?

Il microcontroller è un circuito integrato a 8 o più piedini (quello che trattiamo qui è a 18 piedini) che a tutti gli effetti è come un piccolo computer, dotato della sua memoria RAM, della memoria EPROM, FLASH o ROM. In uno degli ultimi tre tipi di memoria viene scritto un software (cioè un programma, che viene chiamato firmware), mediante un apparecchio apposito chiamato 'programmatore'. Il circuito eseguita il programma sequenzialmente, istruzione per istruzione, ponendo a livello alto o basso i piedini (se sono programmati come output, cioè uscita) o leggendo il livello dai piedini destinati ad input (cioè ad ingresso). Detto in questo modo potrebbe non sembrare molto utile, ma vi accorgerete che in moltissimi casi risulta la 'carta vincente' per parecchie applicazioni, il microcontroller, infatti, può essere destinato agli usi più disparati, ed attualmente spazia dai giocattoli per bambini fino alle applicazioni professionali di controllo e calcolo.

Esistono diversi tipi di microcontroller, che variano a seconda della memoria disponibile, dallo spazio di indirizzamento, dal numero di piedini disponibili, dal numero di istruzioni che essi contengono ed anche da altre caratteristiche.

Cominciamo ora con la trattazione del microcontroller di questo manuale.

2. Piedinatura del PIC16F818

Piedinatura PIC16F818

Figura 1: piedinatura PIC16F818

La figura qui sopra indica la piedinatura del microcontroller in questione, ed ora spiegheremo il significato di tutte quelle sigle.

Il piedino numero 1 viene identificato guardando la tacca presente sul corpo dell'integrato: ponendola alla propria sinistra, il piedino 1 risulta in basso appena sotto la tacca la numerazione progressiva avviene in senso antiorario.

I piedini RA... identificano la porta A dell'integrato e vengono numerati da 0 a 4, le porte sono i piedini che permettono al circuito di colloquiare con l'esterno, cioè di inviare o ricevere segnali.

Spesso i piedini hanno funzioni multiple, e quasi sempre una esclude l'altra, infatti le altre sigle riferite ai piedini sono:

AN... Identificano le porte che possono essere configurate come analogiche, che consentono una trasformazione di un segnale da analogico in digitale all'interno del circuito stesso (convertitore A/D), vedremo più avanti il significato di questo e come sfruttare questa possibilità .

Vref+ E' il voltaggio di riferimento positivo del convertitore A/D (vedremo più avanti l'utilizzo di questo pin).

Vref- c.s., ma è il voltaggio di riferimento negativo (anche in questo caso vedremo più avanti).

T0CKI Indica un pin di clock input alternativo per il solo timer 0, cioè il timer 0 verrà incrementato tramite un clock o una rete RC collegata a questo input, in verità questa funzione viene usata raramente.

MCLR (Master Clear) è il pin che, se posto a livello 1 permette l'esecuzione normale del programma, se, invece, viene posto a 0 resetta il circuito (cioè lo fa ripartire dalla prima istruzione), ma il programma non partirà fino al momento in cui il pin verrà messo a livello alto. Questo pin deve essere collegato all'alimentazione tramite una resistenza il cui valore non è molto rigido, ma consiglierei di usare 3,3kW (il datasheet stesso consiglia un valore uguale o superiore a 1k).

Vpp Viene usato solo in fase di programmazione dell'integrato dal programmatore per fornire la tensione di programmazione.

Vss E' la massa dell'integrato (quasi sempre a 0 volt).

I piedini RB... identificano la porta B dell'integrato e vengono numerati da 0 a 7 (vedi qui sopra la porta A).

INT Questo piedino genera un interrupt che potrà essere gestito all'interno del software.

SDI E' la porta in input dati dello standard di comunicazione SPI (si tornerà su questo argomento più avanti nel manuale).

SDA E' la porta dati dello standard di comunicazione di Philips I2C (si tornerà su questo argomento più avanti nel manuale).

SDO E' la porta di output dati dello standard di comunicazione SPI.

CCP1 Serve per l'input del circuito di capture, come output del circuito di compare e del PWM (Pulse Width Modulation), tutto questo verrà spiegato in seguito.

PGM Pin che permette di attivare la funzione di programmazione a basso voltaggio per l'ICSP.

SCK clock per la comunicazione seriale SPI.

SCL clock per la comunicazione seriale degli integrati I2C.

SS slave select per la comunicazione seriale SPI nel modo slave.

T1OSO Output del Timer1.

T1CKI Input del Timer1.

PGC clock per la programmazione in circuit (ICSP).

T1OSI input per l'oscillatore del Timer1.

PGD linea dati per la programmazione in circuit (ICSP).

Vdd E' l'alimentazione dell'integrato (che può andare da 2 volt a 5,5 volt, quasi sempre viene alimentato a 5 volt).

OSC2 (CLKO) Output per l'oscillatore: nel modo RC esce con un segnale con frequenza sincronizzata Oscillatore/4.

OSC1 (CLKI) Input per l'oscillatore o per un clock esterno.

Molti di questi termini Vi suoneranno nuovi o incomprensibili, ma seguitemi ed avrete una visione piu chiara di tutto quanto (non è per nulla difficile come può sembrare!!).

3. Informazioni generali sul contenitore

Questo dispositivo viene venduto in diversi tipi di contenitore, ognuno con le sue caratteristiche:

Immagine

Nome

N.ro pin

Note

Contenitore PDIP

PDIP (Plastic Dual In Line Package)

18

Questo contenitore plastico, adatto al montaggio tradizionale (Through Hole), è quello che tratteremo in questo manuale, in quanto il più diffuso sia fra gli appassionati di elettronica che negli istituti scolastici.

Contenitore SOIC

SOIC (Small Outline Integrated Circuit)

18

Un contenitore plastico adatto per il montaggio SMD.

Contenitore SSOP

SSOP (Shrink small outline package)

20

Un altro contenitore plastico adatto al montaggio SMD.

Contenitore QFN

QFN (Quad Flat package No leads)

28

Ancora un contenitore per il montaggio in SMD, ha la caratteristica di non avere pin visibili.

4. La memoria per il programma (FLASH)

Memoria di programmazione

Figura 2: memoria di programmazione

Analizziamo la memoria di questo dispositivo. Come potete vedere dalla figura qui sopra la memoria ha una dimensione di 1kbyte e parte dalla locazione 00 (esadecimale) fino alla locazione 3FF (esadecimale). Ogni locazione consente di inserire una istruzione, per un totale quindi di 1024 istruzioni. Il dispositivo ha uno stack (vedremo più avanti di cosa si tratta) di 8 posizioni ed un program counter (PC) a 13 bit. La memoria da 400 (esadecimale) a 1FFF (esadecimale) non è fisicamente implementata ed una scrittura in quell'area significa la sovrascrittura della memoria esistente in modo ciclico, cioè scrivendo nella locazione 400 (esadecimale) in verità si scrive nella locazione 000 (esadecimale).

La locazione 000 (esadecimale) è il vettore di RESET, da dove parte l'esecuzione di un programma a seguito di un power-on o di un reset.

La locazione 004 (esadecimale) è il vettore di INTERRUPT, in pratica il programma salta immediatamente a questa locazione quando riceve un segnale di interrupt esterno o interno, esegue la routine che parte da quel punto e, a seguito dell'istruzione RETFIE (che è necessario inserire al termine della routine stessa), ritorna alla esecuzione della istruzione successiva a quella dove era stato generato il segnale.

5. Lo stack

Vediamo ora che cos'è lo stack.

Lo stack è una particolare area di memoria dove viene inserito da parte del microcontroller stesso l'indirizzo di memoria dell'istruzione seguente a quella dove è stata chiamata una subrouitine o comunque quando è necessario memorizzare l'indirizzo della locazione successiva del programma per riprendere l'esecuzione in un secondo momento. Essendo ad 8 livelli è possibile memorizzare fino ad 8 locazioni, l'inserimento della locazione di memoria avviene automaticamente da parte del dispositivo e viene ripresa in modo altrettanto automatico.

Lo stack è di tipo LIFO (Last In First Out) cioè l'ultima locazione inserita è la prima ad essere recuperata. Senza addentrarci in particolari, diciamo comunque che non possiamo gestire direttamente in alcun modo questa area.

6. Il program counter

Il Program Counter è un' area di memoria dove il dispositivo memorizza l'indirizzo della locazione di memoria successiva a quella che è in esecuzione attualmente, cioè è una sorta di indice della prossima istruzione da eseguire. Viene inizializzata a 000 (esadecimale) a seguito di un reset o di un power-on, a 004 (esadecimale) a seguito di un segnale di interrupt e viene copiato il valore dello stack al ritorno da una subroutine, tutte queste operazioni vengono svolte automaticamente dall'integrato, ma in quest'area è necessario intervenire in casi particolari, come, per esempio, per le tabelle di dati (vedremo più avanti).

7. La memoria dati

Memoria dati

Figura 3: memoria dati

Analizziamo ora la memoria riservata ai dati (RAM). Essa è a sua volta divisa in due parti:

  • SFR (Special Function Register) Sono locazioni che determinano il funzionamento di circuiti speciali del dispositivo o ne restituiscono i risultati.
  • GPR (General Purpose Register) sono locazioni libere che possono essere utilizzate per memorizzare variabili del programma.

La figura qui sopra mostra tutte le locazioni sia dell'uno che dell'altro tipo.

Analizzeremo in dettaglio gli SFR nella descrizione dei vari servizi.

Potete notare che la memoria è divisa in 4 banchi da 128 byte l'uno con alcuni SFR (quelli più usati) in comune fra i vari banchi. Prima di accedere ad una locazione qualsiasi occorrerà accertarsi di avere selezionato il banco di memoria corretto, l'accesso ai banchi potrà essere effettuato in due modi, vedremo nella descrizione del registro STATUS come fare.

Anche in questo caso, accedendo alle locazioni di memoria non implementate si causerà una sovrapposizione alle locazioni esistenti, per esempio nel banco 1, le locazioni da C0h a FFh causano una sovrascrittura delle locazioni da 40h a 7F del banco 0.

Le locazioni 00h, 80h, 100h e 180h non sono utilizzabili direttamente, ma vengono usate per un tipo particolare di indirizzamento, l'indirizzamento indiretto (Indirect Addressing).

Le locazioni segnate in grigio non sono implementate, quindi non devono MAI essere utilizzate.

8. La memoria EEPROM

La memoria EEProm

Figura 4: memoria EEProm

Questo tipo di memoria è disponibile per la memorizzazione di dati che non devono essere cancellati se manca l'alimentazione (per esempio settaggi dell'utente, dati calcolati dal programma stesso, ecc...). L'uso di questa memoria richiede una tecnica di programmazione particolare per garantire l'integrità dei dati che verrà spiegata più avanti in questo stesso manualetto. Questa memoria conta di 128 byte di memoria.

LINKs

Pic by Example Il corso CULT in ITALIANO per Microcontrollori PIC, consigliato a tutti i principianti.

www.microchip.com Il sito ufficiale della Microchip.

www.microchipc.com Ottimo sito con molte risorse per sviluppatori C, Bootloader e Tutoria.l

www.piclist.com Lo storico sito famoso per la Source Code Library

www.phanderson.com Risorse in C in particolare CCS

www.electronic-engineering.ch/microchip/index.html Test Routines per RS232 - LCD - AT Keyboard - DCF77

mikroElektronika Interessante Azienda con molte schede di sviluppo e compilatore mikroC

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend