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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 31 maja 2025, o 18:47


    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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: 1978
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 3 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