; Henryk Więsyk
; 16.10.2007
; wersja 1.0 - przerobiona na ATTiny2313
; Dioda do masy z OC0A
; Wewnętrzny oscylator ustawiony na 1MHz (RC@8MHZ + CLKDIV8)
.include "tn2313def.inc"
;*********************************************
; Definicje
;*********************************************
.def czas1 = R17 ; licznik opóźnienia
.def czas2 = R18
.def temp = R19 ; bajt dla fazy
.cseg
.org 0x00
rjmp start ; reset
reti ; int0
reti ; int1
reti ; ticap1
reti ; tcoma1
reti ; tovf1
reti ; tovf0
reti ; urxc
reti ; udre
reti ; utxc
reti ; aco
reti ; pcint
reti ; tcomb1
reti ; tcoma0
reti ; tcomb0
reti ; usta
reti ; uovf
reti ; eerdy
reti ; wdtovf
;*********************************************
; Inicjalizacja
;*********************************************
start:
cli ; blokada przerwań
ldi temp, (1 << PB2) ; linia OCR0A wyjście
out DDRB, temp ; zapis do rejestru
sbi ACSR, ACD ; wyłącz komparator
ldi temp, (1 << CLKPCE)|(1 << CLKPS0)
out CLKPR, temp ; ustawienie preskalera
ldi temp, (1 << COM0A0)|(1 << COM0A1)|(1 << WGM00)
out TCCR0A, temp ; tryb PWM, kanał A clear-down
ldi temp, (1 << CS01) ; preskaler timera 0 = 8
out TCCR0B, temp ;
ldi temp, 0x06 ; zapis wartości do
out OCR0A, temp ; rejestru porównania
ldi ZL, low(jasnosc << 1)
ldi ZH, high(jasnosc << 1)
;*****************************************
; główna petla
;*****************************************
main:
dec czas1 ; pętla odliczająca czas
brne main
dec czas2
brne main
lpm temp, Z+ ; załaduj bajt z tablicy
com temp ; dla diody dołączonej do plusa negacja
out OCR0A, temp ; i ładuj PWM-a
ldi temp, low(jasnosc << 1) + 140
cp ZL, temp ; koniec tablicy?
brne main ; jeszcze nie to na początek
ldi ZL, low(jasnosc1 << 1)
ldi ZH, high(jasnosc1 << 1)
clr czas1 ; zeruj licznik opóźnienia
clr czas2
swieczka:
dec czas1 ; pętla odliczająca czas
brne swieczka
dec czas2
brne swieczka
lpm temp, Z+
com temp ; dla diody dołączonej do plusa
out OCR0A, temp
ldi temp, low(jasnosc1 << 1) + 200
cp ZL, temp
brne swieczka
ldi ZL, low(jasnosc << 1)
ldi ZH, high(jasnosc << 1)
clr czas1
clr czas2
rjmp main ; i od nowa...
; wartości współczynnika wypełnienia
.org 0x100
jasnosc:
.DB 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100
.DB 10 , 10 , 10 , 255 , 0 , 30 , 25 , 240 , 2 , 5
.DB 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10
.DB 100 , 66 , 90 , 120 , 250 , 160 , 10 , 22 , 230 , 67
.DB 134 , 234 , 56 , 76 , 10 , 10 , 10 , 10 , 100 , 200
.DB 0 , 100 , 0 , 200 , 250 , 100 , 10 , 40 , 200 , 250
.DB 10 , 100 , 10 , 40 , 80 , 190 , 250 , 137 , 89 , 250
.DB 255 , 190 , 160 , 20 , 35 , 58 , 36 , 98 , 82 , 16
.DB 0 , 250 , 0 , 123 , 36 , 159 , 178 , 95 , 12 , 100
.DB 49 , 169 , 250 , 25 , 89 , 200 , 58 , 236 , 250 , 100
.DB 10 , 250 , 20 , 250 , 30 , 255 , 90 , 10 , 36 , 25
.DB 30 , 50 , 255 , 200 , 100 , 136 , 63 , 150 , 105 , 56
.DB 250 , 0 , 13 , 200 , 6 , 18 , 63 , 185 , 200 , 200
.DB 200 , 150 , 200 , 200 , 150 , 100 , 80 , 50 , 10 , 0
.org 0x200
jasnosc1:
.DB 0 , 10 , 20 , 30 , 40 , 50 , 0 , 30 , 20 , 10
.DB 0 , 0 , 80 , 0 , 0 , 0 , 100 , 0 , 0 , 0
.DB 0 , 10 , 30 , 50 , 70 , 50 , 40 , 30 , 20 , 10
.DB 0 , 0 , 0 , 30 , 60 , 90 , 60 , 30 , 0 , 0
.DB 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
.DB 0 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 60 , 50
.DB 0 , 40 , 30 , 20 , 10 , 0 , 0 , 0 , 0 , 0
.DB 0 , 10 , 20 , 30 , 40 , 50 , 60 , 60 , 60 , 70
.DB 0 , 50 , 30 , 10 , 0 , 0 , 0 , 50 , 100 , 0
.DB 0 , 10 , 30 , 70 , 0 , 0 , 0 , 0 , 120 , 80
.DB 0 , 0 , 30 , 90 , 90 , 40 , 0 , 0 , 120 , 80
.DB 0 , 10 , 80 , 50 , 0 , 0 , 0 , 0 , 80 , 30
.DB 0 , 20 , 120 , 80 , 20 , 0 , 0 , 0 , 80 , 0
.DB 0 , 10 , 40 , 80 , 40 , 0 , 0 , 0 , 90 , 120
.DB 0 , 10 , 90 , 60 , 20 , 0 , 0 , 0 , 120 , 70
.DB 0 , 10 , 60 , 40 , 20 , 0 , 0 , 0 , 90 , 0
.DB 0 , 10 , 30 , 60 , 100 , 50 , 20 , 10 , 0 , 0
.DB 0 , 90 , 50 , 10 , 0 , 0 , 150 , 100 , 0 , 0
.DB 0 , 150 , 100 , 30 , 40 , 50 , 60 , 80 , 60 , 40
.DB 0 , 10 , 80 , 100 , 0 , 0 , 80 , 120 , 0 , 0