Strona Domowa

Dawida Urbanskiego

- Dział: arts -

< Go Back to List

elektronika/lampa_rowerowa

Lampa Rowerowa rodziny AVR

autor: Dawid napiano:2010-02-09

wstęp

Projekt lampy rowerowej opartej na mikrokontrolerze rodziny AVR, opracowany przy współpracy z Dominikiem Binkowskim


przykładowa Implementacja: (DOWNLOAD)

wymagane elementy:

Elementy układu:

  • 4diody LED czerwone
  • 2diody LED zielone
  • switch
  • 2 przełączniki
  • mikrokontroler: attiny2313

Jak się zaczeło

Ten projekt zaczął się dość nietypowo: dostałem maila od osoby która przypadkowo weszła na moją stronę: Pan Dominik Binkowski był zainteresowany zrobieniem lampy rowerowej.

Po wstępnych ustaleniach chętnie zabrałem się do pracy i szybko napisałem pierwszy sterownik dla układu. Sam proces powstawania układu i programu jest kształcący dlatego też postanowiłem go tu opisać.

Przygotowanie

Przed rozpoczęciem projektowania układu musisz dokładnie wiedzieć co on ma robić. Sparządź schemat ideowy:

Słownie opisz działanie układu:

wkładam baterie: układ nie swieci
naciskam guzik po raz 1: zapalają się diody czerwone, zielone nie świecą
naciskam guzik po raz 2: diody czerwone mrugają, zielone nie świecą
naciskam guzik po raz 3: diody zielone mrugają,czerwone nie świecą
naciskam guzik po raz 4: układ wraca do stanu przy włorzeniu baterii.	

teraz jesteś gotowy możesz zaczynać.

Ewolucja

wersja 1.0

założenia: doprowadzenie układu do wykonywania sekwencji 'mrugania' oraz wybór sekwencji przez switch, łatwa zmiana logiki ukladu

schemat:

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

software:

Wersja opis download
1.0 prymitywna-brakuje przerwań,
konieczność wyliczania dlugosci sekwencji w celu utrzmania płynnośći reakcji na nacisk switcha
swiatlo_rowerowe_v1.0.asm
1.01 dodanie przerwań wymusza zmiane schematu (switch musi być podpięty pod INT0)
usunięto konieczność wyliczania dlugosci naciśniecia guzika w celu utrzmania płynnośći działania
swiatlo_rowerowe_v1.01.asm

Back to List


komentarze

  • gość
    Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/dawidurb2/domains/dawidurbanski.pl/public_html/engine/framework/smarty/libs/plugins/modifier.date_format.php on line 53
    Apr 20, 2016
    Tu podaj treść

dodaj komntarz

tools

qrcode:
qrcode
-

code by: Dawid Urbanski

Copyright © by Dawid Urbanski 2010 - 2020