Uživatel:Krctomas

Z MAM wiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Řádka 1: Řádka 1:
-
==Cvičení 4==
+
== Cvičení 4 ==
 +
 
'''ATtiny 2313'''  - Při stisku tlačítka 1 svítí červená LED, jinak zelená
'''ATtiny 2313'''  - Při stisku tlačítka 1 svítí červená LED, jinak zelená
Řádka 100: Řádka 101:
</pre>
</pre>
-
==Cvičení 5==   
+
== Cvičení 5 ==
-
'''ATmega88''' - Při stisku tlačítka 1 se větrák roztočí s hodnotou PWM danou R16
+
    
 +
'''ATmega88''' - Při stisku tlačítka 0-7 se větrák roztočí s rychlostí odpovídající 8 stupňové PWM. (Resp. prvních pár rychlostí bude zřejmě příliš malých, aby se větrák vůbec roztočil.)
<pre>
<pre>
-
;  
+
;;  
; example fan program for ATmega88
; example fan program for ATmega88
;
;
Řádka 111: Řádka 113:
; pin 16 (PB2, FAN). Fan runs when FAN output is log. H.
; pin 16 (PB2, FAN). Fan runs when FAN output is log. H.
;
;
-
; FAN is switched ON with switch between PC2 and PD2
+
; FAN is switched ON with numbers 0-7
 +
; Keyboard: Rows PD0 to PD3, columns PC1 to PC3
Řádka 134: Řádka 137:
SBI DDRB, FAN
SBI DDRB, FAN
-
; Basic keyboard init:
+
; Init:
 +
RCALL  FAN_OFF
 +
 
 +
; Keyboard init:
 +
CBI DDRC, 2 ;
 +
CBI DDRC, 3
 +
CBI DDRC, 4
-
; One switch of matrix keyboard is connected between PINC 2 a PIND 2
+
SBI PORTC, 2 ; set internal Pull-Ups for keyboard
-
; Zero values of DDRC, 2 and PORTB, 2 are implicit
+
SBI PORTC, 3
 +
SBI PORTC, 4
 +
SBI DDRD, 0
 +
SBI DDRD, 1
SBI DDRD, 2
SBI DDRD, 2
-
SBI PORTC, 2
+
SBI DDRD, 3
 +
CBI PORTD, 0
 +
CBI PORTD, 1
 +
CBI PORTD, 2
 +
CBI PORTD, 3
-
; Init:
+
GO:
-
RCALL  FAN_OFF
+
SBIS PINC,2
-
 
+
-
GO: SBIS PINC, 2
+
RCALL PWM  ; Simple PWM control of the FAN, if the key is pressed
RCALL PWM  ; Simple PWM control of the FAN, if the key is pressed
 +
SBIS PINC,3
 +
RCALL PWM
 +
SBIS PINC,4
 +
RCALL PWM
RJMP GO
RJMP GO
Řádka 156: Řádka 174:
;;;
;;;
;;;
;;;
 +
 +
 +
KEYPRESS:
 +
KEY0:
 +
SBI PORTD, 0
 +
SBI PORTD, 1
 +
SBI PORTD, 2
 +
CBI PORTD, 3 ;log. 0 to the row with *, 0, #, D
 +
SBIC PINC, 3
 +
RJMP KEY1
 +
LDI R16, 0 ;pressed key 0
 +
RJMP KEYRET
 +
 +
KEY1:
 +
CBI PORTD, 0 ;log. 0 to the row with 1, 2, 3, A
 +
SBI PORTD, 1 ;log. 1 on another three
 +
SBI PORTD, 2
 +
SBI PORTD, 3
 +
SBIC PINC, 2
 +
RJMP KEY2
 +
LDI R16, 1 ;pressed key 1
 +
RJMP KEYRET
 +
KEY2:
 +
SBIC PINC, 3
 +
RJMP KEY3
 +
LDI R16, 2
 +
RJMP KEYRET
 +
KEY3:
 +
SBIC PINC, 4
 +
RJMP KEY4
 +
LDI R16, 3
 +
RJMP KEYRET
 +
 +
KEY4:
 +
SBI PORTD, 0
 +
CBI PORTD, 1 ;log. 0 to the row with 4, 5, 6, B
 +
SBI PORTD, 2
 +
SBI PORTD, 3
 +
SBIC PINC, 2
 +
RJMP KEY5
 +
LDI R16, 4 ;pressed key 4
 +
RJMP KEYRET
 +
KEY5:
 +
SBIC PINC, 3
 +
RJMP KEY6
 +
LDI R16, 5
 +
RJMP KEYRET
 +
KEY6:
 +
SBIC PINC, 4
 +
RJMP KEY7
 +
LDI R16, 6
 +
RJMP KEYRET
 +
 +
KEY7:
 +
SBI PORTD, 0
 +
SBI PORTD, 1
 +
CBI PORTD, 2 ;log. 0 to the row with 7, 8, 9, C
 +
SBI PORTD, 3
 +
SBIC PINC, 2
 +
RJMP KEYRET
 +
LDI R16, 7 ;pressed key 7
 +
 +
KEYRET:
 +
CBI PORTD, 0 ; log. 0 on all rows for next key press catch
 +
CBI PORTD, 1
 +
CBI PORTD, 2
 +
CBI PORTD, 3
 +
RET
VERYSMALLWAIT:
VERYSMALLWAIT:
Řádka 194: Řádka 280:
RCALL FAN_OFF
RCALL FAN_OFF
RCALL VERYSMALLWAIT  
RCALL VERYSMALLWAIT  
-
 
INC R2
INC R2
Řádka 203: Řádka 288:
PWM:
PWM:
-
LDI R16, 8
 
MOV R17, R16
MOV R17, R16
INC R17
INC R17
Řádka 222: Řádka 306:
PWM_RET:
PWM_RET:
RET
RET
-
 
</pre>
</pre>

Verze z 20. 3. 2013, 18:17

Cvičení 4

ATtiny 2313 - Při stisku tlačítka 1 svítí červená LED, jinak zelená


; 
; example LED-show program for ATtiny 2313
;
; 2-color LED with 300 Ohm resistor in series is supposed to be
; connected between pins 12 (PB0, LED_X) and 13 (PB1, LED_Y).
;
; Color1 shines when LED_X is high and LED_Y is low
; Color2 shines when LED_Y is high and LED_X is low
; LED is off when LED_Y and LED_X are both low or both high


	.EQU DDRB = $17		; DDRB address
	.EQU PORTB = $18	; PORTB address
        .EQU PINB = $16

	.EQU LED_X = 0		; LED_X is on PB0, pin 12 of ATtiny2313
	.EQU LED_Y = 1		; LED_Y is on PB1, pin 13 of ATtiny2313

	.EQU DDRD = $11
	.EQU PORTD = $12
	.EQU PIND = $10

; Pins connected to LED are outputs, DDRx=1 (set):

	SBI DDRB, LED_X	; SBI - Set Bit in I/O Register
	SBI DDRB, LED_Y

	SBI DDRD, 4
	SBI PORTB, 2
GO:
	RCALL COLOR1
	RCALL WAIT
	SBIS PINB, 2
	RJMP GOP
	RCALL WAIT
	RJMP GO

GOP:
	RCALL COLOR2
	SBIC PINB, 2
	RJMP GO
	RJMP GOP

;;;
;;;
;;; P R O C E D U R E S
;;;
;;;
	
SMALLWAIT:
        LDI R16, 100
SMALLWAIT1:
	INC R1		; INC - Increment
	BRNE SMALLWAIT1	; BRNE - Branch if Not Equal (Z flag) 				
	DEC R16
	BRNE WAIT1
	RET             ; RET - Return from Subroutine

WAIT:
	LDI R16, 4	; LDI - Load Immediate
WAIT1:	INC R1          ; Bezi az do R1=255, dalsi krok - preteceni, R1=0
	BRNE WAIT1	; Pokud v R1 neni 0, skoc na WAIT1
	INC R2
;	BRNE WAIT1
;	DEC R16
	BRNE WAIT1
	RET
	
COLOR1:
        SBI PORTB, LED_X
	CBI PORTB, LED_Y	; CBI - Clear Bit in I/O Register
	RET 
COLOR2:
        SBI PORTB, LED_Y
	CBI PORTB, LED_X
	RET

COL3W:
	LDI R16, 2
COL3X: 	RCALL COLOR1
	RCALL SMALLWAIT
	RCALL COLOR2
	RCALL SMALLWAIT
	;INC R2
	;BRNE COL3X
	DEC R16
	BRNE COL3X
	RET

DARK:
        CBI PORTB, LED_X
	CBI PORTB, LED_Y
	RET

Cvičení 5

ATmega88 - Při stisku tlačítka 0-7 se větrák roztočí s rychlostí odpovídající 8 stupňové PWM. (Resp. prvních pár rychlostí bude zřejmě příliš malých, aby se větrák vůbec roztočil.)

;; 
; example fan program for ATmega88
;
; P4 CPU fan Ucc pin is supposed to be connected 
; to +12 V, GND pin is supposed to be connected 
; to FET Drain, Source on GND, Gate on 
; pin 16 (PB2, FAN). Fan runs when FAN output is log. H.
;
; FAN is switched ON with numbers 0-7
; Keyboard: Rows PD0 to PD3, columns PC1 to PC3 


	.EQU DDRB = $04
	.EQU PORTB = $05

	.EQU DDRC = $07
	.EQU PORTC = $08
	.EQU PINC = $06

	.EQU DDRD = $0A
	.EQU PORTD = $0B
	.EQU PIND = $09

;	.INCLUDE "m168def.inc"  ; replaces previous lines of the program

	.EQU FAN = 2


; Pin driving FAN is set as output:

	SBI	DDRB, FAN

; Init:
	RCALL   FAN_OFF

; Keyboard init:
	CBI DDRC, 2 ;
	CBI DDRC, 3
	CBI DDRC, 4

	SBI PORTC, 2 ; set internal Pull-Ups for keyboard
	SBI PORTC, 3
	SBI PORTC, 4

	SBI DDRD, 0
	SBI DDRD, 1
	SBI DDRD, 2
	SBI DDRD, 3

	CBI PORTD, 0
	CBI PORTD, 1
	CBI PORTD, 2
	CBI PORTD, 3

GO:
	SBIS	PINC,2
	RCALL	PWM   ; Simple PWM control of the FAN, if the key is pressed
	SBIS	PINC,3
	RCALL	PWM
	SBIS	PINC,4
	RCALL	PWM
	RJMP	GO


;;;
;;;
;;; P R O C E D U R E S
;;;
;;;


KEYPRESS:
KEY0:
	SBI 	PORTD, 0
	SBI 	PORTD, 1
	SBI 	PORTD, 2
	CBI 	PORTD, 3	;log. 0 to the row with *, 0, #, D	
	SBIC	PINC, 3
	RJMP	KEY1
	LDI		R16, 0		;pressed key 0
	RJMP 	KEYRET

KEY1:
	CBI 	PORTD, 0	;log. 0 to the row with 1, 2, 3, A
	SBI 	PORTD, 1	;log. 1 on another three
	SBI 	PORTD, 2
	SBI 	PORTD, 3	
	SBIC	PINC, 2
	RJMP	KEY2
	LDI		R16, 1		;pressed key 1
	RJMP	KEYRET
KEY2:
	SBIC	PINC, 3
	RJMP	KEY3
	LDI		R16, 2
	RJMP	KEYRET
KEY3:
	SBIC	PINC, 4
	RJMP	KEY4
	LDI		R16, 3
	RJMP	KEYRET

KEY4:
	SBI 	PORTD, 0
	CBI 	PORTD, 1	;log. 0 to the row with 4, 5, 6, B
	SBI 	PORTD, 2
	SBI 	PORTD, 3	
	SBIC	PINC, 2
	RJMP	KEY5
	LDI		R16, 4		;pressed key 4
	RJMP	KEYRET
KEY5:
	SBIC	PINC, 3
	RJMP	KEY6
	LDI		R16, 5
	RJMP	KEYRET
KEY6:
	SBIC	PINC, 4
	RJMP	KEY7
	LDI		R16, 6
	RJMP	KEYRET

KEY7:
	SBI 	PORTD, 0
	SBI 	PORTD, 1
	CBI 	PORTD, 2	;log. 0 to the row with 7, 8, 9, C
	SBI 	PORTD, 3	
	SBIC	PINC, 2
	RJMP	KEYRET
	LDI 	R16, 7		;pressed key 7

KEYRET:
	CBI PORTD, 0	; log. 0 on all rows for next key press catch
	CBI PORTD, 1
	CBI PORTD, 2
	CBI PORTD, 3
	RET
	
VERYSMALLWAIT:
	LDI R20, 0xFC
	MOV R1, R20
SMALLWAIT:
	INC	R1
	BRNE	SMALLWAIT
	RET

WAIT:
	LDI	R21, 4
WAIT1:
	INC	R1
	BRNE	WAIT1
	INC	R2
	BRNE	WAIT1
	DEC	R21
	BRNE	WAIT1
	RET
	
FAN_ON:
	SBI	PORTB, FAN
	RET

FAN_OFF:
	CBI	PORTB, FAN
	RET

FAN3W:
	LDI	R16, 0x20
FAN3X:
 	RCALL	FAN_ON
	RCALL	VERYSMALLWAIT  ; pulse ratio controlled by number of waits
	RCALL	VERYSMALLWAIT  ; 4:1 in this case
	RCALL	VERYSMALLWAIT
	RCALL	VERYSMALLWAIT
	RCALL	FAN_OFF
	RCALL	VERYSMALLWAIT 

	INC	R2
	BRNE	FAN3X
	DEC	R16
	BRNE	FAN3X
	RET

PWM:
	MOV 	R17, R16
	INC		R17
	LDI		R18, 0xF8
	OR		R18, R16
PWM_ON:
	DEC		R17
	BREQ	PWM_OFF
	SBI		PORTB, FAN
	RCALL 	VERYSMALLWAIT
	RJMP	PWM_ON
PWM_OFF:
	INC		R18
	BREQ	PWM_RET
	CBI		PORTB, FAN
	RCALL 	VERYSMALLWAIT
	RJMP	PWM_OFF
PWM_RET:
	RET
Osobní nástroje