news : VI SENTITE INGANNATI DAI PRODOTTI MY-WAY E 4YOU DI BANCA121 E MPS ? CLICCA QUI

in ricostruzione..

HARDWARE PIC (appunti)


Il TIMER0 o TMR0

IL convertitore AD del PIC16F87x

Uscita PWM PIC16F628

Lo sapevi che....


IL TIMER0

Il tmr0 è un registro che viene incrementato direttamente dall'hardware del Microcontroller , quindi , indipendemente dall'esecuzione del programma.

Caratteristiche:

Grandezza  8 bit ( 0 - 255 ) ; Lettura e Scrittura ; 8 bit Prescaler ; internal e external Clock ; interrupt on overflow ;

 

 

Funzione dei bit del registro OPTION_REG:

TOCS Seleziona la fonte di clock per l'incremento del TMR0. TOCS=0 corrisponde a selezionare la frequenza dell'oscillatore diviso quattro.TOCS=1 seleziona come fonte il pin RA4/TOCKI.
TOSE Seleziona il fronte di clock del pin RA4. =1 high-to-low , =0 low-to-high
PS2:PS0 assegnano il valore di divisione del Prescaler (vedi tabella sotto).
PSA

=0 la fonte di clock selezionata con TOCS passa per il prescaler

=1 la fonte di clock selezionata con TOCS non passa per il prescaler

 

Valore del prescaler in funzione dei bit PS2:PS0

PS2:PS0 PRESCALER
000 2
001 4
010 8
011 16
100 32
101 64
110 128
111 256

Esempio:

Quarzo 4 MHz , TOCS=1 , PS2:PS0 = 001 , PSA=0

avremo che il TMR0 sarà incrementato ogni

 ( 4Mhz/4 ) / 4 = 250.000 Hz

 


CONVERTITORE AD PIC16F87X

Il PIC16F877 possiede ben 8 ingressi analogici di tipo sample and hold con risoluzione di 10 bit.

Abbiamo quattro registri per interagire con il convertitore:

 - ADRESH - Parte alta risultato della conversione ( es 000000XX )

 - ADRESL - Parte bassa risultato della conversione ( es XXXXXXXX )

 - ADCON0 e ADCON1 - Resgistri di controllo

 

ADCON0 è diviso come segue:

ADCS1

ADCS0

CHS2

CHS1

CHS0

GO/NDONE

NA

ADON

 - ADCS1:ADCS0 selezionano la frequenza di clock per il convertitore (00=Fosc/2 ; 01=Fosc/8 ; 10=Fosc/32 ; 11=Frc(clock from int. A/D RC osc)

 - CHS2:CHS0 selezionano il canale AD (000=RA0;001=RA1;010=RA2;011=RA3;100=RA5;101=RE0;110=RE1;111=RE2)

 - GO/DONE avvia la conversione e visulizza il termine della conversione.Per attivare la conversione , poniamo questo bit a 1 (operazione GO);

   successivamente testiamo lo stato di questo bit e attendiamo che diventi uguale a zero (DONE,fine conversione).

 - ADON se posto a 1 il convertitore è in funzione mentre , se posto a zero il convertitore è spento e quindi non consuma corrente.

 

ADCON1 è diviso come segue:

ADFM

na

na

na

PCFG3

PCFG2

PCFG1

PCFG0

- ADFM seleziona il formato del risultato della conversione nei registri ADRESH e ADRESL

per ADFM=1 avremo:

ADRESH

ADRESL

000000xx

xxxxxxxx

 

per ADFM=0 avremo:

ADRESH

ADRESL

xxxxxxxx

xx000000

 

 - PCFG3:PCFG0 configurano le porte come ingressi AD e il tipo di riferimento di tensione (vedi datasheet 16F87X per maggiori informazioni).

Esempio: per ADCON1 = 10001110 configureremo la porta RA0 come input analogico e come Vref+ la Vdd e Vref- la Vss. Inoltre i 6 bit più significativi dell' ADRESH saranno forzati a zero.

 

Passi da eseguire per avere una conversione:

1. Configurare AD  (es. poniamo ADCON1 = 10001110 ).

2. Seleziniamo il canale (es. RA0), la frequenza di conversione (es. Fosc2), accendiamo il convertitore (ADON) ( es. poniamo ADCON0 = 00000001 ).

3. Avviamo la conversione GO/DONE=1 .

4. Attendiamo il termine della conversione (la conversione termina quando il fla GO/DONE diventa = 0 ).

5. Leggiamo il valore della conversione dai registri ADRESH e ADRESL .

 

Per eseguire una nuova lettura sempre dal canale RA0 ripetere il ciclo dal punto 3.

 NB . Assicurarsi di avere configurato il pin da utilizzare come ingresso analogico  anche nel registro TRISx come input.

 

Tempo di acquisizione o "A/D Sample Time"

 

Il tempo totale per acquisire un dato analogico dipende da due fondamentali tempi come

rappresentato in tabella.

 

T = T1+T2 = tempo totale dell'acquisizione

T1 - acquisition time o tempo necessario a caricare il condensatore

T2 - A/D conversion time

start     poniamo GO=1  

GO passa 0

 

Il T1 dipende da fattori come la resistenza di ingresso(generatore) la temperatura ecc.(vedi datasheet)

Il T2 dipende dalla frequenza di clock ed è uguale al Tad*12+100nS dove Tad è il tempo necessario

ad acquisire un singolo bit e 100nS il tempo perso per disconettere il condensatore.

Per una frequenza di clock = 10Mhz e avendo impostato come sorgente di clk per il convertitore la fosc/32 avremo:

 

Tad=1/(fosc/32)=32/10Mhz=3,2uS da cui avremo  T2=(3,2uS*12)+0,1uS=38,5uS

T2 per una Resistenza interna di:

 10K=    20 uS   (non superare mai i 10K)

 50ohm = 10,5 uS

Avremo quindi che l'acqisizione totale durerà per una Ri=50ohm , T=49 uS.

 

 


USCITA PWM PIC16F628

CCP = MODULO CAPTURE COMPARE PWM

DESCRIZIONE USO MODULO PER USCITA PWM:

Abbiamo un registro a 16 bit denominato CCPR1 diviso in due registri da 8 bit CCPR1L  e CCPR1H.

Attraverso CCPR1L definiamo l'MSB del duty-cycle .

 

Abbiamo poi un registro di controllo CCP1CON del modulo CCP.

 

*

*

x

x

1

1

*

*

Questo è il setting del CCP1CON  dove xx sono l'LSB del duty-cycle e i quatro bit a destra la configurazione in modalità PWM del modulo CCP.

 

Il periodo dipende dalla  formula : PWM period = [PR2+1]*4*Tosc*TMR2 prescaler .

 

PR2 è il registro associato al TMR2 e avrà valore 0/255.

 

Tosc è uguale a 1/Fosc.

 

TMR2 prescaler (T2CON<1:0> reg) dipende da due flag :

T2CKPS1

T2CKPS0

PRESCALER

0

0

1

0

1

4

1

*

16

 

Esempio:

Oscillatore 4Mhz , PR2=24,TMR2presaler=1 avremo il PWM periodo = 25*4*1/4000000*1 = 25uS

essendo PWM freq. l'inverso del periodo avremo : PWM freq = 40Khz

 

Il Duty Cycle % dipende invece dalla seguente formula :

DutyCycle= (CCPR1L:CCP1CON<5:4>)*Tosc*(TMR2 prescaler val)

 

esempio: vogliamo che i duty cycle sia del 50% e quindi pari a 12,5uS avremo che 

CCPR1L:CCP1CON<5:4>=50 da cui CCPR1L=12 CCP1CON<5:4>=10

 

Occorre inoltre :

1- impostare come uscita la porta PWM;

2- attivare il TMR2 attraverso il flag TMR2ON=1.


LO SAPEVI CHE .....

  1. 1. Il registri ADERESH e ADRESL possono essere utilizzati per uso comune se non utilizziamo l'AD converter .
  2.  

 

 

 

 

Ultimo aggiornamento: 20-06-04