Cuprins
- 1. Definirea problemei 1
- 2. Consideratii teoretice cu descrierea componentelor utilizate 2
- 3. Comenzile utilizate 12
- 4.Schema bloc 13
- 5.Descrierea programului 15
- 6.Listingul programului 15
- 7.Schema electrica si simularile 18
- 8.Concluzie 19
- 9.Bibliografie 19
Extras din proiect
1. Definirea problemei: sa creem un program pe baza unui controller care va realiza functia de reglare a puterii unor incalzitoare
2. Consideratii teoretice cu descrierea componentelor utilizate:
Subrutina
Subrutina reprezintă o secţiune de program, care se va începe cu un indicator (eticheta L:) şi se va termina cu comanda ret. Subrutinele se vor utiliza în scopul evitării scrierii repetate a codului. Chemarea unei subrutine se va efectua prin comanda call şi devierile acestea rcall şi icall, urmată de numele etichetei (call L).
Notă: pentru comanda icall este necesar ca eticheta/adresa să fie încărcată preventiv în registrul Z (icall= Z←(L)). Atunci cînd are loc chemarea din subrutină, asemeni comenzii Push se va memoriza în stivă adresele comenzii curente. După executarea subrutinei, adresa de returnare se va extrage cu comanda ret, asemeni comenzii pop, program counterul va lua adresa comenzii ce urmează după comanda rcall care a chemat subrutina.
Lucrul cu stiva
Stiva în cadrul microcontrollerelor seriei AVR, este realizată cu memoria RAM şi indicatorul de stivă numit SP (steck pointer). Atunci cînd se execută o înregistrare în stivă, se utilizează comanda push.
Comenzile push şi pop trebuie utilizate în mod simetric, adică numărul de citiri şi înregistrări trebuie să fie egale. Acest moment permite evitarea spargerii stivei. Datele înregistrate în stivă se citesc în ordine inversă dopă principiul LIFO (left input first output).
Notă: înainte de a folosi stiva, în mod obligatoriu se iniţializează capul stivei (SP) la o valoare validă a a memoriei. Se recomandă de a se iniţializa indicatorul cap de stivă cu valoarea ultimei locaţii a memoriei. Pentru indicarea ultimei locaţii a memoriei existente pentru controllerul dat se va utiliza instrucţiunea RAMEND (valoare constantă). Registrul SP se află în domeniul adreselor registrelor periferici.
Iniţializarea stivei: LDI R16, HIGH (RAMEND)
OUT SPH, R16
LDI R16, LOW (RAMEND)
OUT SPL, R16
Modul de chemare a subrutinei: cînd are loc chemarea subrutinei, are loc înregistrarea valorii încrementate a lui program counter, care se va iniţializa cu adresa indicatorului subrutinei. Indicatorul de stivă se va decrementa de două ori deoarece program counterul va avea valoarea de 16 biţi.
RAM [SP] ← PC+1
RAM [SP] ← PCL
RAM [SP] ←PCH
Comanda ret se execută invers comenzii call, restabilind valoarea program counterului din stivă. În cazul cînd se utilizează subrutinele sau comenzile push şi pop, este obligatoriu inizializarea capului stivei, adică partea de iniţia lizare a microcontrollerului trebuie să conţină capul stivei.
Modulul ADC
Modulul ADC-ului de 10 biţi cu aproximare în serie intră în componenţa modelelor ATmega 8x, ATmega 163x, ATmega 32x, ATmega 323x, ATmega 64x şi ATmega128x. Parametrii de bază al acestui ADC sunt:
- toleranţă absolută: ±2 LSB;
- nelinearitatea integrală: ±5 LSB;
- rapiditatea: pînă la 15mii probe/s;
Modulul Convertor Analog-Digital este utilizat pentru conversia tensiunii analogice într-o valoare digitală (în AVR pe 10 biţi). De exemplu, poate fi utilizat pentru perceptarea ieşirii de la un senzor (de temperatură, presiune, etc.) în anumite intervale, sau pentru a executa anumite acţiuni în dependenţă de valoarea primită. Există mai multe tipuri de convertoare, dar cele utilizate în microcontrollerele AVR sunt convertoarele cu aproximare succesivă. Mai jos urmează o schemă simplificată a convertorului analog-digital prezent pe AVR:
Fig. 1 Schemă simplificată a convertorului analog-digital
La intrare avem un multiplexor analog-digital, care este utilizat la selectarea între opt intrări analogice diferite. Aceasta înseamnă că este posibilă conversia a opt semnale (bineînţeles că nu în acelaşi timp). La ieşire, valoarea convertită este înscrisă în regiştrii ADCL şi ADCH, deoarece regiştrii AVR au lăţime de 8 biţi este nevoie de o pereche p-u a stoca o valoare pe 10 biţi.
În modelele ATmega16x, ATmega32x, ATmega64x, ATmega128x pinii ADC-ului pot fi uniţi în perechi pentru a obţine în total pînă la 13 canale cu intrare diferenţială. Două canale în aşa caz au posibiliatatea de amplificare preventivă de 20 şi 200 ori a semnalului de intrare. În cazul coeficienţilor de amplificare 1x şi 20x rezoluţia efectivă a conversiei este de 8 biţi, pe cînd la coeficientul 200x – 7 biţi.
În calitate de tensiune de referinţă pentru ADC poate fi utilizată atît tensiunea microcontrollerului cît şi sursa internă sau externă de tensiune de referinţă. ADC-ul poate funcţiona în două regime:
- regimul conversiei unice, cînd startul fiecărei conversii este iniţializată de utilizator.
- regimul conversiei continue, cînd startul conversiei are loc continuu după anumite intervale de timp.
Tensiunea analogică la intrare trebuie să fie mai mare decît 0V, şi mai mică decît tensiunea de referinţă a convertorului – AREF. Tensiunea de referinţă este o tensiune externă care trebuie aplicată la pinul Aref a microcontrollerului. Valoarea convertită poate fi calculată folosind următorea formulă:
ADCH:L= ((Vin/Vref)*1023)
Deoarece convertorul are o rezoluţie de 10 biţi, avem 1024 valori posibile, adică dacă tensiunea de intrare Vin este egală cu 0, atunci valoarea convertită v-a fi zero, dacă Vin este egală cu Vref atunci valoarea convertită v-a fi 1023, iar dacă Vin este ½ din Vref atunci valoarea ADCH:L este 512. Acest proces de conversie se mai numeşte cuantificare, bineînţeles ce produce o eroare, numită eroare de cuantificare.
Regimurile de operare a convertorului analog-digital (CAD)
Convertorul Analog-Digital are două regimuri fundamentale de funcţionare: Conversie Unară (singulară) şi Conversie Continuă. În regim de conversie unară, este necesar de a iniţializa fiecare conversie, cînd este gata rezultatul este plasat în perechea de regiştri ADCH:L, şi nu se porneşte o altă conversie. În regim continuu, este necesar de a porni doar o dată conversia şi CAD v-a porni automat următoarea conversie în dată ce este finisată cea actuală.
Conversia analog-digitală nu este infăptuită instantaneu, este necesar de un anumit interval de timp, care depinde de frecvenţa de clock folosită de CAD şi este proporţională cu frecvenţa de clock şi poate fi între 50-200 kHz.
Dacă este de ajuns o rezoluţie de conversie mai mică de 10 biţi, frecvenţa CAD poate fi mărită prin ajustarea unui prescaler prezent în CAD, care divide frecvenţa de clock la un anumit coeficient, setat prin intermediul biţilor ADPS2:0 descrişi mai jos.
Preview document
Conținut arhivă zip
- Reglarea Puterii de Iesire a Ventilatoarelor.docx