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



Teraz jest 29 mar 2024, o 00:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 7 gru 2017, o 00:40 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Proszę o pomoc chciałbym jeśli to możliwe przerwanie obsługujące multipleksowanie wyświetlacza led obsłużyć też timer programowy odmierzający sekundy żeby pozbyć się delay bawiłem się z timerami i ledami no i jakoś zagrało ale nie umiem połączyć tego z multipleksowaniem i ustawić sekund.
multipleks.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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.

Poz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2017, o 05:34 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

Zmienną "sek" musisz inkrementować w momencie odliczenia sekundy, bo teraz masz tak że zwiększasz ją co każdy obieg pętli, zamiast co określony czas.
Czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście przy założeniu że timer działa co 200Hz

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2017, o 07:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

A najlepiej odliczać tylko jedna zmienną w przerwaniach i dopiero tą zmienną rozbijać na h/m/s w pętli głównej tuż przed wyświetlaniem na lcd.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2017, o 21:04 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Zrobiłem jak zaproponował Harry ale coś jest nie tak zegar całkowicie stanął :(
multipleks.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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.

Poz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2017, o 21:22 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 03 gru 2014
Posty: 18
Pomógł: 3

Zmienna timer powinna być jako zmienna globalna ze specyfikatorem volatile, ponieważ
ze specyfikatorem static zmienna ta jest dostępna tylko w procedurze obsługi przerwania.

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

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

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

będzie spełniony co sekundę (o ile częstotliwośc przerwania ISR(TIMER0_COMPA_vect) wynosi 200Hz).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 gru 2017, o 23:41 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Miałem małą awarie PC więc dopiero dzisiaj odpisuję .
Po poprawieniu i wgraniu programu dalej to samo zegar stoi wyświetla same zera
multipleks.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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.

Poz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 gru 2017, o 23:58 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

Nie zjadłeś gdzieś nawiasów?
Czy kompilator zwraca jakiś błąd?

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2017, o 17:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 67
Lokalizacja: Rzeszów
Pomógł: 0

Spróbuj na początek uprościć zliczanie sekund bez żadnych warunków i sprawdź czy zmienną sek wyrzuca na wyswietlacz

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2017, o 20:35 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Wstawiłem do kodu LED1_TOG i zegar ruszył a gdy skasowałem LED1_TOG to zegar przestał działać po prostu stanął i teraz już wcale nic nie rozumiem o co tu chodzi :shock: .
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Poz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2017, o 21:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 67
Lokalizacja: Rzeszów
Pomógł: 0

Masz dwa razy zadeklarowaną zmienną
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 multipleks.c i main.c, zostaw tylko w multipleks.c z przydomkiem extern volatile



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 gru 2017, o 23:01 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Zegar zaczął działać :D dzięki za podpowiedzi ale dopiero gdy powołałem dodatkową zmienną timer w main.c bo bez tej dodatkowej zmiennej wywalał mi cały czas błąd
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a w multipleks.c za radom ‘Kristek zapisałem z przydomkiem extern volatile i wszystko zaczeło grać chociaż do końca nie jestem pewien dlaczego :?:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ale za to pojawił się kolejny problem z przyciskami do ustawiania godzin i minut to znaczy mogę przyciskiem ustawić tylko minuty a przycisk do ustawiania godzin nie chce działać proszę o jakaś podpowiedz ;) .
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Poz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2017, o 00:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 67
Lokalizacja: Rzeszów
Pomógł: 0

Przydomek "extern" informuje kompilator, że tej zmiennej możesz używać w innych plikach projektu gdzie zainkludujesz multipleks.h. DO tej pory radziłeś sobie tak ze w dwóch miejscach deklarowałeś zmienną o takiej samej nazwie, i gdy w pliku multipleks.c ją modyfikowałeś, to w pliku main.c deklarowałeś ją na nowo nadpisując inną wartością. Zrób tak, że w pliku multipleks.c daj " volatile uint8_t timer" a w pliku multipleks.h "extern volatile uint8_t timer" , wtedy wykasuj zmienną timer z maina. (Wprowadziłem Cię w błąd mówiąc Ci że extern musisz dać w pliku . c - ja tez się uczę :) )W pliku .h zawsze wpisujesz deklaracje zmiennych i funkcji których używasz potem w mainie, żeby go nie zaśmiecać a w pliku .c ich definicje. Możesz zadeklarować zmienne tylko w pliku .c (bo nie do każdej zmiennej czy funkcji musisz mieć dostęp w main), ale jeśli chcesz żeby były widoczne też w pliku main, musisz je zadeklarować także w .h . Mam nadzieję że nie pogmatwałem za bardzo :)

A co do przycisków to pokaż jak wyglądają makra do obsługi przycisków i upewnij się że oba klawisze masz podciągnięte wewnętrznym rezystorem do VCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2017, o 20:52 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Działa tylko przycisk do ustawiania minut a przycisk godzin wcale nie reaguje myślałem że jak za komentuje przycisk minut to przycisk godz. się odblokuje ale nic z tego :( proszę o pomoc
Poniżej cały 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.

Poz.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO