Elettronica - Componenti
 
  Box
Cap. 14 - Caratteristiche speciali della CPU del PIC16F887

Vedere anche:

Le informazioni contenute in questi appunti sono tratte dai datasheet dei componenti citati e fornite a titolo di esempio, per un uso a livello didattico, sperimentale e hobbystico dei componenti elettronici.

Nel capitolo 14, del datasheet del PIC16F887, leggiamo che esso possiede 2 timers i quali generano il necessario ritardo, nel momento in cui alimentiamo il dispositivo (Power-up).
Uno è l'Oscillator Start-up Timer (OST), che tiene il chip nello stato di reset finchè l'oscillatore risulta essere stabile.
L'altro è il Power-up Timer (PWRT), che genera un ritardo fisso nominale di 64ms, tenendo il chip nello stato di reset mentre l'alimentazione si stabilizza. C'è anche un circuito per resettare il dispositivo se c'è un abbassamento della tensione di alimentazione, il quale può usare il PWRT per creare un ritardo di almeno 64ms per il reset.

La modalità SLEEP è progettata per offrire un funzionamento a bassissimo consumo (Power-Down mode). Per risvegliare il PIC (wake-up) dal modo SLEEP, si può usare un interrupt, il watchdog timer o il reset.

Registri di configurazione (detti anche fuses)

Il PIC16F887 possiede 2 registri di configurazione chiamati CONFIG1 e CONFIG2.
Impostando i bit di questi registri si determina il tipo di funzionamento che avrà il PIC.
Sono mappati in un'area riservata della memoria programma, agli indirizzi 2007h e 2008h, e sono accessibili soltanto durante la fase di programmazione del chip.
Utilizzando la direttiva CONFIG, dell'assemblatore MPASM, possiamo impostare i bit dei registri di configurazione secondo le nostre esigenze. E’ opportuno sottolineare, però, che alcuni software di programmazione del chip, non riconoscono la direttiva CONFIG. In questo caso, bisognerà agire direttamente sui comandi di impostazione del software del programmatore.

Contrariamente a quello che si può pensare, un chip vergine oppure quando viene cancellato completamente (bulk erased), presenterà tutti i bit nello stato logico 1 invece che nello stato logico 0.

Dobbiamo, quindi, tenere conto di questo quando programmiamo il chip, per non trovarci un funzionamento inaspettato.

Nelle tabelle seguenti viene indicata la funzione di ogni bit.

Bit nel registro CONFIG1

FOSC2:FOSC0 Selezione Oscillatore
000 LP (RA7, RA6) = QUARZO 32kHz
001 XT (RA7, RA6) = QUARZO / Risonatore ceramico (media velocità)
010 HS (RA7, RA6) = QUARZO / Risonatore ceramico (alta velocità)
011 EC RA7 = Ingresso oscillatore esterno, RA6 = I/O
100 INTOSCIO Clock interno, RA7 = I/O, RA6 = I/O
101 INTOSC Clock interno, RA7 = I/O, RA6 = uscita clock (FOSC/4)
110 RCIO RA7 = Ingresso Resistore-Capacità esterno, RA6 = I/O
111 RC RA7 = Ingresso Resistore-Capacità esterno, RA6 = uscita clock (FOSC/4)

 

WDTE Abilitazione Watch Dog Timer
0 WDT disabilitato ma può essere abilitato tramite il bit SWDTEN nel registro WDTCON
1 WDT abilitato

 

PWRTE Abilitazione Power-up Timer
0 PWRT abilitato
1 PWRT disabilitato

 

MCLRE Selezione funzione pin RE3/MCLR
0 Il pin RE3/MCLR è un ingresso digitale, MCLR internamente connesso a VDD
1 Il pin RE3/MCLR funziona come MCLR

 

CP Code Protection
0 Protezione del codice nella memoria programma abilitato
1 Protezione del codice nella memoria programma disabilitato

 

CPD Data Code Protection
0 Protezione del codice nella memoria dati abilitato
1 Protezione del codice nella memoria dati disabilitato

 

BOREN1:BOREN0 Abilitazione Brown-out Reset (BOR)
00 BOR disabilitato
01 BOR controllato dal bit SBOREN del registro PCON
10 BOR abilitato durante il funzionamento e disabilitato in Sleep
11 BOR abilitato

 

IESO Switchover Interno/Esterno
0 Il modo Switchover Interno/Esterno è disabilitato
1 Il modo Switchover Interno/Esterno è abilitato

 

FCMEN Abilitazione Fail-Safe Clock Monitor
0 Fail-Safe Clock Monitor disabilitato
1 Fail-Safe Clock Monitor abilitato

 

LVP Abilitazione Low Voltage Programming
0 Il pin RB3 è un I/O digitale, su MCLR deve essere usata HV (circa 13V) per programmare
1 Il pin RB3/PGM ha la funzione PGM, low voltage programming abilitato

 

DEBUG Modalità In-Circuit Debugger
0 In-Circuit Debugger abilitato, RB6 e RB7 sono dedicati al debugger
1 In-Circuit Debugger disabilitato, RB6 e RB7 sono pin di I/O normali

Bit nel registro CONFIG2

BOR4V Selezione livello Brown-out Reset
0 Brown-out Reset impostato a circa 2.1V
1 Brown-out Reset impostato a circa 4.0V

 

WRT1:WRT0 Abilitazione auto scrittura Flash Program Memory
00 Da 0000h a 0FFFh protetto alla scrittura, da 1000h a 1FFFh può essere scritto
01 Da 0000h a 07FFh protetto alla scrittura, da 0800h a 1FFFh può essere scritto
10 Da 0000h a 00FFh protetto alla scrittura, da 0100h a 1FFFh può essere scritto
11 Protezione alla scrittura disabilitato

Protezione del codice

Se il bit per la protezione del codice è disabilitato (stato logico 1), sarà possibile, tramite il software del programmatore chip, leggere il contenuto della memoria programma (o della memoria dati Eeprom).

L'intera area, della memoria programma e della memoria dati Eeprom, sarà cancellata se si modificherà il bit di protezione del codice da abilitato a disabilitato (vedere sul sito Microchip PIC16F88X Memory Programming Specification (DS41287) per ulteriori informazioni).

ID Locations

Quattro locazioni riservate della memoria programma, agli indirizzi da 2000h a 2003h, possono essere usate dall'utente per memorizzare codici speciali, numeri di serie, checksum, ecc.
Queste locazioni non sono accessibili durante il normale funzionamento, ma soltanto durante la fase di programmazione del chip e, di ogni locazione, vengono usati solo i primi 7 bit.

Reset

Il reset è una particolare condizione che costringe il microcontroller a ricominciare il programma da capo, ovvero ad eseguire l’istruzione contenuta solitamente nella prima locazione della memoria programma. Questa operazione si ottiene caricando nel Program Counter l'indirizzo del "vettore di reset".
Il PIC16F887 può effettuare dei tipi differenziati di reset:

  • Power-on Reset (POR)
  • WDT Reset durante funzionamento normale
  • WDT Reset durante Sleep
  • MCLR Reset durante funzionamento normale
  • MCLR Reset durante Sleep
  • Brown-out Reset (BOR)

Alcuni registri non sono influenzati in qualunque condizione di reset; il loro stato è sconosciuto (x) durante un POR e non viene modificato (u) dagli altri reset.
Altri registri sono influenzati in maniera differente a seconda del tipo di reset.

Nella tabella 14-4 del datasheet, sono indicate le possibili condizioni, per i bit contenuti nei registri, dopo un tipo specifico di reset.

Power-on Reset (POR)

Questa è la situazione in cui si viene a trovare il micro quando gli viene data alimentazione; viene mantenuto in reset fino a quando rileva un livello della tensione di alimentazione Vdd stabile per il funzionamento.
Se anche il "Brown-out Reset (BOR)" è abilitato, il circuito BOR manterrà il micro in reset fino a quando Vdd avrà superata la tensione Vbor.
Il circuito POR non genera un reset quando Vdd scende. Per riabilitare il POR, Vdd deve assumere il livello di Vss per almeno 100µs.

MCLR (master clear reset)

Questo piedino del micro deve essere tenuto normalmente a livello logico alto. Se viene portato a livello basso, si provoca l'effetto di resettare il micro e quindi il programma viene rieseguito da capo.

Il PIC16F887 possiede un filtro che riconosce ed ignora piccoli impulsi di disturbo nel pin MCLR.
Nella figura 14-2 del datasheet, si vede il circuito raccomandato per connettere il pin MCLR.

Quanto detto sopra è valido solo se il bit MCLRE del registro di configurazione CONFIG1 è impostato a 1.
Se il bit MCLRE è impostato a 0, questo pin diventa un ingresso digitale (RE3) e la funzione MCLR sarà simulato e connesso internamente a Vdd.

Power-up Timer (PWRT)

Il Power-up Timer genera un ritardo fisso nominale di 64ms, tenendo il chip nello stato di reset mentre l'alimentazione si stabilizza. Esso funziona tramite l'oscillatore interno a 31 kHz LFINTOSC.
La funzione Power-up Timer viene abilitata impostando a 0 il bit PWRTE del registro di configurazione CONFIG1 o disabilitata impostandolo a 1.
Il Power-up Timer verrà abilitato automaticamente se verrà abilitato il Brown-out Reset (BOR).

Brown-out Reset (BOR)

Il Brown-out Reset (BOR) provoca un reset se la tensione di alimentazione Vdd scende al di sotto del valore predefinito (VBOR) per un tempo superiore a TBOR.

La funzione Brown-out Reset viene abilitata impostando a 1 i bit BOREN1 e BOREN0 (11) del registro di configurazione CONFIG1 e disabilitata impostandoli a 0 (00).
Impostando BOREN1 a 0 e BOREN0 a 1 (01), l'abilitazione o disabilitazione del BOR verrà fatta, via software, tramite il bit SBOREN del registro PCON.
Impostando BOREN1 a 1 e BOREN0 a 0 (10), il BOR verrà disabilitato entrando nel modo SLEEP per conservare l'alimentazione e riabilitato durante il risveglio (wake up). In questo modo, il bit SBOREN del registro PCON è disabilitato.

Il valore VBOR viene selezionato tramite il bit BOR4V del registro CONFIG2.
Con BOR4V impostato a 1, il valore VBOR vale 4V, mentre con BOR4V impostato a 0, il valore VBOR vale 2.1V.

Il valore TBOR lo possiamo trovare nelle tabelle delle caratteristiche elettriche e vale circa 100µs minimo.

Su qualunque tipo di Reset (Power-on, Brown-out Reset, Watchdog Timer, ecc.), il chip rimarrà in Reset finchè VDD sarà salita superando il valore di VBOR.
A questo punto, il Power-up Timer verrà invocato, se abilitato, e il chip verrà mantenuto in Reset per ulteriori 64 ms.

Nella tabella 14-3 del datasheet, sono indicati i registri coinvolti con il Brown-out reset.

Registri STATUS e PCON

Attraverso le combinazioni di alcuni bit dei registri STATUS e PCON, è possibile risalire a quale tipo di reset è avvenuto precedentemente.

Nella tabella 14-2 del datasheet, sono indicate le combinazioni dei bit dei registri STATUS e PCON in base al tipo di reset avvenuto.

Nella tabella 14-5 del datasheet, sono indicate le condizioni di inizializzazione per alcuni registri speciali a seconda del tipo di reset.

Interrupt

Il PIC16F887 possiede molte sorgenti di interrupt:

  • Interrupt esterno su RB0/INT
  • Interrupt su cambiamento di PORTB
  • Interrupt su scrittura dati EEPROM
  • Interrupt su Overflow del Timer0
  • Interrupt su Overflow del Timer1
  • Interrupt su Timer2
  • Interrupt su Comparatori
  • Interrupt su A/D
  • Interrupt su CCP
  • Interrupt su ricezione e trasmissione EUSART
  • Interrupt su Fail-Safe Clock Monitor
  • Interrupt su Ultra Low-Power Wake-up

Nella tabella 14-6 del datasheet, si vedono i bit ed i registri coinvolti nelle operazioni con interrupt.

Vedere anche la pagina:
"Uso dell'interrupt" per altre informazioni.

Watchdog Timer (WDT)

Il Watchdog Timer è un contatore che ha la funzione, se non ricaricato nei tempi stabiliti, di resettare il chip in modo da evitare che rimanga bloccato, ad esempio, eseguendo all'infinito, un gruppo di istruzioni non previsto.

Il WDT viene abilitato impostando a 1 il bit WDTE del registro di configurazione CONFIG1 e disabilitato impostandolo a 0. Se il WDT è disabilitato, è possibile abilitarlo, durante il funzionamento, impostando a 1 il bit SWDTEN del registro WDTCON (e disabilitarlo mettendolo a 0).

Il Watchdog Timer (WDT) opera con l'oscillatore interno LFINTOSC (31 kHz), che non necessita, per il proprio funzionamento, di alcun componente esterno.
Questo oscillatore continua la propria funzione anche se il chip viene posto in modalità sleep, la quale blocca l’oscillatore che fa funzionare il micro.
La frequenza in uscita dall'oscillatore verrà divisa da un prescaler a 16 bit, nel campo da 32 a 65536.

La scelta del rapporto di divisione, viene effettuata con la combinazione dei bit WDTPS3÷WDTPS0, del registro WDTCON.

Dopo un reset, viene forzata la combinazione 0100 (1:512) così, il WDT Time-out, verrà impostato per una durata di circa 17 ms.
Impostando a 1 il bit PSA del registro OPTION_REG, è disponibile anche il prescaler condiviso col Timer0 che, tramite la combinazione dei bit PS2÷PS0 del registro OPTION_REG, può ulteriormente dividere la frequenza in ingresso da 1 a 128. Con le combinazioni disponibili, possono così essere impostati, per il WDT Time-out, valori da 1 ms fino a 268 secondi circa.

Nella tabella 14-8 del datasheet, si vedono i bit ed i registri coinvolti con il WDT.

Durante il normale funzionamento del micro, se sopraggiunge un impulso WDT Time-out, viene effettuato un reset e il micro ricomincia il programma dall’inizio.
Se il micro, invece, si trovava in condizione di SLEEP, un WDT Time-out determinerà l’uscita dalla modalità SLEEP e riprenderà la normale continuazione del programma.
Nel normale funzionamento, il WDT (se utilizzato), deve essere azzerato prima che possa generare il WDT Time-out. Questa operazione viene effettuata dall’istruzione ClearWDT, che serve ad azzerare il contatore del Watchdog Timer.

Power-Down Mode (Sleep)

Nel Power-Down Mode (Sleep), il dispositivo è caratterizzato da un assorbimento tipico di corrente molto basso.

Il PIC16F887 viene posto in modalità sleep eseguendo l'istruzione SLEEP.
Se il WDT è abilitato:
- il WDT viene azzerato ma continua a funzionare
- il bit PD del registro STATUS viene azzerato
- il bit TO dello stesso registro viene settato
- viene spento l’oscillatore principale
- gli I/O manterranno lo stato che avevano prima di entrare nel modo SLEEP

Gli eventi che possono determinare l’uscita dalla modalità sleep sono:
- Un reset esterno dal piedino MCLR, che però, provoca anche il reset del micro. Il programma non prosegue dal punto in cui era stato bloccato dall’istruzione sleep, ma ricomincia dall’inizio.
- Un impulso di WDT time out.
- Un interrupt esterno determinato dal pin RB0/INT o da un cambio stato su portB o da una periferica interna.

 

Architettura interna e memoria del PIC16F887

 

 

Bibliografia:
Datasheet Microchip PIC16F887

 

Ultima modifica  

 
Privacy Policy Cookie Policy