24
Proiect microControlere Calita Valentin-Adrian grupa 434 F

Proiect microControlere

Embed Size (px)

DESCRIPTION

Proiect microControlere

Citation preview

Page 1: Proiect microControlere

Proiect microControlere

Calita Valentin-Adriangrupa 434 F

Page 2: Proiect microControlere

Cerinte:

Sa se citeasca 6 temperaturi in intervalul -200oC si 260oC cu 6 traducatoare de temperatura RTD Cu10 si sa se afiseze pe un afisaj 7 segment temperaturile individuale cat si temperatura minima. Se va folosi un microcontroler : AT90LS8535 produs de firma Atmel.

Page 3: Proiect microControlere

Proiectare:

Date tehnice microcontroler:

- 118 instructiuni , care aproape sunt executate intr-o singura instructiune.

- 32 de registrii generali pe 8 biti- 4 MHz frecventa maxima de lucru- 8 canale de iesire pe 8 biti- convertor CAN pe 10 biti- UART programabil- 2 numaratoare pe 8 biti- consumul microcontrolerului la 4 MHz,3V si 20oC : mod

activ :6,4 mA; idle : 1,9 mA si modul Power-down <1 uA- alimentarea :2.7-6V

Configuratia pinilor : (PDIP)

Page 4: Proiect microControlere

Schema bloc :

Page 5: Proiect microControlere

Descrierea pinilor:

VCC – alimentarea la 5 VGND – masaPORT A – este conectat la traducatoarele de temperatura si tot odata acest port reprezinta si intrarea in convertorul analog-digitalPORT B – este conectat la butoanePORT C –este multiplexatorul pentru afisorPORT D –este conectat la afisorRESET – pinul care reseteaza microprocesorul chiar daca se primeste impuls de ceas.Impulsul de resetare trebuie

sa dureze mai mult de 50 nsXTAL1,XTAL2 – oscilatorul externAVCC – alimentarea pentru CAN AREF – tensiunea de referinta pentru CANAGND – punctul de masa al CAN-ului

Oscilatorul extern :

Page 6: Proiect microControlere

Arhitectura interna : Microprocesorul AT90LS8535 are o structura RISC cu 32 de registri generali de 8 biti fiecare,care sunt accesati intr-un singur impuls de tact . Asta inseamna ca ALU executa o operatie logica intr-un singur ciclu.

Sase din cei 32 de registrii pot fi folositi ca trei registrii de 16 biti.Acesti registrii sunt denumiti X,Y si Z. Unitatea aritmetica logica poate realiza functii intre registrii sau intre un registru si o constanta.Operatiile cu un singur registru sunt executate tot in unitatea aritmetica logica.

Microprocesorul poate adresa direct registrii.Cei 32 de registrii sunt asignate adresela $00 pana la $1F.

Memoria de I/O are 64 de adrese pentru periferice : $20 pana la $5F.

Microprocesorul este realizat pe baza unei structuri Harvard . Acesta separa memoria de date de cea de program. Programul din memoria este executat cu ajutorul a doua structuri pipe-line.Cat timp o instructiune este executata,alta instructiune este aduca din memoria de program si decodata. Acest principiu face ca instructiunea sa fie executata intr-un singur ciclu.

Majoritatea instructiunilor sunt codate pe 16 biti.Fiecare adresa de memorie contine o instructiune de 16 sau 32 de biti.

La aparitia unei cereri de intrerupere PC este salvat in stiva si se executa procedura alocata intreruperii.Stiva se afla fizic in SDRAM si este limitata doar de dimensiunea acesteia. Toate programele trebuie sa reseteze SP la inceputul lor. Adresa de inceputul a stivei este pe 10 biti si este o locatie unde se poate scrie si citi.

Memoria SDRAM este de 512 biti si aceasta poate fi accesata cu 5 moduri de adresare.Memoria are o structura liniara.

Page 7: Proiect microControlere

Convertorul analogic-digital

Convertorul are o rezolutie de 10 biti,timpul de conversie este intre 65 si 260 us,8 intrari multiplexate care permit ca portul A sa fie folosit ca intrare in CAN.

Schema bloc a convertorului:

CAN-ul converteste o tensiune analogica la o valoarea numerica de 10 biti aproximand succesiv.Valoarea minima este setata de AGND si valoarea maxima este data de AVCC. Portul de intrare este selectat daca se scrie in ADMUX.Orice intrare a portului A poate fi selectata o singura intrare in convertorul analogic-numeric.

Convertorul poate functiona in doua moduri : Single Conversion si Free Running.In primul mod fiecare conversie este activata de user,iar in a doua se scrie constant in registrul ADC-urului.Bitul ADFR din registrul ADCSR

Page 8: Proiect microControlere

selecteaza cele doua moduri . ADC-ul este activat daca se selecteaza bitul ADEN din ADCSR . ADC-ul nu consuma putere cand bitul ADEN nu este setat.

Conversia incepe atunci cand este scris 1 logic in ADSC.Acest bit este setat automat in 0 cand conversia se termina.Dupa ce se termina conversia rezultatul de 10 biti este trecut in ADCH si ADCL.

Senzorul de temperatura

Senzorul de temperatura este relizat din Cupru si are coeficientul de temperatura 0.00427 in oC. Rezistenta traducatorului la 0oC este de 10 ohm. Acuratetea la 0oC este de ±.2%.Acesta este realizat de firma Pyromation.

El este realizat cu un singur fir .Configuratia fizica a senzorilor :

Deci daca aplicam o sursa de curent constanta de 10 mA o sa avem la iesire o tensiune intre 10 si 200 mV.

Page 9: Proiect microControlere

Schema sursei de curentTemperatura afisata se calculeaza astfel :

Convertorul analogic-numaric are tensiunea de referinta de 5V . El este pe 10 biti deci :

Dependenta traductorului de temperatura :

temperatura RTensiunea de

intrare nr in zecimal°C ohm mv dat de CAN

-200 1,058 10,58 52-190 1,472 14,72 72-180 1,884 18,84 92-170 2,295 22,95 112-160 2,705 27,05 132-150 3,113 31,13 152-140 3,519 35,19 172-130 3,923 39,23 192-120 4,327 43,27 211-110 4,728 47,28 231-100 5,128 51,28 251-90 5,526 55,26 270-80 5,923 59,23 289-70 6,318 63,18 309-60 6,712 67,12 328

NR CAN=tensiune(mv)*4,887

Temp=0.525*numarul de la CAN-230

Page 10: Proiect microControlere

-50 7,104 71,04 347-40 7,49 74,9 366-30 7,876 78,76 385-20 8,263 82,63 404-10 8,649 86,49 4230 9,035 90,35 4420 9,035 90,35 44210 9,421 94,21 46020 9,807 98,07 47930 10,194 101,94 49840 10,58 105,8 51750 10,966 109,66 53660 11,352 113,52 55570 11,738 117,38 57480 12,124 121,24 59290 12,511 125,11 611

100 12,897 128,97 630110 13,283 132,83 649120 13,669 136,69 668130 14,055 140,55 687140 14,442 144,42 706150 14,828 148,28 725160 15,217 152,17 744170 15,607 156,07 763180 15,996 159,96 782190 16,386 163,86 801200 16,776 167,76 820210 17,166 171,66 839220 17,555 175,55 858230 17,945 179,45 877240 18,335 183,35 896250 18,726 187,26 915260 19,116 191,16 934

Transformarea de la binar la 7 seg(portC)

1

2 7 6

3 5 4

Numar numar binar in Configuratia portului C Numarul in

Page 11: Proiect microControlere

zecimal R0 1 2 3 4 5 6 7 HEXAZECIMAL0 0 0 0 0 1 1 1 1 1 1 0 3F1 0 0 0 1 0 0 0 0 0 1 1 602 0 0 1 0 1 0 1 1 0 1 1 6B3 0 0 1 1 1 0 0 1 1 1 1 794 0 1 0 0 0 1 0 0 1 0 1 5D5 0 1 0 1 1 1 0 1 1 0 1 5B6 0 1 1 0 1 1 1 1 1 0 1 5F7 0 1 1 1 1 0 0 0 1 1 0 318 1 0 0 0 1 1 1 1 1 1 1 7F9 1 0 0 1 1 1 0 1 1 1 1 7B

Schema bloc a montajului

- uP este AT90LS8535- butoanele sunt cu o singura pozitie si se poate apasa

numai un singur buton - RTD sunt Cu 10- Display este un MDE cu 4 digiti care este contrololat pe

portul D,iar pe portul C se transmite informatia care trebuie afisata

-bitul de semn este afisat cu un singur LED

Algoritmul programului :

Page 12: Proiect microControlere

- se initializeaza portulA de intrare,portulB de intrare, portulD de iesire si portul C tot de iesire

- se verifica apasarea unui buton de la portul B,adica daca se incarca portul B cu “1” logic

- atunci cand va fii apasat un buton se va converti tensiunea intr-un numar cu ajutorul convertorului si se va calcula temperatura dupa formula de mai sus.Aceasta temperatura ca fii afisata continuu pana cand se va apasa alt buton

- temperatura medie va fi actualizata continuuPROGRAMUL

.cseg

.org $0000;*****DEFINITII*********8.equ SREG=$3f.equ PORTA=$1b.equ DDRA=$1a.equ PINA =$19.equ PORTB=$18.equ DDRB=$17.equ PINB =$16.equ PORTC=$15.equ DDRC=$14.equ PINC =$13.equ PORTD=$12.equ DDRD=$11.equ PIND=$10.equ ACSR=$08.equ ADMUX=$07.equ ADCSR=$06.equ ADCH=$05.equ ADCL=$04.def ZL=r30.def ZH=r31.def min=r22 ;in registrul R1 salvez min.def butoane=r23 ;retinere butoane .def temp=r24 ;o variabila temporara.def zece=r25

Page 13: Proiect microControlere

.def temp2=r16loop main

main:ldi temp2,0x00out DDRA,temp2 ; SETARE PORT A DE INTRAREout DDRBtemp2 ; SETARE PORT B DE INTRAREldi temp2,0xFFout DDRC,temp2 ; SETARE PORT C DE IESIRE out DDRD,temp2 ; SETARE PORT D DE IESIRE ldi min,0xFF ; reg min se initializeaza cu valoarea cea

;mai mareldi temp2,0x38out ADCSR,temp2 ; incepere conversii -> 111000

; conversie free runningmov ZL,0x00

loop: in butoane,PINB ; citire butoane de la portul B ldi temp,0x01 cp temp,butoane breq BUTON1 ;sari daca este egal ldi temp,0x02 cp temp,butoane breq BUTON2 ldi temp,0x04 cp temp,butoane breq BUTON3 ldi temp,0x08 cp temp,butoane breq BUTON4 ldi temp,0x10 cp temp,butoane breq BUTON5 ldi temp,0x20 cp temp,butoane breq BUTON6 ldi temp,0x40 cp temp,butoane

Page 14: Proiect microControlere

breq BUTON7 call AFISARE / se afiseaza in continuu continutul lui ZLjmp loop ; reia ciclul loop

BUTON1: ;subrutina pentru apasarea butonului 1 clr temp2 ldi ADMUX,temp2 ; selectare primul traductor in ZL,ADCL in ZH,ADCH ldi temp,ZH lsr ZL ;impart cu 2 lsr temp lsr temp ; impart cu 4 add ZL,temp ; acuma in ZL am numarul temperaturii

; s-a folosit formula de calcul de mai sus call AFISARE

BUTON 2: clr temp2 ldi ADMUX,temp2 ; selectare traductor in ZL,ADCL in ZH,ADCH ldi temp,ZH lsr ZL lsr temp lsr temp add ZL,temp call AFISAREret ; intoarcere din subrutina

BUTON 3: ldi temp2,0x03 ldi ADMUX,temp2 ; selectare traductor in ZL,ADCL in ZH,ADCH ldi temp,ZH lsr ZL lsr temp lsr temp

Page 15: Proiect microControlere

add ZL,temp call AFISAREret ; intoarcere din subrutina

BUTON 4: ldi temp2,0x04 out ADMUX, temp2 ; selectare traductor in ZL,ADCL in ZH,ADCH ldi temp,ZH lsr ZL lsr temp lsr temp add ZL,temp call AFISAREret ; intoarcere din subrutina

BUTON 5: ldi temp2,0x05 out ADMUX,temp2 ; selectare traductor in ZL,ADCL in ZH,ADCH ldi temp,ZH lsr ZL lsr temp lsr temp add ZL,temp call AFISAREret ; intoarcere din subrutina

BUTON 6: ldi temp2,0x06 out ADMUX,temp2 ; selectare traductor in ZL,ADCL in ZH,ADCH ldi temp,ZH lsr ZL lsr temp lsr temp

Page 16: Proiect microControlere

add ZL,temp call AFISAREret ; intoarcere din subrutina

BUTON 7: Ldi temp2,0x07 out ADMUX,temp2 ; selectare traductor in ZL,ADCL in ZH,ADCH ldi temp,ZH lsr ZL lsr temp lsr temp add ZL,temp call AFISAREret ; intoarcere din subrutina

AFISARE: ;subrutina de afisare ldi temp,min sub temp,ZL tst temp ; testare daca ZL>min ldi min,zl ; daca da atunci mutare ZL in min

cbi PORTD,4 ; stergere setare semn tst ZL ; testare daca ZL este negativ sbrc sreg,4 ; skip daca nu e negativ sbi PORTD,4 ; setare semn ldi temp,ZL ldi zece,0x1010; am setat numarul 10 call impartire ;fac impartire la 10rezultatul se pune in r0

ldi temp,r0 call impartire ;mai fac o data impartirea la zece ;acuma am in r0 prima cifra a numarului scrisa in baza 2

call AFISARE_CIFRA3 ; afisarea lui r0 (4 biti )

Page 17: Proiect microControlere

;acum se fac 3 imultiri cu 10 mul temp,zece ldi temp,r0 mul temp,zece sub ZL,r0 ;acuma mai sunt numai doua cifre

ldi temp,ZL call impartire; call AFISARE_CIFRA2 mul temp,zece sub ZL,r0 ldi r0,ZL call AFISARE_CIFRA1 ret

impartire: ;impartirea la zece se face=2-3-2-5+2-7

;numarul se citeste din temp shi ;se pune in r0

mov r0,temp lsr r0 ;impartire la 2^-3

lsr r0 lsr r0

mov r1,temp lsr r1 ;impartire la 2^-5 lsr r1 lsr r1 lsr r1 lsr r1 sub r0,r1 ;fac scaderea mov r1,temp lsr r1 lsr r1 lsr r1 lsr r1 lsr r1 lsr r1 lsr r1 add r0,r1 ;fac adunarea;gata am in r0

Page 18: Proiect microControlere

ret

AFISARE_CIFRA3: ;afisare continut r0,in afisorul 3 ldi temp2,0x04 out PORTD,temp2 ;100 AFISARE_CIFRA;ret

AFISARE_CIFRA2: ;afisare continut r0,in afisorul 2 ldi temp2,0x02 out PORTD,temp2 ;010 AFISARE_CIFRA;ret

AFISARE_CIFRA1: ;afisare continut r0,in primul afisorul ldi temp2,0x01 out PORTD,temp2 ;001 AFISARE_CIFRA;ret

AFISARE_CIFRA: ;afisare o cifra cp ro,0x00breq CIFRA0cp ro,0x01breq CIFRA1cp ro,0x02breq CIFRA2cp ro,0x03breq CIFRA3cp ro,0x04breq CIFRA4cp ro,0x05breq CIFRA6cp ro,0x07breq CIFRA7cp ro,0x08breq CIFRA8cp ro,0x09breq CIFRA9

Page 19: Proiect microControlere

ret

CIFRA0: ldi temp2,0x3F out PORTC,temp2ret

CIFRA1: ldi temp2,0x60 out PORTC,temp2retCIFRA2: ldi temp2,0x6B out PORTC,temp2retCIFRA3: ldi temp2,0x79 out PORTC,temp2retCIFRA4: ldi temp2,0x5D out PORTC,temp2retCIFRA6: ldi temp2,0x5F out PORTC,temp2retCIFRA7: ldi temp2,0x31 out PORTC,temp2retCIFRA8: ldi temp2,0x7F out PORTC,temp2retCIFRA9: ldi temp2,0x7B out PORTC,temp2ret

Page 20: Proiect microControlere

.end