ATNEL tech-forum https://forum.atnel.pl/ |
|
Przyciski a przetwania https://forum.atnel.pl/topic17205.html |
Strona 1 z 1 |
Autor: | Krlk [ 2 sty 2017, o 02:49 ] |
Tytuł: | Przyciski a przetwania |
Cześć, ostatnio napisałem mały programik wykorzystujący timery i przerwania w trybie CTC, teraz chciałem dodać obsługę klawisza. Dodałem obsługę taką jak na blogu Pana Mirka: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. I tu pojawia się pewne ALE...nie mogę wejść do zdażenia "PRESS"... Dla przetestowania wstawiłem sobie tam zapalanie diody ale co bym nie robił to ta nie chce się załączyć... Oczywiście próbowałem również podstawowej wersji detekcji wciśnięcia: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. i nic... Tu rodzi się moje pytanie. Czy przerwanie może w jakiś sposób zakłócić odczyt wciśnięcia klawisza? Poniżej, najistotniejsze fragmenty kodu, z punktu widzenia tego posta. main.c: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
biblioteka z funkcja "init_IO".c: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
plik z definicjami plik.h: |
Autor: | anshar [ 2 sty 2017, o 04:21 ] |
Tytuł: | Re: Przyciski a przetwania |
sei(); powinno znajdować się tuż przed pętlą główną while(1). Czy masz napisane procedury obsługi tych przerwań? Przynajmniej tak: |
Autor: | Krlk [ 2 sty 2017, o 05:32 ] |
Tytuł: | Re: Przyciski a przetwania |
Przeniosłem sei(); przed pętlę while, a obie procedury obsługi przerwań napisałem w pliku z funkcjami, pliku.c (tam gdzie jest funkcja "init_IO"), ale w dalszym ciągu nie wchodzę do zdażenia "PRES BUT"...myślałem że to może coś sprzętowego, ale po podłączenia pinu 7 portu C, na którym mam zdefiniowany przycisk, zarówno do GND i VCC płytki, nie mam reakcji więc to prawie na pewno kwestia programowa... Ten projekcik to zwykły zegarek na wyświetlaczu siedmiosegmentowym zestawu ATB. Płytka Atnel ma standardowo 4 moduły cyfr, wszystko działa, to znaczy kiedy chcę wyświetlić godzinę i minuty albo minuty i sekundy, ale do skończenia całości zostało mi do zrealizowania przełączanie pomiędzy tymi stanami czyli wyświetlaniem GG:MM i MM:SS po przyciśnięciu guzika...niby najprostsza rzecz na świecie...no i właśnie z nią mam ten problem... Wrzucę niżej jak wygląda całość kodu może czegoś się dopatrzycie Był bym wdzięczny zegar.h: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zegar.c: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
main.c: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Siedzę nad tym całą noc, ale jestem już tak bardzo tym sfrustrowany że nie ma szans żebym dzisiaj coś znalazł Tak naprawdę to program jest gotowy o ile załapie przycisk... |
Autor: | mirekk36 [ 2 sty 2017, o 06:36 ] |
Tytuł: | Re: Przyciski a przetwania |
Krlk napisał(a): if( !key_lock && !(PORT_KEY & KEY ) ) { key_lock=50000; TEST_LED_PORT &= ~TEST_LED; //_delay_ms(10000); //stan ^= true; } else if( key_lock && (PORT_KEY & KEY ) ) key_lock++; Bo to NIGDY nie ma prawa zadziałać, zajrzyj na bloga i porównaj toż masz tam poprawny kod |
Autor: | Daro69 [ 2 sty 2017, o 07:24 ] |
Tytuł: | Re: Przyciski a przetwania |
Poza tym chochlikiem w sposobie odczytywania stanu bitów portu, jeszcze mało znaczący, ale też duszek. w przerwaniu wartość wyliczana w pętli to min. 1 max 99 = 99 a nie 100. (przydało by się else). język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. teraz jest od 0 do 99 = 100. setnym działaniem jest tylko wpisanie zera - bez inkrementacji. |
Autor: | anshar [ 2 sty 2017, o 12:01 ] |
Tytuł: | Re: Przyciski a przetwania |
Dodatkowo zmień na: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Tutaj jest błąd: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. A jeśli zadeklarujesz zmienną static uint8_t licznik1;, którą masz w przerwaniu jako zmienną globalną uint8_t licznik1;to później możesz napisać: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. zamiast: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Aby ta cyfra z kropką nie migała, trzeba jeszcze zwiększyć trochę odświeżanie np OCR0=171 czyli 250Hz Ostatni element tablicy const uint8_t cyfry[] PROGMEM tak na prawdę jest niepotrzebny: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. OCR2 powinno być równe 107, a nie 108. No i na koniec musisz jeszcze gdzieś wywołać tą funkcję: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Pozdrawiam |
Autor: | Krlk [ 2 sty 2017, o 13:41 ] |
Tytuł: | Re: Przyciski a przetwania |
Zegarek działa zgodnie z założeniami. Dziękuję! Lekcja na przyszłość, warto odpocząć jak się utknie, ego nie jest najważniejsze |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |