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 20 lip 2025, o 09:49


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 8 kwi 2021, o 22:26 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Witam, piszę taki testowy program, który ma migać diodą co 1s stworzyłem takie program jak poniżej i coś mi nie do końca działa, bo dioda powinna zmieniać swój stan co sekundę, a tutaj dzieje się to zawsze o sekundę dłużej czyli, np. w tym przypadku co 2s. Jak mogę naprawić i dlaczego tak się dzieje? Czy w ogóle sam zamysł, który tutaj przedstawiłem jest poprawny?

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 kwi 2021, o 23:37 
    Offline
    Użytkownik

    Dołączył(a): 13 paź 2015
    Posty: 303
    Lokalizacja: Rybnik
    Pomógł: 10

    antosV10 napisał(a):
    Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?


    Ponieważ w warunku zatrzymujesz swój program na 1s delayem. Jak już korzystasz z timera to unikaj dalaya.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 09:20 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Dziękuję za pomoc i cenne uwagi :D jeszcze chciałem dopytać czy taka funkcja jaką poniżej napisałem jest poprawna? Bo na pierwszy rzut oka wszystko działa ok ale chciałbym, żeby ktoś doświadczony na to spojrzał. Jak np użyję delay'a to dioda zmienia swój stan dokładnie co sekundę, a z tą funkcją zdecydowanie częściej.

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 11:21 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    Polecam ci gorąco Bluebooka, wiele rzeczy by ci się wyjaśniło - nie tylko z języka C ale i z programowania AVR'ków

    https://atnel.pl/mikrokontrolery-avr-jezyk-c.html

    A w tym kodzie skoro chcesz bazować na fladze OCF1A to po jakiego grzybka aktywujesz sprzętowe przerwanie w TIMSK1 i masz pustą procedurę? To jest bardzo ale to bardzo przekombinowana droga żeby w ten sposób migać diodą co sekundę.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 kwi 2021, o 15:00 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    mirekk36 napisał(a):
    Polecam ci gorąco Bluebooka


    Zaglądnąłem do Bluebooka i faktycznie znalazłem taką funkcję w rozdziale dotyczącym pilota na podczerwień. Napisałem taki kod jak poniżej, żeby migać diodą co sekundę, ale dioda zapala się tylko raz na początku programu, a potem nic się nie dzieje? Sprawdzałem też kod z kilku stron na internecie i był bardzo podobny, ale także mi nie działają.
    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 08:29 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Zmieniłem w kodzie tylke wartość rejestru OCR1A na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 11:00 
    Offline
    Użytkownik

    Dołączył(a): 31 lip 2016
    Posty: 154
    Pomógł: 4

    antosV10 napisał(a):
    Zmieniłem w kodzie tylke wartość rejestru OCR1A na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?

    Tylko, że licznik Timera liczy od zera.
    Od 0-62466 = 62500

    ------------------------ [ Dodano po: 4 minutach ]

    zorro napisał(a):
    antosV10 napisał(a):
    Zmieniłem w kodzie tylke wartość rejestru OCR1A na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?

    Tylko, że licznik Timera liczy od zera.
    Od 0-62466 bo nie przekraczasz 62536

    ------------------------ [ Dodano po: 7 minutach ]

    zorro napisał(a):
    antosV10 napisał(a):
    Zmieniłem w kodzie tylke wartość rejestru OCR1A na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?

    Tylko, że licznik Timera liczy od zera.


    ------------------------ [ Dodano po: 4 minutach ]

    zorro napisał(a):
    antosV10 napisał(a):
    Zmieniłem w kodzie tylke wartość rejestru OCR1A na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?

    Tylko, że licznik Timera liczy od zera.
    Od 0-62466 bo nie przekraczasz 62536


    ------------------------ [ Dodano po: 27 minutach ]



    ------------------------ [ Dodano po: 28 minutach ]




    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 12:02 
    Offline
    Użytkownik

    Dołączył(a): 31 lip 2016
    Posty: 154
    Pomógł: 4

    Jaką wartość wpisałeś do rejestru porównania OCRx?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2021, o 22:28 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Faktycznie wartość była za duża myślałem, że rejestr 16 bitowy może trzymać wartości do max 65536. Na tej podstawie napisałem funkcję, która ma czekać określoną liczbę us, ale znowu dioda zmienia swój stan w czasie dłuższym tak o 1, 2 s. Dlaczego mi to nie działa, skoro przy funkcja które czekają określoną liczbę milisekund lub sekund wszystko jest ok? Coś przeoczyłem w tej funkcji? W pętli głównej podaję jej jako argument liczbę 1milion bo dioda ma zmieniać swój stan co sekundę.

    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.



    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: 9 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 21 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