pic 16f628 timers n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
PIC 16F628 Timers PowerPoint Presentation
Download Presentation
PIC 16F628 Timers

Loading in 2 Seconds...

play fullscreen
1 / 48

PIC 16F628 Timers - PowerPoint PPT Presentation


  • 215 Views
  • Uploaded on

PIC 16F628 Timers. Timer 1. Timer1 är en 16-bitarsräknare. Man når den som två 8 bitarsregister TMR1H och TMR1L . Timer1 kan räkna yttre pulser, eller klockas av en egen klocka (ofta med klockkristall 32,768 kHz), eller klockas av processorklockan.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'PIC 16F628 Timers' - bazyli


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
pic 16f628 timers
PIC 16F628 Timers

William Sandqvist william@kth.se

timer 1
Timer 1

Timer1 är en 16-bitarsräknare. Man når den som två 8 bitarsregister TMR1H och TMR1L.

Timer1 kan räkna yttre pulser, eller klockas av en egen klocka (ofta med klockkristall 32,768 kHz), eller klockas av processorklockan.

När Timer1 ”räknar runt” sätts en bit TMR1IF (som också kan användas till interrupt).

William Sandqvist william@kth.se

t1con
T1CON

William Sandqvist william@kth.se

hur l ser man fr n en 16 bit free running timer1
Hur läser man från en 16-bit "free running" Timer1?

Timer1 är en 16-bitarsräknare. Den måste läsas av som två 8-bitarstal, de 8 mest signifikanta bitarna TMR1H och de 8 minst signifikana bitarna TMR1L. Detta kan vara ett problem eftersom Timern kan "slå runt" mellan avläs-ningarna av 8-bits talen. Följande kod visar det säkra sättet ( Interrupt måste vara avstängt under avläsningen):

longunsignedint time;unsignedchar TEMPH;unsignedchar TEMPL;TEMPH = TMR1H;TEMPL = TMR1L;if (TEMPH == TMR1H) /* Timer1 has not rolled over = good value */ { time = TEMPH*256; time += TEMPL; }else /* Timer1 has rolled over - no new rollover for some time */ /* lots of time to read new good values */ { time = TMR1H*256; time += TMR1L; }

William Sandqvist william@kth.se

hur skriver man till en 16 bit free running timer1
Hur skriver man till en 16-bit "free running" Timer1?

Det kan också vara problematiskt att skriva till en 16-bitarsräknare eftersom det måste ske som två 8-bitarstal. Detta är det säkra sättet (Interrupt måste vara avstängt under skrivningen):

TMR1L = 0; /* clear low byte = no rollover for some time */TMR1H = 12345/256; /* high byte of constant 12345 */TMR1L = 12345%256; /* low byte of constant 12345 */

Talet 12345 ryms i 16 bitar. Med heltalsdivision / och modulo % delas en konstant enkelt upp i två 8-bitarsdelar. Ett annat sätt är att använda hexadecimala konstanter:

123410 = 04D216

TMR1H=0x04

TMR1L=0xD2

William Sandqvist william@kth.se

ccp synkroniseringsregister
CCP synkroniseringsregister

CCP-enheten, Capture/Compare/(PWM)

PIC-processorena kan vara utrustade med en eller flera CCP-enheter (Capture/Compare/PWM). Varje CCP innehåller ett 16-bitarsregister ( 2×8 bit, CCPRH och CCPRL ) som har synkronisering i hårdvaran mot 16-bitarstimern TIMER1.

Detta så att man ska kunna undvika att läsa och skriva TIMER1 direkt.

William Sandqvist william@kth.se

att m ta digitala pulser r en av pic processorns huvuduppgifter
Att mäta digitala pulser är en av PIC-processorns huvuduppgifter

Otaliga givare har som utstorhet någon form av digitala pulser:antal, tid, periodtid, frekvens, dutycycle …Här följer några exempel:

Medströmsmätare. Omloppskulan strömmar med vätskan och passerar fotodioden varje varv.

GIvaren används som bensin-mätare, antalet pulser från foto-dioden summeras som förbrukat bränsle.

William Sandqvist william@kth.se

propeller och turbin m tare
Propeller och turbin -mätare

Pulsfrekvensen är proportionell mot strömningshastigheten .

William Sandqvist william@kth.se

ex antal
ex. Antal

Kugghjulsmätare. Vätska förflyttas i ”kuggluckorna”. Inget läckage, kan mäta mycket små vätskemängder (upplösningen är volymen i en kugglucka). Används som bensinmätare på bensinstationerna. Antalet vridningsvarv är ett mått på vätskemängden.

William Sandqvist william@kth.se

ex pulstid
ex. Pulstid

Momentmätare. Då ett vridmoment överförs med en roterande axel vrids (skjuvas) denna så att kugg-hjulen vrids i förhållande till varandra. Det blir en blir en mätbar tids-skillnad mellan pulserna från givar-elementen, som känner av kuggtopparnas passag.

Vridmomentet kan räknas fram utifrån denna tids-skillnad med kännedom om axelns vridstyvhet.

William Sandqvist william@kth.se

ex pulstid1
ex. Pulstid

Laser Scan Micrometer. Mätobjektets diameter skuggar laserljuset.

William Sandqvist william@kth.se

ex pulstid antal
ex. Pulstid, antal

Personbilarnas förbränningsmotorer:

Varvtal och vinkel mäts mot ett kugghjul (”startkransen”) med en induktiv pulsgivare. Givaren ger en puls för varje kuggtopp. Varvtalet räknas ut från pulstiden mellan två kuggtoppar.

Ett ”indexmärke” markerar vinkeln 0°. (Alternativt kan en kugge ”saknas” vid 0°).

William Sandqvist william@kth.se

ex l g pulsfrekvens
ex. Låg pulsfrekvens

ABS-bromsar. När hjulet ”låser sig”, släpper det greppet mot marken. Detta upptäcker ABS-systemet och ”minskar” då på bromstrycket.

En pulsgivare integrerad i hjullagret ger en pulsfrekvens som är proportionell mot hjulets varvtal. ”Låst” hjul innebär låg pulsfrekvens.

William Sandqvist william@kth.se

givare integreras numera ofta i rena verkstadsprodukter
Givare integreras numera ofta i rena verkstadsprodukter

Hjullagerenhet med integrerad ABS-sensor. SKF.

William Sandqvist william@kth.se

induktiv abs givare spole
Induktiv ABS-givare (spole)

Det tandade metallhjulet är inbakat i kullagrets plast-tätning! (ex. SKF)

William Sandqvist william@kth.se

frekvensm tning

Lägre mätfrekvens kräver att mättiden förlängs genom att man delar ned referens-frekvensen fCLK med en prescaler.

Prescale 4

Frekvensmätning

Kvantisering.Räknaren räknar bara ”hela” pulser.

Direkt frekvensmätning:Antalet positiva flanker p under en period av TREF räknas (TREF=1/fCLK).

Hög mätfrekvens fMÄT tillsammans med lång mättid TREF minimerar inverkan av kvantiseringsfelet.( Räknaren räknar bara ”hela” pulser ).

William Sandqvist william@kth.se

periodtidm tning

Högre mätfrekvenser kan mätas med multiperiodtidmätning. Mätfrekvensen delas då ned med en faktor k innan mätningen.

Periodtidmätning

Alternativt kan man vid låg mätfrekvens göra en periodtidmätning. Detta är indirekt frekvensmätning. Mätfrekvensen får man genom att invertera räknevärdet.

Under en period av mätsignalen räknar man n klockpulser.

William Sandqvist william@kth.se

klockfrekvensens noggrannhet

Ex. Armbandsur kräver kristall. Kristaller har typiskt fel f  20 ppM (parts per million). f = 4 MHz  80 Hz.

Önskemål: uret får inte dra sig mer än 10 sek/månad. 10s/(30dgr·24tim·60min·60sek) = 25 ppM.

Ex. Tidtagarur 800m lopp. ( 2 minuters total mättid räcker troligen )Önskemål: upplösning 0,01 sek.1/(2min·60sek·100) = 0,1 %.

En RC-oscillator har typiskt 5% fel, om den inte trimmas. (R 1%, men C sällan bättre än 5%)

PIC16F690-processorns inre RC-oscillator är fabrikstrimmad [1%].Detta räcker inte …

Klockfrekvensens noggrannhet

Förutom kvantiseringsfel, dvs. att man bara räknar hela pulser, kommer man alltid att ha ett relativt fel som är lika stort som referensfrekvensens fel.

William Sandqvist william@kth.se

yttre kristall
Yttre kristall

PIC-processorerna kan använda yttre kristall. C1 och C2 kan man ”skolka ifrån” på kopplingsdäck, men de är nödvändiga på ett mönsterkort.

William Sandqvist william@kth.se

yttre klockfrekvenssignal
Yttre klockfrekvenssignal

PIC-processorerna kan använda yttre klockfrekvenssignal.

Har man tillgång till en exakt frekvens kan PIC-processorn bli lika exakt. ( Vi har använt yttre klockfrekvens vid SmartCard-laborationen ).

William Sandqvist william@kth.se

atom normal
Atom-normal?

Radiokontrollerade klockor från tex. Claes Ohlsson & co är låsta till en atomnormal i tyskland.

En sådan klockmodul ger en puls per sekund (med undantag för sekund nr 60). En PPS-signal.

William Sandqvist william@kth.se

enklast r
Enklast R

När frekvens-noggrannheten inte har någon betydelse – yttre resistor.

Ju lägre klockfrekvens desto lägre strömförbrukning, och mindre risk för att PIC-processorn avger störningar.

William Sandqvist william@kth.se

ccp enheten
CCP-enheten

CCP-enheten är mycket flexibel och är förberedd att kunna användas till de flesta använda frekvensmätningsmetoderna.

William Sandqvist william@kth.se

ccp enheten1
CCP-enheten

CCP-registret 2×8 bit, CCPRH och CCPRL kan användas som ett 16-bitars Capture-register, eller ett 16-bitars Compare-register, eller som ett 10-bitars PWM Master/Slave DutyCycle-register.CCP-enheten innehåller också en 16-bitars komparator.

CCP-enheten har en portpinne, CCP-pinnen,för anslutning till omvärlden.

Man ställer in CCP-enheternas arbetssätt med CCPCON –registret, men eftersom CCP-enheterna antingen samverkar med Timer1 eller Timer2 måste man även göra timer-inställningar.

CCP-pinnen måste ställas in som ingång eller utgång med aktuellt TRIS-register.

William Sandqvist william@kth.se

ccpcon registret
CCPCON -registret

William Sandqvist william@kth.se

capture mode
Capture mode

William Sandqvist william@kth.se

capture mode1
Capture mode

Capture innebär att Timer1:s ögonblicksvärde 16-bitar kopieras över till de två 8-bitarsregistren CCPR1H och CCPR1L, när en förutbestämnd "händelse" inträffar på CCP1 - pinnen. De två 8-bitarstalen kan sammansättas till en 16-bitarsvariabel:

unsigned long time;time = CCPR1H*256 ;time += CCPR1L ;

Vid Capture sätts CCP1IF -flaggan. Man kan programmera så att avbrott, Interrupt, utlöses av detta.

1) Ställ in Timer1, internal/external, prescaler, synk/asynk, on/off.

2) CCP1-mode som Capture mode.

3) TRIS –register CCP-pinnen som ingång.

William Sandqvist william@kth.se

frekvensm tnings lab
Frekvensmätnings lab

Man kan ”skolka” från Zenerdioden!

7667-kretsen förstärker signalen från tongeneratorn.

William Sandqvist william@kth.se

frekvensm tnings lab1

t1

t2

Frekvensmätnings lab

William Sandqvist william@kth.se

setup timer1
Setup Timer1

Timer1, så snabbt som möjligt:

/* Setup TIMER1 *//* 00.xx.x.x.x.x -- xx.00.x.x.x.x Prescale 1/1 xx.xx.0.x.x.x TMR1-oscillator is shut off xx.xx.x.0.x.x - (clock input synchronization) xx.xx.x.x.0.x Use internal clock f_osc/4 xx.xx.x.x.x.1 TIMER1 is ON*/T1CON = 0b00.00.0.0.0.1 ;

William Sandqvist william@kth.se

setup ccp
Setup CCP

CCP1, fånga tiden för positiva flanker:

/* Setup CCP1 *//* 00.00.xxxx -- -- xx.xx.0101 Capture each positive edge*/CCP1CON = 0b00.00.0101 ;

William Sandqvist william@kth.se

v nta p flankerna
Vänta på flankerna

unsignedlong T, f, t1, t2;

CCP1IF = 0 ; /* reset flag */while (CCP1IF == 0 ) ; /* wait for capture */t1 = CCPR1H*256;t1 += CCPR1L;CCP1IF = 0 ; /* reset flag */while (CCP1IF == 0 ) ; /* wait for next capture */t2 = CCPR1H*256;t2 += CCPR1L;

/* Calculations */T = t2 - t1; /* calculate period */f = 1000000/T; /* calculate frequency */

William Sandqvist william@kth.se

t2 t1
t2 – t1

unsignedlong T, f, t1, t2;

Vad händer om t1 > t2 ?

Skillnaden t2-t1 beräknas modulo 216 så antalet tick mellan t1 och t2 blir alltid korrekt!

Windowsprogrammet Kalkylatorn räknar modulo 216 med inställningen Hex, Word.

William Sandqvist william@kth.se

f 1000000 t
f=1000000/T

unsignedlong T, f, t1, t2; /* max 65536 */

f = 1000000/T;

Skalfaktorn mellan f och T är 1000000. Timer1 klockas med 1 MHz.

Om T=1 (T=11) är mätfrekvensen 1 MHz. f > 65535, ryms ej.

Om T=10 (T=101) är mätfrekvensen 100 kHz. f > 65535, ryms ej.

Om T=100 (T=1001) är mätfrekvensen 10 kHz. f < 65535, ryms.

Om T=1000 (T=10001) är mätfrekvensen 1 kHz. f < 65535, ryms.

Om T=10000 (T=100001) är mätfrekvensen 100 Hz. f < 65535, ryms.

Om T > 65535 TMR1 slår runt kan bli vad som helst f = ?

William Sandqvist william@kth.se

m t 150 khz

?

The frequency is [kHz]: 00150

Mät 150 kHz?
  • Ändra programable event till var 16:e flank. (Multiperiodtidmätning)
  • Ändra skalfaktorn 1000000.
  • Ändra utskriften.

unsignedlong T, f, t1, t2; /* max 65536 */

f = 1000000/T;

The frequency is [Hz]: 00150

William Sandqvist william@kth.se

frekvensm tning hemma
Frekvensmätning hemma?

I stället för tongenerator använder Du det billiga frekvensdelar-chippet 74HC4040.

William Sandqvist william@kth.se

frekvensm tning hemma1
Frekvensmätning hemma?

Ändra konfigurationsinställningen till 3F91 så att:

RA6 = CLOCKOUT ( dvs. 1 MHz ut från PIC )

William Sandqvist william@kth.se

frekvensm tning hemma2
Frekvensmätning hemma?

Varför blir mätvärdena så otroligt exakta?

Har Du fått tag på en superbra PIC16F628?

?

3906

976

488

William Sandqvist william@kth.se

compare mode
Compare mode

William Sandqvist william@kth.se

compare mode1
Compare mode

Compare innebär att ett 16-bitars tal i CCPR -registren kontinuerligt jämförs med Timer1:s räknevärde. När överenstämmelse sker blir CCP-pinnen hög/låg/oförändrad beroende på inställningen i CCPCON. Överenstämmelsen kan programmeras att dessutom utlösa avbrott, interrupt.

OBSERVERA att CCP-pinnens TRIS-bit måste vara utgång, = 0.

Förutom påverkan på CCP-pinnen, finns det möjlighet att välja en så kallad "speciell händelse" (special event). För CCP1 innebär denna 0-ställning av Timer1, och för en ev. CCP2 dessutom start av AD-om-vandling (om det för övrigt är förberett för en sådan). Avbrott sker ej.

0-ställning av Timer1 innebär att periodtiden/frekvensen förändras.

William Sandqvist william@kth.se

ex reset timer1
Ex. Reset Timer1

Antag att vi vill att Timer1 ska ha periodtiden 1 ms (dvs. varva 1000 ggr/s).

/* fosc = 4 MHz, Timer1Period = 0,001 s (1000 Hz) */

/* Setup TIMER1 *//* 00.xx.x.x.x.x -- xx.00.x.x.x.x Prescale 1/1 xx.xx.0.x.x.x TMR1-oscillator is shut off xx.xx.x.0.x.x - (clock input synchronization) xx.xx.x.x.0.x Use internal clock f_osc/4 xx.xx.x.x.x.1 TIMER1 is ON*/T1CON = 0b00.00.0.0.0.1 ;

/* CCPR = (fosc/4) * Timer1Period = 1000000*0,001 = 1000 *//* CCPR = 1000 = 0x3E8 CCPR1H = 0x3, CCPR1L = 0xE8 */CCPR1H = 0x3;CCPR1L = 0xE8;CCP1CON = 0b00.00.1011; /* --. 00. special event *//* Timer1Period is now 1 ms */

Special event är att Timer1 0-ställs!

William Sandqvist william@kth.se

pwm mode
PWM mode

PWM-mode använder registren på ett helt annat sätt. Vi går igenom PWM tillsammans med Timer2.

William Sandqvist william@kth.se