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 w 2025? 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 24 kwi 2025, o 21:15


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 16 wrz 2021, o 18:14 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2021
    Posty: 93
    Pomógł: 0

    Hej, mam problem z korzystania z timerów programowych. Jeśli powiedzmy chcę sobie migać pojedyncza diodą, lub zwiększać wartość np: OCRx to ok. Ale chciałem np: w timerze zwiększać i zmniejszać wartość pwm. Nie bardzo wiem, jak do tego podejść bo gdy w instrukcję timera wrzuce np: pętle for, no to ona kręci się z pełną prędkością.

    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: 16 wrz 2021, o 18:42 
    Offline
    Użytkownik

    Dołączył(a): 02 gru 2015
    Posty: 548
    Pomógł: 27

    Strasznie mylisz pojęcia (jak masz bluebooka to musisz jeszcze raz poczytać o timerach programowych) timery programowe nie działają jak delay tylko np. ustawiasz jakiś timer w tryb ctc ( u ciebie to timer 1) tak aby jego przerwanie wykonywało się co jakiś określony czas (ustala to taktowanie procka preskaler i wartość wpisana w rejestr OCR tego timera) i w tym przerwaniu robisz np jak Ty
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    później w pętli while programu sprawdzasz
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    i teraz uważaj ta liczba to właśnie określa czas co jaki wykona się ten warunek if w pętli while programu. np przerwanie wykonuje się co 1s to jak liczba równa się 10 to if wykona się się co 10 s a jak 1 to co sekundę.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 wrz 2021, o 19:01 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2021
    Posty: 93
    Pomógł: 0

    Ja utknąłem w pewnym punkcie. Chcę kręcić servem w jedną i w drugą na zmianę. Na początku zrobiłem to na 2 pętlach for
    (for uint8_t i=0;i<255;i++){
    pwm1=i;
    _delay_ms(50);
    {
    (for uint8_t i=255;i>1;i--){
    pwm1=i;
    _delay_ms(50);
    {

    Ale, chce się pozbyć tych delajów i pomyślałem, że mogę to zrobić na timerach programowych, tylko nie wiem właśnie jak do tego podejść.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 wrz 2021, o 19:19 
    Offline
    Użytkownik

    Dołączył(a): 02 gru 2015
    Posty: 548
    Pomógł: 27

    No właśnie bez pętli for ustaw tak warunek if żeby wykonywał kod co 50 ms i dodatkowo użyj zmiennej np kierunek np tak
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 wrz 2021, o 19:40 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2021
    Posty: 93
    Pomógł: 0

    Załapałem. W moim kodzie timer1 wykonywał po prostu obieg pętli co taki czas jaki mu zadałem. Miałem ogólnie problem jak zawrócić w drugą stronę, bo zwiększanie to nie problem, wystarczyło pwm1++;



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 wrz 2021, o 18:19 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2021
    Posty: 93
    Pomógł: 0

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


    No, w końcu się udało :lol:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 wrz 2021, o 12:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    krawi92 napisał(a):
    if(pwm1 == 18)kierunek = 0;
    To jedno zmieniłbym na if (pwm1 <= 18). Dlaczego? A co, jeśli zmienisz wartość tej zmiennej w innej części programu i będzie mniejsza od 18? Będzie nadal działać, ale chyba nie tak, jakbyś chciał



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

    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