Jestem początkujący, uczę się głównie z tej strony, znam już te najłatwiejsze zasady i polecenia w języku bascom AVR.Próbuję rozwijać swoją wiedzę na ten temat i napisałem już kilka małych programików które działają.Z kolejnym mam dosyć spory problem.Nie potrafię zaprogramować mój układ (attiny2313) aby jednym przyciskiem zmieniać podprogramy.Na przykład coś takiego: jeśli wcisnę przycisk raz to miga dioda na pinie 0 portu b Chciałbym również aby przełączanie było niezależne od czasu w którym przełączę.To znaczy np. dziś przełączę na jeden podprogram a na przykład dopiero jutro na drugi itd. Z góry dziękuję za pomoc i pozdrawiam.
|
|||
Re: Przełączanie jedmym microswitch'em kilku podprogramów
Po pierwsze musisz wprowadzić jakąś zmienną powiedzmy typu byte i za każdym naciśnięciem switch'a zwiększasz stan tej zmiennej.
Później w pętli piszesz albo kilka
albo
i odsyłasz do podprogramów.
Co do przełączania dziś czy jutro czy kiedy tam chcesz to są dwie opcje. Jeśli w przeciągu tych dni zasilanie nie będzie wyłączane to nie masz problemu a jeśli będziesz wyłączał owe zasilanie to wartość aktualną tejże zmiennej trzeba wpisać do pamięci eeprom.
Moja strona w powijakach
Przełączanie jedmym microswitch'em kilku podprogramów
Dzięki za radę.W ostateczności wyszło coś takiego:
Czy będzie działać jak w założeniach?
Udało mi się zaprogramować
Udało mi się zaprogramować atmega16 powyższym programem i wszystko by grało, tylko że wykonuje się cały czas tylko jeden podprogram - Prog1.Układ po prostu nie reaguje na przycisk.Spróbowałem jeszcze tak:
Ale dalej to samo.Proszę o radę w którym miejscu może być błąd i jak to poprawić.
Re: Przełączanie jedmym microswitch'em kilku podprogramów
A że zapytam, gdzie masz kilka linijek które mówią:
Pomijam fakt że to jest źle zbudowane, ale jak na początek może być (jeśli Ci zadziała)
Moja strona w powijakach
Zmiany
Zan, dla mnie dwa miejsca są zastanawiające. Jedno to "Gosub" w Case 1 - dlaczego Gosub, jak w drugim i trzecim Case masz Goto ?.
Drugie miejsce to: w Prog1, komenda "Loop". Wyraźnie sam chcesz by była pętla nieskończona. Nie dajesz żadnego warunku w pętli, by została przerwana.
Nie wiem jednak czy się nie mylę, niech ktoś to fachowym okiem zweryfikuje. Ja od dawna nie widziałem Bascoma na oczy, nie pamiętam z niego wiele. Chciałbym jednak jakoś pomóc, bo sam wiem jakie przejścia z nim miałem.
Re: Przełączanie jedmym microswitch'em kilku podprogramów
Jak już wytykamy te błędy to:
1. Jak wspomniał kolega wyżej, wszędzie powinno być:
gosub
a nie
goto
2. Brak zakończeń podprogramów w postaci RETURN'ów
3. Jak wspomniano również wyżej, nie dajesz szansy na wujście z nieskończonych pętli do...loop w podprogramach. Trzeba tam wstawić jakieś warunki pozwalające programowi opuścić pętlę.
A pomijając to wszystko można to zrobić bez podprogramów i nie na wait'ach tylko na timerze.
Moja strona w powijakach
Przełączanie jedmym microswitch'em kilku podprogramów
Kolego matrix0606 proszę o napisanie co znaczy polecenie
incr
które zamieściłeś w swojej odpowiedzi, oraz jeśli by się dało jakiś przykładowy program z timerem , który by zawierał komentarze wyjaśniające do czego służą polecenia w nim zawarte.Bardzo bym chciał zrozumieć co jest w programie napisane.Z góry dziękuję.
A może by się dało napisać licznik przycisków na timerze?
Re: Przełączanie jedmym microswitch'em kilku podprogramów
incr w Bascom oznacza z angielskiego skrót od increase czyli zwiększ wartość o 1.
Nigdy nikomu nie podaję gotowych programów, bo w ten sposób nikt niczego się nie nauczy. Daję tylko wskazówki.
Trzeba sobie obrać zmienną dla danego timera na przykład zmienna_timer_1 i podstawiać wartości do tej zmiennej a samą zmienną ładować do timera. W ten sposób można diametralnie ułatwić sobie życie, oczywiście jeśli się wie co się robi.
Nie sprawdzałem tego co podam niżej i nie myślałem nawet nad tym wiele, ale soft mógłby wyglądać tak:
To tylko przykładowy program i trzeba do niego wprowadzić szereg zmian i/lub poprawek. Brak między innymi jakiejś eliminacji drgań styków przycisku itp. Całość napisałem może w dwie minuty dlatego na pewno ma wiele błędów, jeśli w ogóle będzie pracował.
Moja strona w powijakach
Chyba się udało!
Dzięki wielkie za pomoc!
W końcu udało mi się przełączać jednym przyciskiem , a zrobiłem to tak:
Aby zlikwidować drgania na przycisku zastosowałem
Tylko nie wiem czy układ prawidłowo działa.Tzn:
-jeśli wcisnę przycisk pd0 raz to świeci dioda pd1
-jeśli wcisnę pd0 drugi raz to pd1 gaśnie
-jeśli wcisnę pdo trzeci raz to pd2 świeci
-jeśli wcisnę pd0 czwarty raz to pd2 gaśnie
i tak w kółko.
Re: Przełączanie jedmym microswitch'em kilku podprogramów
Waitms to najgorszy sposób, ale w końcu debounce też korzysta z wait więc do prostych zastosowań może być.
Coś musi być nie tak bo masz napisane if..then co dwa a zapalają i gasną Ci diody co jedne więc coś chemia nie teges. Poza tym nie możesz mieć w kółko bo masz zmienną D zadeklarowana jako byte więc incr będzie Ci liczyć do 255.
Moja strona w powijakach
Przełączanie jedmym microswitch'em kilku podprogramów
If...then specjalnie jest napisane co dwa bo jak było co jeden to układ źle zaświecał diody np. pd2 świeci cały czas i nigdy nie gaśnie albo pd2 świeci cały czas itp.Myślę że to może być wina właśnie drgań przełącznika.Może ktoś by mi przedstawił ten program z debounce bo jak ja próbuje:
to mi wywala błąd że niema trzech parametrów.
A co do powracania w kółko to sam się dziwię ale to prawda.
Aha, jeszcze jeden problem, jeśli przytrzymam dłużej przycisk to albo jedna albo obie diody świecą w nieskończoność i nie do wyłączenia.Może to też przez drgania?
Re: Przełączanie jedmym microswitch'em kilku podprogramów
Jak Ty w ogóle chcesz używać polecenia debounce? Ściągnij sobie polskiego helpa i będziesz miał pomoc jak diabli. Debounce używa się tak:
Moja strona w powijakach
Mały problem
Po dwóch tygodniach myślenia udało mi się zrobić dosyć obszerny program z którym mam mały problem.W założeniach program miał po wciśnięciu przycisku raz- włączyć podprogram "wlacnik". Drugi raz- "pilot" (program pochodzi z tej strony http://mirley.firlej.org/odbiornik_rc5).Trzeci raz- żaden program nie jest włączony.Oto mój projekt:
Niestety wyszło tak że jeśli po pierwszym wciśnięciu włączy się podpr."pilot"(zależy to od zaprogramowania kolejności) to będzie działać w nieskończoność, a jeśli podpr. "wlacnik" to on będzie działać bez możliwości przełączenia.
Chcę zaznaczyć że oba podprogramy działąją w 100%.
Proszę o pomoc bo pewnie nie dużo mnie dzieli od poprawnego zapisu.
A to już cały program:
A przy okazji może jakieś propozycje ulepszenia mojej części programu:
-włącznik szyfrowy:
należy wpisać cztery cyfry wyświetlane na czterech wyświetlaczach segmentowych w odpowiedniej kolejności i wcisnąć przycisk "klucz" wtedy wyskakuje odpowiedni "pływający" komunikat.Do każdorazowego przyciśnięcia na klawiaturce pojawia się krótki dźwięk a w przypadku złego wpisania piszczy niesamowicie że więcej niż 30sek. nieda się wytrzymać(odstraszacz). Z racji że jestem początkujący i niewiem jak się ustawia częstotliwość multipleksownia ustawiłem wegług
waitms 1
i nawet jest bez drgań.O samym multipleksowaniu wiem tylko tyle: http://elektro.w.interia.pl/faq/02.html .Re: Program
Napisz w procedurze X
osobiście nigdy nie czytałem przycisków za pomocą Debounce więc liczę na to że masz dobrą składnie i polecenie działa na pewno
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.