Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Ceasul de timp real 1 (T/C1)


Ceasul de timp real 1 (T/C1)


Ceasul de timp real 1 (T/C1)

1. Prezentare generala

TC1 are 16-biti si poate selecta ca sursa de ceas CK(ceasul sistemului), CK prescalat (dvivizat), sau un pin extern - T1 pe pinul PB1 . El poate fi oprit dupa cum este descris in specificatia registrelor de control - TCCR1A si TCCR1B. In aceste registre se gasesc diferitele flag-uri de stare cum sunt: flag-ul de depasire (overflow) , flag-ul de egalitate la comparare (compare match) , sau flag-ul de eveniment de captura. In registrul de masti ale intreruperilor T/C1 - TIMSK, se gasesc setarile de activare/dezactivare a intreruperilor pentru T/C 1.

T/C1 prezinta suport pentru doua functii de comparare. In acest scop, ca surse de date sunt folosite registrele de comparare 1A si 1B , iar ca termen de comparare este folosit continutul numaratorului.



Functiile de comparare includ:

1. Stergere optionala a numaratorului in situatie de egal cu registrul de comparare A;

2.In situatia de egalitate cu A sau cu B, actiuni asupra pinilor de iesire de comparare OC1A (PD5) si OC1B (PD4).

T/C1 poate fi de asemenea folosit ca generator de impulsator cu modulatie in factor de umplere (PWM- "Pulse Width Modulator") de 8, 9, sau 10 biti. In aceasta stare numaratorul impreuna cu registrele OCR1A/OCR1B servesc drept PWM dual, fara impulsuri parazite, independente si cu impulsuri centrate

Functia de captura a cronometrului/contoar 1, pune la dispozitie o captura a continutului acestuia in registrul de captura pe intrare - ICR1. Functia este declansata de catre un eveniment extern pe pinul de captura pe intrare - ICP. Setarile pentru captura evenimentelor sunt definite de catre registrul de control TCCR1B. In afara de semnalul extern , si comparatorul analog poate fi setat sa declanseze captura T/C1.

2. Registre asociate intreruperilor T/C1

Nici o intrerupere nu va fi acceptata decat daca se seteaza flagul general de intreruperi I din SREG (adresa $3F).

Diversele intreruperi generate de TC1 sunt activate/dezactivate prin punere in 1/0 a bitilor corespunzatori din portul TIMSK (adresa $39), prezentat la lucrarea de laborator nr. 3.

  • Bit 5 - TICIE1 - validare intrerupere de captura a T/C1. Vector de intrerupere =$0005;
  • Bit 4- OCIE1A - validare intrerupere de egalare cu registrul de comparatie A al T/C1. Vector de intrerupere = $0006;
  • Bit 3- OCIE1B - validare intrerupere de egalare cu registrul de comparatie B al T/C1. Vector de intrerupere = $0007;
  • Bit 2- TOIE1 - validare intrerupere de depasire T/C1. Vector de intrerupere = $0008;

Activarea acestor intreruperi se face prin punerea in 1 logic a bitilor respectivi.

3. Registre de control ale T/C1

Registrul A de control al T/C1 - TCCR1A.

Registrul de control A al TC1 stabileste comportarea iesirilor de comparare in cazul aparitiei unei egalitati, precum si modul de lucru in PWM.

Bitul

$2F ($4F)

COM1A1

COM1A0

COM1B1

COM1B0

PWM11

PWM10

Citeste/

Scrie

C/S

C/S

C/S

C/S

C

C

C/S

C/S

Valoare initiala

Bitii 7, 6 - COM1A1, COM1A0: Bitii 1 si 0 ai modului de actiune asupra iesirii 1A de comparare.

Bitii de control COM1A1 si COM1A0 determina actiunea asupra iesirii pinului OC1A (PD5), la egalitatea de comparatie a T/C1 cu registrul de comparatie 1A. Deoarece aceasta este o functie alternativa pentru un port I/O, bitul de control a diretiei corespunzator trebuie sa fie setat (unu) pentru a stabili directia ca iesire a pinului. Configuratia bitilor este prezentata in tabelul 5.1.

Bitii 5, 4 - COM1B1, COM1B0: Bitii de control COM1B1 si COM1B0 determina actiunea asupra iesirii pinului OC1B (PD4), la egalitatea de comparatie a T/C1 cu registrul de comparatie 1B. Deoarece aceasta este o functie alternativa pentru un port I/O, bitul de control a diretiei corespunzator trebuie sa fie setat (unu) pentru a stabili directia ca iesire a pinului. Configuratia bitilor este urmatoarea :

Tabelul 5.1. Actiunea comparatiei T/C1 asupra pinilor OC1A si OC1B

COM1X1

COM1X0

Descriere

T/C1 deconectat de la iesirea pinului OC1X

Inverseaza linia de iesire a OC1X

Sterge linia de iesire a OC1X (la zero)

Seteaza linia de iesire a OC1X (la unu)

X= A sau B

In modul de lucru PWM, acesti biti au o functie diferita , descrisa in tabelul 5.2.

Atunci cand bitii COM1X1/COM1X0 sunt schimbati, intreruperile de comparare trebuiesc sa fie dezactivate prin stergerea bitilor de activare a intreruperii plasati in registrul TIMSK. Altfel, poate sa o intrerupere atunci cand bitii sunt schimbati.

Bitii 3, 2 - Res: Biti rezervati.

Sunt biti rezervati in AT90S8535 si sunt cititi intotdeauna zero.

Bitii 1, 0 - PWM11, PWM10: Biti de selectare a modului PWM.

Acesti biti selecteaza modul de operare ca PWM al TC1 dupa cum se prezinta in tabelul 6.2 (lucrarea de laborator nr. 6 ).

Tabelul 5.2. Selectarea modului de functionare ca PWM.

PWM11

PWM10

Descriere

Operarea PWM a T/C1 este dezactivata

TC1 este un PWM de 8-biti

TC1 este un PWM de 9-biti

TC1 este un PWM de 10-biti

Registrul B de control al T/C1 - TCCR1B.

Registrul B de control al T/C1 stabileste utilizarea dispozitivului de anulare a zgomotului, frontul activ pentru intrarea de captura, resetarea la egalitatea cu A si factorul de divizare/sursa de la intrarea in acest numarator.

Bitul

$2E($4E)

ICNC1

ICES1

CTC1

CS12

CS11

CS10

Citeste/

Scrie

C/S

C/S

C

C

C/S

C/S

C/S

C/S

Valoare initiala

Bitul 7 - ICNC1: Setarea dispozitivului de anulare a zgomotului la intrarea de captura(4 CKs).

Atunci cand bitul ICNC1 este sters (zero), functia de anulare a zgomotului pe intrarea de captura este dezactivata. In acest caz, captura este declansata odata cu primul front crescator sau descrescator pe intrarea de captura a pinului ICP. Atunci cand bitul ICNC1 este setat (unu), sunt masurate patru valori logice succesive pe intrarea de captura a pinului ICP, iar toate aceste valori trebuiesc sa fie in 1 (respectiv 0) in conformitate cu modul de declansare a intrarii de captura specificat de bitul ICES1. Frecventa de esantionare este frecventa ceasului XTAL.

Bitul 6 - ICES1: Selectarea frontului pe intrarea de captura 1.

Atunci cand bitul ICES 1 este sters (zero), continutul T/C 1 este transferat pe frontul crescator al intrarii de captura ICP, catre registrul de captura - ICR1. Cand ICES 1 este setat (unu), procesul este acelasi numai ca transferul se realizeaza pe frontul descrescator al intrarii de captura.

Bitii 5, 4 - Res: Biti rezervati.

Sunt biti rezervati in AT90S8535 si sunt cititi intotdeauna zero.

Bitul 3 - CTC1: Sterge T/C1 la egalitate de comparatie cu A.

Atunci cand bitul de control CTC1 este setat (unu), TC1 este resetat la $0000 in ciclul de ceas ce urmeaza unui egal cu A. Daca CTC1 este sters (zero), T/C1 continua numararea si nu este afectat de egalitatea rezultata in urma unei comparatii. O situatie de egal in urma unei comparatii este detectata in ciclul de ceas al CPU-ului care urmeaza producerii ei, deci aceasta functie se va comporta diferit atunci cand cronometrul va folosi o prescalare mai mare de 1. De exemplu, cand prescalerul este setat sa imparta prin 8, cronometrul va contoriza in felul urmator: . . . C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1 C, C, C, C, C, C, C, C C+1, 0, 0, 0, 0, 0, 0, 0, 0 . . .

In modul de lucru PWM, bitul nu are efect.

Bitii 2, 1, 0 - CS12, CS11, CS10: Bitii 2, 1 si 0 de selectare a ceasului.

Bitii 2, 1 si 0 de selectare a ceasului definesc sursa si prescalarea T/C1, ca in tabelul 5.3

Configuratia "Stop" pune la dispozitie o functie de activare/dezactivare a cronometrului. Modurile divizate ale CK-ului sunt direct scalate din oscilatorul ceasului sistemului. In situatia in care sunt folosite moduri pe pin externe, trebuie stabilita directia de intrare a pinului PB1 (0 logic in registrul de control a directiei DDRB).

Tabelul 5.3. Selectarea prescalerului ceasului 1.

CS12

CS11

CS10

Descriere

Stop, cronomertul/contoar este oprit.

CK

CK/8

CK/64

CK/256

CK/1024

Pinul extern T1, panta descrescatoare

Pinul extern T1, panta crescatoare

4. Portul asociat - TCNT1

TCNT1H (Biti 15 8)

TCNT1L (Biti 7 0)

Bit

$2D ($4D)

MSB

$2C ($4C)

LSB

Bit

Acest registru de 16 biti (per ansamblu) contine valoarea instantanee a TC1 pe 16 biti. Atunci cand CPU-ul acceseaza aceste registre, pentru a fi asigurata citirea si scrierea simultana atat a octetului superior cat si a octetului inferior , este folosit un registru temporar de 8 biti - TEMP. TEMP este folosit si in caz ca este necesara accesarea registrelor OCR1A, OCR1B si ICR1. Pentru accesarea registrelor atat din programul principal cat si din rutinele de intrerupere, pe durata accesarii este obligatoriu ca intreruperile sa fie dezactivate din programul principal (in timpul executiei subrutinelor de intrerupere, alte intreruperi sunt dezactivate automat). In caz contrar, este posibil ca intre transferurile celor doi octeti sa apara o intrerupere care sa afecteze accesul.

Scrierea in TC1.

Atunci cand CPU-ul scrie octetul superior - TCNT1H, datele scrise sunt plasate in registrul TEMP. Cand in pasul urmator CPU-ul scrie octetul inferior - TCNT1L, acest octet este combinat cu octetul deja existent in registrul TEMP, astfel incat drept rezultat toti cei 16 biti sunt scrisi simultan in registrul TCNT1 al T/C1. In consecinta, pentru a fi realizata o operatie de scriere completa a registrului de 16 biti, este obligatoriu ca sa fie scrisi ambii octeti, iar octetul superior TCNT1H sa fie scris primul.

Citirea din T/C1.

Atunci cand CPU-ul citeste octetul inferior TCNT1L, datele citite din acesta sunt transmise in CPU iar datele octetului superior TCNT1H sunt plasate in registrul TEMP. Cand CPU-ul relizeaza citirea octetului superior TCNT1H, el primeste datele din registrul TEMP. In consecinta, pentru a fi realizata o operatie de citire completa a registrului de 16 biti, se va citi intai octetul inferior - TCNT1L, si imediat dupa aceea si octetul superior.

Pentru modul de lucru PWM, T/C1 este conceput ca numarator direct sau direct/invers, cu posibilitate de citire si scriere. In situatia in care se scrie in TC1 si in acelasi timp este selectata si o sursa de ceas, el va continua numaratoarea in ciclul de ceas urmator, dar numai dupa ce a fost presetat cu valoarea scrisa.

5. Registrele de comparare ale T/C1

Registrul de comparare A al TC1 - OCR1A

OCR 1 AH (Biti 15 8)

OCR 1 AL (Biti 7 0)

Bit

$2B ($4B)

MSB

$2A ($4A)

LSB

Bit

Citeste/scrie

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

Val. initiala

Registrul de comparare B al TC1 - OCR1B

OCR 1 BH (Biti 15 8)

OCR 1 BL (Biti 7 0)

Bit

$29 ($49)

MSB

LSB

Bit

Citeste/scrie

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

C/S

Val. initiala

Registrele de comparare sunt registre citeste/scrie de 16 biti. Ele contin datele care trebuiesc comparate in mod continuu cu T/C1.

Actiunea asupra pinului de iesire OC1A sau OC1B la egalitatea de comparatie sunt specificate in registrul de control si stare al T/C1. O situatie de egalitate la comparatie apare numai atunci cand T/C1 numara pina la valoarea OCR. O scriere software care seteaza TCNT1 si OCR1A sau OCR1B la aceeasi valoare, nu va genera o situatie de egalitate la comparare.

Setarea flag-ului de intrerupere a comparatiei este relizata in CPU in situatia de egal la comparare, dar in ciclul de ceas ce urmeaza aparitiei evenimentului de comparare.

Deoarece se doreste ca atat octetul superior cat si cel inferior sa fie scrisi simultan, iar registrele de comparare OCR1A si OCR1B sunt registre de 16 biti, scrierea in OCR1A/B se face intern tot printr-un registru temporar TEMP. Deci, pentru a avea o operatie de scriere completa a registrului de 16 biti, mai intai trebuie scris octetul superior, fie el OCR1AH sau OCR1BH si obligatoriu dupa aceea si octetul inferior. Citirea se va face in ordine inversa - intii octetul inferior apoi cel superior.

In cazul accesarii TCNT1, OCR1A, OCR1B si a ICR1, se foloseste intern registrul TEMP, deci daca atat programul principal cat si rutinele de intrerupere acceseaza aceste registre, intreruperile trebuiesc a fi dezactivate din programul principal pe durata accesarii.

6. Registrul de captura de pe intrare al TC1- ICR1H si ICR1L.

T/C1 are asociat si un registru de 16 biti in care se poate face copierea hardware instantanee a continutului sau pentru diverse necesitati ale algoritmului.

ICR 1 H (Biti 15 8)

ICR 1 L (Biti 7 0)

Bit

$25 ($45)

MSB

LSB

Bit

Citeste/scrie

C

C

C

C

C

C

C

C

C

C

C

C

C

C

C

C

Val. initiala

Registrul de captura de pe intrare este un registru exclusiv de citire de 16 biti.

Atunci cand este detectat frontul crescator sau descrescator (corespunzatoare setarii frontului de captura de pe intrare - ICES1) al semnalului pe pinul de captura - ICP, valoarea curenta a T/C1 este transferata in registrul de captura pe intrare - ICR1. In acelasi timp, flag-ul de captura pe intrare - ICF1 - este setat (unu).

Pentru ca citirea ambilor octeti sa fie executata simultan, atunci cand ICR1 este citit, deoarece el este un registru de 16 biti, se foloseste intern un registru temporar TEMP. In consecinta, pentru ca operatia de citire a registrului de 16 biti sa fie completa, octetul inferior - ICR1L trebuie accesat primul si imediat octetul superior.

La accesarea TCNT , OCR1A si a OCR1B este de asemenea folosit registrul TEMP. In situatia in care pentru accesarea diferitor registre, atat programul principal cat si rutinele de intrerupere se folosesc de registrul TEMP, pe durata accesarii din programul principal intreruperile trebuiesc a fi dezactivate in programul principal.

7. Modul de lucru:

Se va initializa TC1 cu urmatorii parametri:

Fara iesiri la pini (bitii OC1A si OC1B);

Fara mod PWM

Aducere la 0 la egalitate cu OCR1A

Prescalare CK/1024

Toate intreruperile activate

OCR1A = $8000, OCR1B= $3000

1. Se va scrie un program care sa afiseze intr-o bucla continua octetul superior al T/C1. Un exemplu de realizare a programului este urmatorul:

.equ Bdir=$17 ; directia la reg. B (LED)

.equ leds=$18 ; reg. B

.equ Ddir=$11 ;directia la reg. D

.equ Dport=$12 ; portul D (push-button)

.equ Dpin=$10 ;pinii D (push-button)

;RESET

rjmp Reset

.ORG $0020

Reset:

;initializare stiva

ldi r16,$5f

out $3d,r16

;Initializare In-Out

ldi r16,$ff ;B ca iesire

out Bdir,r16

;initializare Timer1

ldi r16,$05

out $2e,r16

Loop:

in r16,$2c

in r16,$2d

com r16

out leds,r16

rjmp Loop

2. Se va scrie un program care prin intreruperi sa puna ledurile in 1 la egalarea cu OCR1A si in 0 la egalarea cu OCR1B.

3. Se va scrie un program care, prin intreruperi, sa incrementeze numarul format din cei 4 biti inferiori ai portului de leduri la egalarea cu OCR1A si sa decrementeze numarul format de cei 4 biti superiori ai portului de leduri la egalarea cu OCR1B.

Indicatii:

Chiar daca se doreste doar afisarea octetului superior al TC1, trebuiesc cititi ambii octeti;

Scrierea in registrele de 16 biti va trebui sa se faca conform regulilor enuntate anterior;

La punctele 2-4 va trebui dezactivata resetarea T/C1 la egalitate cu OCR1A;

Tabela de intreruperi va trebui sa foloseasca directive ORG pentru plasarea corecta a vectorilor;

Afisarea pe cele doua jumatati ale portului de iesire se va face prin mascarea cu instructiuni ANDI, deplasarea cu 4 spre stanga a semioctetului ce trebuie afisat in pozitia superioara si combinarea cu instructiunea OR a celor 2 semiocteti.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate