- Dział: arts -
elektronika/lampa_rowerowa
Lampa Rowerowa rodziny AVR
Ewolucja
wersja 1.0
założenia: doprowadzenie układu do wykonywania sekwencji 'mrugania' oraz wybór sekwencji przez switch, łatwa zmiana logiki ukladu
Inicjacja mikroprocesora:
tu ustalamy które piny mają służyć do czego.
w tym przypadku:
- portD (DDRD) ma służyć jako wyjścia-diody LED
- ostatni pin na portcieB (PORTB)ma służyć jako wejscie - switch
Prototyp: (DOWNLOAD)
;output:
ldi tmp,0xFF ; same jedynki
out DDRD,tmp ; PORTD - wyjscie w stanie wysokim
;input:
ldi tmp,0b00000010 ; pin 1 (licząc od 0)
out PORTB,tmp ; PORTB - wejscia PULL-UP (w stanie wysokim)
W głownej pętli programu sprawdzamy czy nacisnieto przycisk:
;-----jezeli nacisniesz przycisk
; wczytaj z pinu
in tmp,PINB ; tmp = stan portu POTRTB
cpi tmp,0x01 ; na pinie 1
breq Nastepna ;przelacz do nastepnej funkcji
Oraz wybieramy sekwencję (o numerze tmp2):
;-----sekwencja 1
CPI tmp2,0x0 ;porownaj natychmiast
breq Main_0 ;takie same: Main_0
;-----sekwencja 2
CPI tmp2,0x1 ;porownaj natychmiast
breq Main_1 ;takie same: Main_1
za zmianę sekwencji po naciśnieciu guzika odpowiada opdowiada procedura 'Nastepna':
;=========================================
Nastepna:
INC tmp2 ; zwieksz (nastepna funkcja)
CPI tmp2,0x4 ; jezeli przekroczono zakrez zacznij od zera
breq Zeruj ; takie same: Zeruj
;czekaj
ldi clock,7
rcall Delay
rjmp Main ; powrot do petli
Zeruj:
ldi tmp2,0xFF ; zeruj
rjmp Main ; powrot do petli
;=========================================
A tak wygląda przykładowa sekwencja (diody czerwone zgaszone):
;=========================================
Main_0:
rcall PORTD_1_OFF
rcall PORTD_2_OFF
rcall PORTD_3_OFF
rcall PORTD_4_OFF
rjmp Main ; powrot do petli
;=========================================
wersja 1.01
ma umożliwiać długie czasowo sekencje bez utraty płynnośći reagowania na switch.
W OPRACOWANIU