Część Witajcie! Jestem Oskar, dopiero zaczynam przygodę z mikrokontrolerami.
Otóż, dostałem niedawno swoją pierwszą Attiny2313. Napisałem również do niej program i pojawił się problem z przyciskami. Mianowicie gdy chcę aby przycisk zadziałał muszę jednego razu dłużej przytrzymać drugiego krócej. Zrobiłem sobie dodatkowo diodę informującą mnie kiedy mogę puścić przycisk. Zamysł mojego programu jest bardzo prosty, chodzi o to, że po wciśnięciu pierwszego przycisku zmieni się czas migania diody. Po wciśnięciu drugiego przycisku zmieni się migająca dioda (diod jest 3 plus informująca i dwa przyciski (swithe)).
Wszytko działa poprawnie tylko denerwuje mnie czas reagowania przycisków. Raz wolniej raz szybciej. Próbowałem na 10 sposobów wyeliminować drgania styków, ale doszedłem do wniosku, że to nie ich wina (jeśli się mylę proszę o poprawę i pomoc w ich eliminacji). Dodam że pracuje na płytce stykowej, a przyciski mam podłączone przez rezystor 1Kohm do masy.
Ogólnie chciałbym, jeżeli to jest możliwe aby przyciski działały od razy po wciśnięciu, nawet bardzo krótkim.
Atmega pracuje również na wewnętrznym kwarcu 1Mhz. Tu pojawia się moje drugie, pewnie banalne i głupie pytanie, jak zmienić częstotliwość pracy (programowo oczywiście, bez kwarców zewnętrznych) gdyż bardzo mało o tym wiem.
Zamieszczam program:
Bardzo proszę o pomoc.
Ps. Zakładam w tym dziale, z powodu trudności określenia odpowiedniego, w razie czego proszę o przeniesienie do odpowiedniego działu.
Otóż, dostałem niedawno swoją pierwszą Attiny2313. Napisałem również do niej program i pojawił się problem z przyciskami. Mianowicie gdy chcę aby przycisk zadziałał muszę jednego razu dłużej przytrzymać drugiego krócej. Zrobiłem sobie dodatkowo diodę informującą mnie kiedy mogę puścić przycisk. Zamysł mojego programu jest bardzo prosty, chodzi o to, że po wciśnięciu pierwszego przycisku zmieni się czas migania diody. Po wciśnięciu drugiego przycisku zmieni się migająca dioda (diod jest 3 plus informująca i dwa przyciski (swithe)).
Wszytko działa poprawnie tylko denerwuje mnie czas reagowania przycisków. Raz wolniej raz szybciej. Próbowałem na 10 sposobów wyeliminować drgania styków, ale doszedłem do wniosku, że to nie ich wina (jeśli się mylę proszę o poprawę i pomoc w ich eliminacji). Dodam że pracuje na płytce stykowej, a przyciski mam podłączone przez rezystor 1Kohm do masy.
Ogólnie chciałbym, jeżeli to jest możliwe aby przyciski działały od razy po wciśnięciu, nawet bardzo krótkim.
Atmega pracuje również na wewnętrznym kwarcu 1Mhz. Tu pojawia się moje drugie, pewnie banalne i głupie pytanie, jak zmienić częstotliwość pracy (programowo oczywiście, bez kwarców zewnętrznych) gdyż bardzo mało o tym wiem.
Zamieszczam program:
$regfile = "attiny2313.dat" 'najpierw określamy typ proca
$crystal = 1000000 'definiujemy z jakim taktowaniem będzie pracował
Config Portd = &B11111111
Portd = &B11111111
Config Portb = &B0000000
Portb = &B1111111
Dim Zmienna As Byte
Zmienna = 0
Dim Czas As Integer
Czas = 2500
Do
If Pinb.1 = 0 Then 'jeżeli przycisk wciśnięty
Waitms 100
Portd.5 = 0 'zapal diode informującą
Bitwait Pinb.1 , Set 'czekaj aż przycisk zostanie zwolniony
Czas = Czas - 500 'ujmij z czasu migania diody 500 ms
Portd.5 = 1 'zgaś diode informującą
End If
If Czas < 500 Then 'jeżeli czas mniejszy niż 500ms to czas = 2500ms
Czas = 2500
End If
If Pinb.0 = 0 Then 'jeśeli przycisk 1 wciśnięty
Waitms 100
Portd.5 = 0 'zapal diode informującą
Bitwait Pinb.0 , Set 'czekaj aż przycisk zostanie zwolniony
Zmienna = Zmienna + 1 'dodaj do zmiennej 1
Portd.5 = 1 'zgaś diode informującą
End If
If Zmienna > 2 Then 'jeżeli zmienna większa od 2 to zmienna = 0
Zmienna = 0
End If
If Zmienna = 0 Then 'jeżeli zmienna = 0
Portd.1 = 1 'zgaś diode 1
Portd.2 = 1 'zgaś diode 2
Waitms Czas 'czekaj zmienną "czas"
Toggle Portd.0 'zmień wyprowadzenie diody 0
End If
If Zmienna = 1 Then 'jeżeli zmienna = 1
Portd.0 = 1 'zgaś diode 0
Portd.2 = 1 'zgaś diode 2
Waitms Czas 'czekaj zmienną "czas"
Toggle Portd.1 'zmień wyprowadzenie diody 1
End If
If Zmienna = 2 Then 'jeżeli zmienna = 2 '
Portd.0 = 1 'zgaś diode 0
Portd.1 = 1 'zgaś diode 1
Waitms Czas 'czekaj zmienną "czas"
Toggle Portd.2 'zmień wyprowadzenie diody 2
End If
Loop
End
Bardzo proszę o pomoc.
Ps. Zakładam w tym dziale, z powodu trudności określenia odpowiedniego, w razie czego proszę o przeniesienie do odpowiedniego działu.