Home
Accesso / Registrazione
 di 

PICmicro. PICMICRO advanced

PICmicro. PICMICRO advanced

Introduzione
Per studiare il funzionamento dei microcontrollori PIC prenderemo in considerazione, almeno inizialmente, il PIC16F84 (o 16F84A): il più diffuso e semplice per chi inizia.
Le caratteristiche principali di questo modello sono:

  • Memoria: memoria programma di tipo FLASH con 1024 allocazioni da 14 bit ciascuna, più una memoria EEPROM per i dati da 64
    byte.
  • Clock: con frequenza massima tra 4 e 20Mhz, a seconda del modello.
  • Alimentazione: da 4.5V a 5.5V con un consumo massimo di corrente di 2mA (esclusi i pin di I/O).
  • Porte I/O: a disposizione 13 pin di ingresso/uscita, distinti in due gruppi detti PORT A e PORT B, rispettivamente da 5 e 8 pin.
  • Set di istruzioni: il linguaggio assembly è costituito da 35 istruzioni, rappresentate da codici mnemonici che vedremo in seguito.

Pedinatura

Il chip è alimentato attraverso i due piedini VDD e VSS, collegati rispettivamente a 5V e a massa.

Il pin MCLR serve per abilitare l'integrato (qundi per eseguire il reset) ed è solitamente collegato a 5V con una resistenza da 10Kohm per abilitare il PIC, oppure a massa per disabilitarlo; lo stesso piedino viene collegato a 12V durante la fase di programmazione.

Il clock può essere generato in diversi modi, i più comuni sono:

RC
Consiste in una serie RC, collegata ad OSC1, mentre in OSC2 si ottiene la frequenza diviso 4, ovvero la cadenza con cui vengono eseguite le istruzioni.Con tale metodo la frequenza ricavata non è affatto precisa.

Per 1Mhz -> R = 4,7K e C =
22pF

Quarzo (XT)
Con questo componente si ottiene una frequenza molto precisa; i condensatori (a 4Mhz) devono essere tra 15 e 33pF.

Per finire, sono presenti 13 pin di I/O, singolarmente configurabili come ingresso o uscita; ognuno può fornire o assorbire 25mA, per un totale, rispettivamente, di 250mA e 300mA. Fa eccezione il pin RA4 che, quando configurato come uscita, è open drain, perciò può soltanto assorbire corrente.

Open Drain
Il piedino è privo di qualsiasi connessione con Vcc, perciò non è in grado di erogare corrente.
Se si vuole comunque utilizzare il piedino come uscita, è sufficiente collegarlo a Vcc con una resistenza di pull-up, calcolata a seconda delle esigenze.

Configurazione minima
Detto ciò, la configurazione minima perché il PIC sia funzionante richiede pochissimi componenti:

Quando si programma un PIC è molto utile, se non indispensabile, avere a disposizione il relativo datasheet, al cui interno troveremo tutte le informazioni che ci serviranno.

Struttura interna

L'architettura interna dei microcontrollori si differenzia tra un modello e l'altro, ma può essere schematizzata in una forma base, comune a tutti i chip.


Sono da evidenziare i seguenti blocchi:

  • Il componente fondamentale del uC, la CPU, preposta ad eseguire tutte le istruzioni.
  • La memoria programma, che può essere EPROM, CMOS EEPROM, FLASH o OTP (One Time Programmable). I chip forniti di
    EPROM presentano una finestrella (chip windowed) per cancellare il contenuto della memoria attraverso i raggi ultravioletti, se invece non dispongono di questa finestrella sono OTP perché, una volta scritti, non è più possibile cancellarne il contenuto. Nel caso invece di memorie EEPROM (CMOS o FLASH) sarà possibile riprogrammare il PIC più volte cancellandolo elettricamente.
  • La memoria dati è costituita da una EEPROM, nella quale possiamo salvare dati che non andranno persi una volta tolta l'alimentazione; non è presente in tutti i PIC, ma lo è nei più utilizzati.
  • La memoria RAM contiene tutti i dati temporanei, ma soprattutto i registri; questi ultimi sono delle speciali locazioni di memoria: permettono l'abilitazione e l'utilizzo delle periferiche, e svolgono altre funzioni particolari.
  • I Timer ci consentono di scandire il tempo e possono essere usati da soli o come supporto ad alcune periferiche; esiste poi un timer speciale, detto WatchDog Timer (WDT) che, se abilitato, resetta il chip quando questo si "inceppa".
  • Infine le periferiche di I/O possono essere di natura diversa: dalle semplici porte di ingresso/uscita, fino a convertitori A/D o moduli per la comunicazione seriale.


La Memoria in Dettaglio

Le dimensioni delle varie parti che costituiscono la memoria cambiano con il modello di PIC; per quanto riguarda il 16F84A, le dimensioni sono:



Come già visto, la memoria programma è di 1024 word di 14bit, questo perché¨ le istruzioni gestite dalla CPU sono, appunto, di 14bit; gli indirizzi disponibili per accedere a questa memoria vanno da 0 a 0x3F (1023). Ad ogni reset, il programma inizia sempre all'indirizzo 0, perciò sarà qui che metteremo le prime istruzioni dei nostri programmi.

Questa memoria può essere divisa in 4 pagine di 2048 word ciascuna, a causa del fatto che un'istruzione di salto può indirizzare soltanto 2048 locazioni di memoria; per passare tra una pagina e l'altra sarà sufficiente modificare un apposito registro, ad ogni modo, sarà raro il suo utilizzo.

Non c'è da confondersi con la memoria RAM, anch'essa divisa in 4 parti (dette banchi), che funzionano in modo completamente diverso.

In entrambi i casi, le sezioni possono essere in numero diverso, ad esempio il PIC che prendiamo noi in considerazione ha soltanto una pagina di memoria programma e due banchi di RAM.


La Memoria RAM

A differenza di moltissimi altri sistemi, per i PIC, la memoria RAM non è soltanto un luogo dove riporre dati temporanei, ma contiene i cosiddetti Registri Speciali, indispensabili per il suo funzionamento; ogni banco è quindi diviso in due parti: Special Function Registers (SFR) e General Purpose Registers (GPR).

La RAM del 16F84 è organizzata come segue:

Come si può notare dalla figura, lo spazio di memoria effettivamente utilizzabile dal programmatore è costituito da 68byte (da 0Ch a 4Fh compresi), la parte bassa è occupata dagli SFR; i due banchi sono identici: ogni registro del banco 1 è una copia dello stesso registro nel banco 0, tranne alcuni registri speciali che si trovano soltanto sull'uno o sull'altro banco.

Analogamente a quanto accade con le pagine della memoria programma, una singola istruzione può puntare ad un indirizzo di soli 7bit, ovvero dall'indirizzo 00h fino a 7Fh, perciò per spostarci tra un banco e l'altro faremo uso di due appositi bit, posti nel registro STATUS.


L'accumulatore

All'interno del PIC esiste un altro registro molto speciale, il registro W (detto anche working register o accumulatore), usato molto di frequente come registro temporaneo per eseguire alcune operazioni matematiche o per passare dati da una zona all'altra della memoria; infatti non e possibile spostare un dato direttamente da un byte all'altro della RAM, ma è necessario passare per W.
In questa lezione verranno illustrati i registri speciali più importanti, grazie ai quali, assieme ad alcune istruzioni, sarà possibile realizzare i primi programmi.

Status Register

Il registro di Status è molto utilizzato, infatti contiene lo stato aritmetico dell'ALU ed i bit di selezione del banco.

IRP : serve per selezionare i banchi 2 e 3 con l'indirizzamento indiretto, ma non è utilizzato dal nostro PIC.

RP1:RP0 : selezionano il banco di RAM, ma il bit RP1 non è utilizzato dal 16F84 perché, come visto, ha soltanto 2 banchi.

TO' : è zero dopo un Time Out del WDT.

PD' : è zero quando il chip viene mandato in standby.

Z : è settato se l'operazione ha avuto come risultato zero.

DC : indica se, durante un'operazione, c'è stato un riporto tra il primo ed il secondo nibble di un byte.

C : indica che c'è stato un riporto.

PORTA e PORTB

Questi due registri permettono l'utilizzo delle porte d'uscita, ovvero dei 13pin di I/O; quando una porta è configurata come uscita, scrivendo sull'apposito registro, verrà modificato istantaneamente lo stato dei pin corrispondenti.

Ad esempio, se viene scritto in PORTB il byte 01110001b i pin RB0, RB4, RB5 e RB6 saranno a 5V, mentre gli altri si troveranno a 0V.

Allo stesso modo, se una porta è configurata come ingresso, leggendo il relativo registro, si avrà lo stato dei pin.



TRISA e TRISB

Come già accennato in precedenza, ogni singolo pin può essere configurato singolarmente come ingresso o uscita: questo viene realizzato con i registri TRISA e TRISB. Settando un bit, il corrispondente piedino sarà un ingresso, altrimenti sarà un'uscita.

Ad esempio:

TRISB
bit 7 6 5 4 3 2 1 0

valore

0 0 1 1 0 1 0 0

I/O

uscita uscita ingresso ingresso uscita ingresso uscita uscita

Naturalmente, se una porta è mista ingressi/uscite, non sarà necessario scriverla o leggerla tutta, ma con apposite istruzioni potremo modificare i singoli bit.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Giuliano

Ciao ...vado subito al

Ciao ...vado subito al nocciolo e' da un po di tempo che lavoro con scarso successo "alla generazione della seguenza di riapertura" della flash dei Pic ,una volta "code protected" per intenderci stavo provando su un 16f877,tramite un 16f84 con il compito di generare la seguenza
clock e data su due pin....ora nn voglio divulgarmi troppo cmq utilizzando mplab ho avuto la possibilita' di simulare la seguenza che effettivamente rientrava in quella *secondo me* interpretata dal programming specification del 16f877,ho aggiunto il secondo me proprio perche temo che l'errore possa essere proprio li.
Cmq nn so nel caso tu abbia affrontato questo problema....ti sarei molto grato per qualsiasi consiglio
grazie!

ritratto di Giuliano

Ciao ...scusami se vado

Ciao ...scusami se vado subito al nocciolo e' da un po di tempo che lavoro nel tempo libero, sempre poco , alla programmazione dei Pic -ultimamente "alla generazione della seguenza di riapertura" della flash dei Pic ,una volta "code protected" per intenderci stavo provando su un 16f877,tramite un 16f84 con il compito di generare la seguenza
clock e data su due pin....ora nn voglio divulgarmi troppo cmq utilizzando Mplab ho avuto la possibilita' di simulare la seguenza che effettivamente rientrava in quella **secondo me** interpretata dal programming specification....del 16f877\si che io nn sono un asso in inglese tecnico ma alla Microchip si sono sprecati li...\. Il secondo me proprio perche temo che l'errore possa essere di comprenzione della seguenza.
Cmq nn so nel caso tu abbia affrontato questo problema....ti sarei molto grato per qualsiasi consiglio
grazie!

ritratto di Paolo Conte

Ciao, ti rispondo per

Ciao, ti rispondo per e-mail...

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 5 utenti e 69 visitatori collegati.