Uživatel:Vancul1

Z MAM wiki

Přejít na: navigace, hledání

Obsah

[editovat] Samostatná práce

[editovat] Zadání

Řídicí obvod, který vždy cca 4 hodiny po rozednění na 1 hodinu sepne log. 0 na výstupu (otevřený kolektor, max. 20 mA) vnější zařízení - např. ATX zdroj z počítače. Zařízení má pracovat co nejdéle (mnoho let) na lithiovou baterii CR2032 3V/210mAh.

[editovat] Vstupní vyhodnocovací obvod

Jako vstupní vyhodnocovací obvod, který bude zjišťovat vnější stav by mohl být použit solární panel.

[editovat] Výstupní řídící obvod

Pokud by byl na výstupu použit bipolární tranzistor, docházelo by ke zbytečnému maření energie kvůli proudu tekoucímu do báze. Bude vhodné použit tranzistor řízený polem např. NMOS IRFZ44N používaný na cvičeních.

[editovat] Zapojení mikrokontroléru

Vzhledem k napájecímu napětí (3V), musíme zvolit mikroprocesor AVR s nižším napájecím napětím. Běžný AVR MCU pracuje od napětí 2.7V (např. ATMega88), pokud ale napětí baterie klesne pod tuto hodnotu, procesor nebude fungovat, ale baterie nemusí být nutně vybitá a může ještě nějakou dobu sloužit, proto jsem zvolil AVR s označením ATMega88V, který pracuje již od 1.8V. Sice se značně omezí možnost zvýšení frekvence MCU, ale u tohoto využití to nebude na škodu. V reálném řešení by bylo vhodné použít menší procesor jako např. ATTiny13V, ale vzhledem k možnosti předvedení zařízení v činnosti na cvičení jsme zvolili MCU ATMega88.

[editovat] Vývojový diagram

Vývojový diagram

[editovat] Schéma

Schéma

[editovat] Program


;***********************************************
;**                                           **
;**            SAMOSTATNÁ PRÁCE               ** 
;**                                           ** 
;** VYPRACOVALI: Lukáš Vančura, Maja Shuleska **
;**                                           **
;***********************************************
;
; ZÁHLAVÍ
;
.nolist
.include "m88def.inc"
.list

;
; VEKTORY PŘERUŠENÍ
;
.ORG 0x0000
RJMP USPORA ;Spustí úspornou smyšku SLEEP

.ORG 0x0001
RJMP RUTINA ;Obsluha přerušení při změně stavu pinu INT0

;
;  HLAVNÍ PROGRAM
;
RUTINA:

;
; NASTAVENÍ PŘERUŠENÍ
;
;
; Pro přerušení INT se používají 2 stavové registry EICRA a EIMSK
; Registrem EIMSK se nastavuje zda-li bude aktivní INT0 nebo INT1
; Registrem EICRA se nastavuje na co ma preruseni reagovat, jestli na
; sestupnou, vzestupnou hranu nebo logickou uroven
;

LDI R26,EICRA ; EICRA tvori nizsi cast adresy registru X
CLR R27 ; vyssi cast adresy je nulova
LDI R16,0b00000011 ; nastaveni preruseni pri vzestupne hrane
ST X, r16 ; zapsani hodnoty do registru EICRA

LDI R16,0b00000001 ; nastaveni preruseni na INT0 (PIN PD2)
OUT EIMSK,R16 ;zapsani hodnoty do registru EIMSK

SEI ; (Set Interrupt) - globalni povoleni preruseni

;
; ČEKÁNÍ 4 HODINY
;
WAIT4:
LDI	R17, 2

WAITING1:	
INC	R1
BRNE	WAITING1
INC	R2
BRNE	WAITING1
INC R3
BRNE    WAITING1
INC R4
BRNE    WAITING1
DEC	R17
BRNE	WAITING1
	
SBI DDRB, 4 ; nastavení portu PB4 jako výstup
SBI PORTB,4 ; nastavení log. "1" na výstupu

;
; ČEKÁNÍ 1 HODINU 
;
WAIT1:
LDI	R17, 144

WAITING2:	
INC	R1
BRNE	WAITING2
INC	R2
BRNE	WAITING2
INC R3
BRNE    WAITING2
DEC	R17
BRNE	WAITING2

CBI PORTB, 4 ; nastavení log. "1" na výstupu

;
; SLEEP
;

USPORA:

;  NASTAVENÍ PŘERUŠENÍ
;pokud byl program po prvnim zapnuti odkazan sem, musi se provest nastaveni preruseni
LDI R26,EICRA ; EICRA tvori nizsi cast adresy registru X
CLR R27 ; vyssi cast adresy je nulova
LDI R16,0b00000011 ; nastaveni preruseni pri vzestupne hrane
ST X, r16 ; zapsani hodnoty do registru EICRA

LDI R16,0b00000001 ; nastaveni preruseni na INT0 (PIN PD2)
OUT EIMSK,R16 ;zapsani hodnoty do registru EIMSK

SEI ; (Set Interrupt) - globalni povoleni preruseni


LOOP:
SLEEP
RJMP LOOP 

Osobní nástroje