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 9 kwi 2025, o 09:36


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
    Autor Wiadomość
     Tytuł: Timer1
    PostNapisane: 2 sie 2012, o 09:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 25 maja 2012
    Posty: 296
    Lokalizacja: Chebzie Dolne
    Zbananowany użytkownik

    Pomógł: 6

    Witam!
    Robię pewny projekt opisywałem w innym dziale, lecz czas mnie nagli więc zamieszczę niektóre części tutaj.
    Odnośnie problemu. Konfiguruje Timer1 na m32 i nie działa. Timer ten chcę wykorzystać do funkcji SuperDebounce kolegi Mirka jak i robienia timerów programowych. Inne timery 8 bitowe są wykorzystane m.in. do enkodera i pwm dla silników.
    Próbowałem zrobić timery sprzętowe na Timer0 i działało a na 16 bitowym Timerze1 nie działa.

    _________________
    Inspekcja TV kanalizacji
    Programowanie



    Ostatnio edytowano 7 sty 2013, o 21:15 przez developer85, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 2 sie 2012, o 09:55 
    Offline
    Moderator
    Avatar użytkownika

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

    Ja pozwolę sobie coś podpowiedzieć tutaj, jeśli można ? ;)

    Zobacz ładnie sprawdziłeś w nocie PDF ustawianie trybu CTC, no i poprawnie go ustawiasz - super. Ale weź przejedź wzrokiem w prawo w tej tabeli gdzie widzisz CTC i zobacz na kolumnę TOP, czyli na podstawie jakiej wartości jest przeładowywany CTC ??? widzisz ??? chodzi o OCR1A, natomiast ty nie wiedzieć czemu odpalasz sobie przerwanie CompareB ( TIMSK = (1<<OCIE1B ); ) no i używasz też wektora od CompareB zamiast CompareA ( TIMER1_COMPB_vect ) i dlatego się dziwisz wciąż, że ci tu nie działa CTC :( ... Popraw to na CompareA i wtedy sprawdź ;) OK ???? ... to na drugi raz zapamiętasz jak się podchodzi do trybu CTC i że trzeba patrzeć na te wartości w kolumnach po prawej stronie.

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 3 sie 2012, o 08:22 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 25 maja 2012
    Posty: 296
    Lokalizacja: Chebzie Dolne
    Zbananowany użytkownik

    Pomógł: 6

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


    Ale dalej jest problem. Kiedy daje inicjalizacje encode_init() w funkcji main - procek zwisa.

    -- 17 minutach --

    Poprawka sprawdziłem na innym programie i timer1 działa. Widocznie tutaj mi się kłóci z innymi przerwaniami lub znów błędnie piny podłączyłem:/

    _________________
    Inspekcja TV kanalizacji
    Programowanie



    Ostatnio edytowano 7 sty 2013, o 21:15 przez developer85, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 3 sie 2012, o 08:46 
    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

    A mi wyszło, że dla taktowania 11,0592MHz, preskalera 1024 i OCR1A=10800 przerwanie będzie co 1 sekundę, a nie 10ms jak piszesz.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 3 sie 2012, o 08:55 
    Offline
    Moderator
    Avatar użytkownika

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

    Krauser napisał(a):
    A mi wyszło, że dla taktowania 11,0592MHz, preskalera 1024 i OCR1A=10800 przerwanie będzie co 1 sekundę, a nie 10ms jak piszesz.


    Dokładnie!

    Do autora --> jak ty to liczysz ??

    OCR1A = 10800; // przerwanie porównania co 10ms (100Hz)

    przecież

    11059200Hz (F_CPU) / 1024 (preskaler) / 10800 (ocr1a) = 1s

    chcesz 100Hz to licz tak wartość OCR1A ;

    11059200Hz (F_CPU) / 1024 (preskaler) / 100Hz (pożądana częstotl) = 109 (ocr1a)

    i tak samo sobie sprawdzasz ;)

    11059200Hz (F_CPU) / 1024 (preskaler) / 108 (ocr1a) = 100Hz (czyli 10ms)

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 3 sie 2012, o 08:57 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 25 maja 2012
    Posty: 296
    Lokalizacja: Chebzie Dolne
    Zbananowany użytkownik

    Pomógł: 6

    Okazało się że najpierw musi być inicjalizacja UART (niewiem dlaczego - niech ktoś mądry mi powie) a następnie inicjalizacja encode_init i inicjalizacja wyświetlacza.

    -- 1 minucie --

    Robię testy na szybko i nie przykładam dokładnej uwagi na czasy przerwania ponieważ najpierw chgciałem uruchomić poprawnie timera a później dopiero liczyć poprawne przerwania. Więc nie bijcie odrazu

    _________________
    Inspekcja TV kanalizacji
    Programowanie



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 3 sie 2012, o 09:01 
    Offline
    Moderator
    Avatar użytkownika

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

    Ale kto cie bije? przecież podałem ci poprawny sposób liczenia ;) więc chyba dobrze.

    -- 2 minutach --

    arko_go napisał(a):
    Okazało się że najpierw musi być inicjalizacja UART (niewiem dlaczego - niech ktoś mądry mi powie) a następnie inicjalizacja encode_init i inicjalizacja wyświetlacza.


    To niestety jest twój wymysł tzn może inaczej, twój błąd w pisaniu softu a nie jakieś zależności od kolejności ;)

    przerwania ruszą TYLKO w i wyłącznie po poleceniu sei(); które powinieneś dać dopiero przed samą pętlą główną

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

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 3 sie 2012, o 09:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 25 maja 2012
    Posty: 296
    Lokalizacja: Chebzie Dolne
    Zbananowany użytkownik

    Pomógł: 6

    Mam jeszcze pytanie. Ponieważ szczytuje impulsy z enkodera silnika i wysyłam co 1s na terminal impulsy w trakcie postoju silnika nie powinny być inkrementalne a wartość wysyłana na terminal jest jakoś chaotycznie zwiększana lub zmniejszana. Nie wiem jak wyeliminować ten problem. Korzystam z softu SunRivera do obsługi enkodera.

    _________________
    Inspekcja TV kanalizacji
    Programowanie



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 3 sie 2012, o 21:00 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    tu jest właśnie problem z magnetycznymi encoderami , najprościej by było jakbyś go wyłaczył i startował podczas pracy

    -- kilkunastu sekundach --

    ten sam problem występuje z halotronami potrafia się dziwacznie zachowywać

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 6 sie 2012, o 18:57 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 25 maja 2012
    Posty: 296
    Lokalizacja: Chebzie Dolne
    Zbananowany użytkownik

    Pomógł: 6

    Wyeliminowałem samoczynne zwiększanie się wartości enkodera:)
    Ale jak zrobić rzecz następującą. Ustawiam np timer1, preskaler 1024, częstotliwość np 500Hz. Wysyłam wartości np co 1 sekunde na terminal ale wartości nie są z czytywane jednakowo, np: raz jest wysyłane 14 impulsów raz 20 a innym razem 10 - przykładowo. Jest to związane z częstotliwością skanowania.
    Silnik kręci się ze stałą prędkością. Jak poradzić sobie z tym nierównym z czytywaniem? Kombinowałem na różnych ustawieniach preskalera.
    Aha i jak się ma częstotliwość powstawania impulsów w enkoderze właśnie do ustawienia timera?

    _________________
    Inspekcja TV kanalizacji
    Programowanie



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 7 sie 2012, o 11:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 gru 2011
    Posty: 449
    Pomógł: 4

    mirekk36 napisał(a):
    11059200Hz (F_CPU) / 1024 (preskaler) / 100Hz (pożądana częstotl) = 109 (ocr1a)


    Nie chcę się czepiać, ale czy nie powinno być 108?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Timer1
    PostNapisane: 7 sie 2012, o 11:53 
    Offline
    Moderator
    Avatar użytkownika

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

    worner napisał(a):
    mirekk36 napisał(a):
    11059200Hz (F_CPU) / 1024 (preskaler) / 100Hz (pożądana częstotl) = 109 (ocr1a)


    Nie chcę się czepiać, ale czy nie powinno być 108?


    ZDECYDOWANIE masz rację ;) no matematyki nie da się oszukać a wychodzi tu okrągłe 108 ;) .... to po prostu moja kolejna literówka niestety.

    _________________
    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  
     Tytuł: Re: Timer1
    PostNapisane: 7 sie 2012, o 12:15 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 gru 2011
    Posty: 449
    Pomógł: 4

    Zdarza się nawet najlepszym.



    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ł: Google [Bot] 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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO