Sunteți pe pagina 1din 41

Microcontrolere

Curs 3

Ș.l. dr. ing. Mihai Niculescu


Cuprins

 Circuitul generator de tact la ATmega32


 Circuitul de reset la ATmega32
 Porturile ATmega32

2
Adresarea memoriei RAM

clr r27 ; Octet sup X = 0


ldi r26,0x60 ; Octet inf X = 0x60
ld r0,X+ ; r0 = conținutul de la adresa RAM 0x60(X post inc)
ldd r4,X+3 ; r4 = conținutul de la adresa RAM 0x64

3
Adresarea memoriei RAM

clr r29
ldi r28,0x60
st Y+,r0 ; la adresa RAM 0x60 se memorează conținutul din r0 (Y post inc)

st Y,r1

4
Adresarea memoriei Flash

cifre:
.DB 0x01, 0x02

ldi ZH,high(2*cifre)
ldi ZL,low(2*cifre)
lpm r16,Z ; r16 = 0x01

5
Organizarea stivei

 Pointerul de stivă: SPH + SPL

Stivă
 PUSH – decrementează pointerul
 POP – incrementează pointerul
 La execuția unei întreruperi uC
salvează automat PC în stivă și
restaurează la revenire
 Programatorul trebuie să asigure
inițializarea pointerului de stivă !

6
Organizarea stivei

ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
ldi r18, 0xA2
push r18
7
Generatorul de semnal de tact

8
Generator de tact cu cristal de cuarț

 Gama de frecvențe între 0,4 MHz – 8 MHz


 Frecvența este definită de frecvența de rezonanță
a cristalului

9
Generator de tact cu oscilator RC

 Gama de frecvențe între 0,1 MHz – 12 MHz


 f = 1/(3RC)
 C  22pF

10
Generator de tact cu oscilator intern

 Frecvențe fixe: 1, 2, 4 sau 8 MHz


 Se poate folosi un factor de calibrare
definit din fabrică
 Pinii XTAL1 și XTAL2 rămân neconectați

11
Generator de tact cu semnal extern

12
Resetarea uC

 La resetare toți regiștrii sunt aduși la valoarea prestabilită


 Se începe execuția codului de la locația vectorului de
întrerupere reset
 Sunt 5 surse de reset:
 Power-on reset
 Circuit de reset extern
 Watchdog reset
 Brown-out reset
 JTAG AVR reset
13
Resetarea uC

14
Power-on reset

15
Circuit de reset extern

16
Circuit de reset extern

17
Resetarea uC – registrul MCUCSR

 Biții 0 – 4 au rol de flag-uri care iau valoarea 1 când


se produce evenimentul de reset asociat
 Biții 0 – 4 pot fi dezactivați prin înscrierea valorii 0
 Biții 1 – 4 devin 0 la producerea power-on reset

18
Porturile ATmega32

 uC folosește pinii fizici ca să genereze semnale sau să


primească semnale din exterior – pini de I/O
 Pinii fizici sunt gestionați de uC prin modulul de porturi
 Pinii sunt grupați câte 8 în patru porturi: A, B, C, D

 Convenție de notare:

19
Aparține
0=< nr <=8
portului A
Porturile ATmega32

20
Porturile ATmega32

Rezistență de pull-up
Comutare ieșire

Circuite
suplimentare pentru
filtrare intrare 21
Porturile ATmega32

 Când pinul are funcție de port, valoarea


citită de pe pin este digitalizată de uC în
două stări: 1/High sau 0/Low
 Intervalele de High și Low depind de tipul
uC
 Se
poate folosi logică pozitivă sau logică
negativă
22
Porturile ATmega32

 Transformarea tensiunii de intrare în valoare digitală presupune


utilizarea unuia sau mai multor circuite adiționale
 O soluție este folosirea de bistabili de tip latch
 Dacă circuitul latch este declanșat de clock-ul sistemului,
reținerea valorii pinului se va face la fiecare tranziție a clock-
ului -> posibil să apară întârzieri !

23
Porturile ATmega32

 Un circuit latch cu o mărime de intrare nedefinită


poate să furnizeze la ieșire valoare nedefinită sau
oscilații
 Pentru a evita o astfel de apariție a meta-
stabilității se poate folosi un circuit de tip
Trigger-Schmitt
 Se obțin tranziții bine definite
 Sunt eliminate fluctuațiile tensiunii de intrare
24
Porturile ATmega32

 Circuitul Trigger Schmitt


utilizează 2 praguri de
comparație: Vlo și Vhi
 Tensiunea de ieșire a
Trigger Schmitt (B) este
generată în funcție de cum
variază nivelul tensiunii de
intrare (U) raportat la cele
2 praguri
25
Porturile ATmega32

 În serie cu un circuit Trigger Schmitt sunt utilizate


circuite latch

26
Porturile ATmega32

 Rezistorul de pull-up este ideal pentru


aplicații care utilizează butoane,
comutatoare sau optocuploare
 Rolul
unui astfel de rezistor este acela de a
conecta pinul de intrare la o tensiune
predefinită fără alte circuite externe

27
Porturile ATmega32

Fără rezistență pull-up Cu rezistență pull-up

Când butonul nu este apăsat 28


pinul este în stare instabilă
Porturile ATmega32
7 6 5 4 3 2 1 0
DDRx
 Pentru fiecare port sunt
alocați câte 3 regiștri
7 6 5 4 3 2 1 0
 DDRx : DDRA, DDRB, PORTx
DDRC, DDRD
 PORTx : PORTA, PORTB, 7 6 5 4 3 2 1 0
PORTC, PORTD PINx

 PINx: PINA, PINB, PINC,


PINDD

29

Px7 Px6 Px5 Px4 Px3 Px2 Px1 Px0


Porturile ATmega32
7 6 5 4 3 2 1 0
0 0 DDRB

7 6 5 4 3 2 1 0
0 1 PORTB

PB2 este intrare cu Rpu activă


PB6 este intrare cu Rpu inactivă 30
Porturile ATmega32

Pin de
intrare
PB6

7 6 5 4 3 2 1 0
0 PINB
31
Porturile ATmega32

Pin de
intrare
PB6

7 6 5 4 3 2 1 0
1 PINB
32
Porturile ATmega32
7 6 5 4 3 2 1 0
1 1 DDRB

7 6 5 4 3 2 1 0
1 0 PORTB

PB2 este ieșire și generează GND


PB6 este ieșire și generează +5V 33
Porturile ATmega32

Pin de
ieșire

34
Porturile ATmega32

 Exemplu: pinii PB1 și PB5 configurați ca ieșire, PB1 = +5V,


PB5 = GND
 Cod asm  Cod C
ldi r16,0b00100010 DDRB=0b00100010;
out DDRB,r16 PORTB=0b00000010;
ldi r16,0b00000010
out PORTB,r16
35
Porturile ATmega32

 Exemplu: pinii PB1 și PB5 configurați ca ieșire, PB1 = +5V,


PB5 = GND
 Cod C
DDRB=(1<<PB5)|(1<<PB1); 00100000
PORTB=(1<<PB1); OR
00000010
00100010
36
Porturile ATmega32

 Exemplu: pinii PC2 și PC7 configurați ca intrare, Rpu


activă
 Cod asm  Cod C
ldi r16,0b01100010 DDRC=0b01100010;
out DDRC,r16 PORTC=0b10000100;
ldi r16,0b10000100
out PORTC,r16
37
Porturile ATmega32

 PD0 este intrare sau


ieșire ?
Intrare !

 Rpu activă ?
DA !
38
Porturile ATmega32

 PD0 este intrare sau ieșire ?


Intrare !

 Rpu activă ?
NU !

39
Porturile ATmega32

 PD0 este intrare sau


ieșire ?
Ieșire !

40
Întrebări ?

41

S-ar putea să vă placă și