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



Teraz jest 30 lis 2024, o 21:52


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: 27315
Lokalizacja: Szczecin
Pomógł: 1041

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: 27315
Lokalizacja: Szczecin
Pomógł: 1041

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: 27315
Lokalizacja: Szczecin
Pomógł: 1041

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
Avatar użytkownika

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

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: 27315
Lokalizacja: Szczecin
Pomógł: 1041

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