Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 10 sty 2025, o 21:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 25 sie 2014, o 01:44 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

Witam ponownie,
chciałbym używać dwóch timerów w "locie". Jeden do multipleksowania, a drugi do obsługi klawiatury matrycowej 4x4 i w międzyczasie puścić animację na drabince diodowej. Drugi timer nie chce mi działać. Myślałem, że można obsługiwać dwa timery TIMER0 i TIMER2.
Plik 7seg.c z obsługą Timera0
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Plik nagłówkowy 7seg.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak odkomentuję:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To mam taką akcję i pierwszy raz coś takiego mi się zdarzyło.
Obrazek
Dlatego zakomentowałem i problem znikł.
Plik main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Przerwanie Timer2 nie następuje. Gdzie popełniam błąd, albo co mi umyka?
uC: Atmega162, 16MHz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2014, o 07:57 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Na mój gust inkludowanie plików nagłówkowych standardowych bibliotek we własnych plikach nagłówkowych to zła praktyka.
Po kiego grzyba ci
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w pliku 7SEG.h ?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2014, o 11:27 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

Dziękuję za uwagi.
Głupia gafa o której zapomniałem. Rzeczywiście nazwy nie mogą się rozpoczynać od cyfr. Chciałem obsłużyć 2 timery ;-) Oczywiście można zrobić tak, jak napisałeś, ale chcę korzystać z dwóch timerów.. W przyszłości będę chciał obsługiwać kilka rzeczy "na raz", tzn. licznik na 7seg, animacja na diodach,za pomocą microswitch zmiana animacji itd. Coś się jeszcze znajdzie. Po waszych poprawkach wszystko działa, jak powinno i bez błędów. Jak będzie z tym drugim timerem? Dlaczego nie zlicza?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2014, o 12:56 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

Atmega 162. Wspomniane w pierwszym poście ;-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2014, o 18:37 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

repro napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

repro napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W drugim przypadku masz TOIE2.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2014, o 08:38 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

mokrowski napisał(a):
Rzeczywiście napisałeś że Atmega162, przepraszam umknąło mi....

Nie rozumiem intencji init_leds() gdzie LED_PORT jest zerowany a później ,,tłuczesz" 0xFF na port w przerwaniu... O co tu chodzi?
Kto czyta tę zmienną k którą tak pracowicie inkrementujesz i zerujesz w przerwaniu?

Proszę podziel kod na oddzielne pliki gdzie klawiatura będzie miała plik *.c *.h a wyświetlacze segmentowe oddzielne. Wtedy będzie widać intencje...
NIestety jestem ,,upierdliwcem" co do elegancji kodu :-)

Ma być coś w stylu init_led_port(), init_led_timer(), init_key_port(), init_key_timer(). A w main.c tylko użycie... Już część masz ale reszta przemieszana.
Do oddzielnych plików i wiele się wyjaśni.

Rozumiem że chcesz sprawdzić czy działa timer2? Jeśli tak i ma zamrugać diodą/diodami to zmień kod na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wtedy będziesz wiedział czy przerwania timer2 pracują.

Cześć.
Skupiłeś na elemencie kodu, który nie działał, a 0xFF umieściłem po to by sprawdzić, czy w ogóle następuje procedura przerwania. Inicjalizacja diod jest śmieszna, ale chciałem przećwiczyć ten element poprzez funkcję, która nie zwraca wartości. Dobrze zwrócić uwagę na nazwy zmiennych, funkcji, tak jak to pokazałeś w swoim komentarzu. Masz rację odnośnie elegancji kodu, gdyż taki kod czyta się dużo łatwiej i analizuje. Obiecuję, że postaram się nad tym popracować. Zmienna k miała służyć do zliczania ilości przerwań i na jej podstawie wyliczyć, jakąś przerwę czasową. Na pewno jej użyję, ale póki, co skupiam się na wykorzystaniu sprzętowych zasobów mikroprocka i sprawdzam, czy blokuje to program. Ot tak, jak dziecko sprawdza, czy płomień parzy ;)
Odnośnie tego błędu, byłem pewny, że wpisałem OCIE2, a tymczasem.... :oops:
Dziękuję za wszystko.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2014, o 09:38 

Pomógł: 0

Jestem za tym by jednak pokazać co kolega mokrowski miał na myśli ;), bo dla mnie nie które wypowiedzi brzmią jak zaklęcia voodoo.
Tj. Mam na myśli, że Mirek mimo wszystko podaje to bardziej strawnie. Ciężko na początku drogi jeszcze ogarniać te wszystkie modularyzacje.
Sam jestem jak najbardziej za czytelnym kodem i trzymaniem się standardów, niestety czasem trzeba pochylić się nad maluczkimi (np. mną, bom tempy niczym gerlach z zastawy babci).



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO