Uživatel:Poczopet

Z MAM wiki

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

kontakty:

  • mail: p.poczos[at]sh.cvut.cz
  • ICQ: 269 101 033 <icq>269101033</icq>

Info o mne

  • študent FEL-u,obor KME
  • záujmy: lezenie, cyklistika, filmy, IT, kutilstvo všeho druhu


Obsah

[editovat] Samostatná práce

[editovat] Regulátor PC ventilátoru

  • popis zadania: Regulovanie teploty pomocou PC ventilátoru riadeného termočlánkom

Vypracovali: Peter Póczoš, Roman Kocman

[editovat] Popis práce:

Na klávesnici jsou přednastaveny tři tepelné hodnoty, na které požadujeme prostředí větráčkem zchladit. Teplota prostředí je snímána pomocí tepelného čidla přivedeného na AD převodník mikroprocesoru. Po stisknutí jednoho ze tří tlačítek se v případě nutnosti spustí větráček na maximální otáčky a začne chlazení prostředí. Zvolené hodnoty v semestrální práci jsou pouze ilustrativní. Při reálném zapojení by bylo nejdříve nutné proměřit teplotní čidlo a určit tak intervaly u požadovaných teplot.


[editovat] Zapojení

Soubor:Poczopet_schema1.PNG

[editovat] Zdrojový kód

===  Obsluhy preruseni  ===

======
.INCLUDE "m88def.inc"

.org 0x0000 			; hlavni program/preruseni RESET
	rjmp main
.org 0x0004			; preruseni od stisknuteho tlacitka
	rjmp tlacitko
.org 0x000D 			; preruseni od preteceni casovace
	rjmp kontrola
.org 0x0015 			; preruseni ADC conversion complete
	rjmp AD_prevod
=== Startup ===
main:				; Stack pointer init
	ldi r16,high(RAMEND)	; Main program start
	out SPH,r16 		; Set Stack Pointer to top of RAM
	ldi r16,low(RAMEND)
	out SPL,r16

;Nastavení portu vstup/výstup.

;PORTC 2 společný vystup klávesnice
;PORTC 3, 4, 5 - jednotlivá tlačítka klávesnice
;PORTC 1 větráček 
	sbi DDRC, 1
	cbi PORTC, 1

;Nastavení výstupu na sloupce matice.
	sbi DDRC, 3
	sbi DDRC, 4
	sbi DDRC, 5

;Nulování sloupců matice.
	cbi PORTC, 3
	cbi PORTC, 4
	cbi PORTC, 5	

;Defaultní nastaveni registru R20 – nastavení defaultní hodnoty z důvodu ochrany před hodnotou,
;která by mohla být v registru R20 uložena.
	ldi R20, 01

Nastavení ADC (viz AVR - instrukční soubor )

;aktivnÍ ADC bude ADC0, nastaven na pinu PORTC0 
	clr R27
	LDI R26, ADMUX
	LDI R17, 0b01100000 	; vybran ADC0, Vref z AVCC, zápis do registru zleva (8bitu v ADCH, 2 v ADCL)


;Aktivní ADC5, napájení Vcc + je nutné připojit, dále je nutné připojit kapacitor na pin AVCC (pin 20).
	st X,R17
	ldi R26, ADCSRA
	ldi R27, 0
	ldi R16, 0b00001000 	; povoleni přerušeni od ADC
	ST X, R16
;Nastavení sleep modu.
;(SMCR: 0,0,0,0,SM2,SM1,SM0,SE   SM2..0: Sleep Mode Select Bits, SE: Sleep enabled)
	ldi r16,0b00000001 	; Idle mode 
	out SMCR,r16 		; Sleep mode set

;Povolení přerušení od portu C.
	ldi r26, PCICR 		; load address of PCICR in Y low
	clr r27 		; load high byte with 0
	ldi r16,0b00000010 	; activate PCINT1 (pro port C)
	st X, r16 		; store new PCINT1


;Přerušení povoleno od bitu 2, portu C.
	ldi r26, PCMSK1 	; load address of PCMSK1 in Y low
	clr r27 		; load high byte with 0
	ldi r16,0b00000100 	; allow pin change interrupt on PC.2
	st X, r16 		; store new PCMSK1

	cbi DDRC, 2 		; pin C1 nastaven jako vstupní s úrovní "1" - pull-up rezistor
	sbi PortC, 2

;Přerušení povoleno od přetečení čitace 1.
	ldi R26, TIMSK1
	clr R27
	ldi R17, 0b00000001
	st X, R17
	
	sei			; interrupt enable
;Nastavení čítače.
;Počítá od nuly do FFFFH s nastavenou děličkou kmitočtu 1024.
	ldi R17, 0b00000000	
	ldi R26, TCCR1A
	st X, R17
	ldi R17, 0b00000001	; WGM2:1 (Fast PWM), CS2..0:001 (internal clock, prescale=1)
	ldi R17, 0b00011101	; 101 - nastaveni delicky /1024	(veeeeelmi pomale citani :D)
	ldi R26, TCCR1B
	st X, R17

	rjmp spanek
  • Hlavni program:
spanek:
	sleep
	nop
	rjmp spanek
tlacitko:
;Vzhledem k možnosti, že se vnitřní prvek tlačítka při stisknutí může rozkmitat, nastavuje se tvz.
;Uklidnění tlačítka.
	rcall wait
	sbi portC, 3
	sbi portC, 4
	sbi portC, 5


;Na základě zjištění, které tlačítko bylo stlačeno, zapíše se do registru R20 hodnota odpovídající
;požadované teploty,která odpovídá převodu z AD. 
	cbi portC, 3
	sbis portC, 2
	ldi R20, 01  
	sbi portC, 3

	cbi PortC, 4
	sbis portC, 2
	ldi R20, 02
	sbi portC, 4

	cbi portC, 5
	sbis portC, 2
	ldi  R20, 03

	cbi portC, 3
	cbi portC, 4
	reti


;Obsluha přerušení po dokončení převodu ADC.
AD_prevod:
	ldi R26, ADCH
	ldi R27, 0
	LD R21, X	 
;Horních 8bitu převodu se uloží do registru R21 na další zpracování.


;Vypnutí ADC převodníku.
	ldi R26, ADCSRA
	ldi R27, 0
	LD R16, X
	ldi R17, 0b01111111
	AND R16, R17
	ST X, R16

	CP R21,R20   ;R21-R20

BRCS VYP                 
;Branch if carry set -(flag cary)- C  = 1 pokud je záporný výsledek (=nizka teplota)  předchozí operace odskočí na VYP (ventilatora)
	sbi PORTC, 1
	rjmp RetAD

VYP:
	cbi PORTC, 1 
	
RetAD:
 	reti


;Zapnutí konverze ADC.
kontrola:
	ldi R26, ADCSRA
	ldi R27, 0
	LD R16, X
	ldi R17, 0b11000000
	OR R16, R17
	ST X, R16	
	reti
;Zpoždění pro uklidnění tlačítka.
WAIT:
	LDI	R16, 4		; LDI - Load Immediate
WAIT1:	
	INC	R1
	BRNE	WAIT1
	INC	R2
	BRNE	WAIT1
	DEC	R16
	BRNE	WAIT1

	RET
Osobní nástroje