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



Teraz jest 6 kwi 2026, o 17:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 21 sie 2018, o 11:50 
Offline
Nowy

Dołączył(a): 20 sie 2018
Posty: 5
Pomógł: 0

Cześć!

Czy ktoś mógłby wyjaśnić jak obliczyć potrzebne wartości aby TIMER0 odmierzał ustalony czas np. 1s, 1ms, 1us, albo 10us itd? Mam mikrokontroler Atmega8 taktowany zegarem 8MHz. Bity preskalera ustawiam w następującej konfiguracji

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


CS00 = 1, CS01 = 0, CS02 = 0, czyli zgodnie z notą katalogową TIMER0 będzie taktowany częstotliwością 8 000 000 Hz.

TIMER0 jest 8 bitowy czyli liczy 256 wartości z zakresu: 0 - 255.

I utknąłem, bo nie wiem jak wyliczyć odmierzanie czasu? Powiedzmy chciałbym aby TIMER0 odmierzał czas co 1ms.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 11:55 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

Poczytaj o timerach programowych o których Mirek bardzo fajnie napisal.
W skrócie to tworzysz przerwanie od licznika co np. 1ms a w nim zwiększasz licznik, ktory będzie mógł być wykorzystywany do odliczania wielokrotnosci podstawy czasu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 12:17 
Offline
Nowy

Dołączył(a): 20 sie 2018
Posty: 5
Pomógł: 0

Wiem jak wygląda funkcja przerwania, ale cały problem tkwi w tym, że nie wiem w jaki sposób wyliczane są wartości odmierzania czasu. Na przykład jaką wartość będzie miał TIMER0 gdy minie 1ms? Przecież to musi być wartość z zakresu od 0 do 255 tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 12:19 
Offline
Moderator
Avatar użytkownika

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

tester123pl napisał(a):
Czy ktoś mógłby wyjaśnić jak obliczyć potrzebne wartości aby TIMER0 odmierzał ustalony czas np. 1s, 1ms, 1us, albo 10us itd?

Polecam ci Bluebooka:

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

bo jest tam to świetnie opisane ale też dużo innych ważnych i związanych z tym rzeczy.

Jeśli go nie masz, to sam obliczanie tego co chcesz jest banalnie proste, chodzi o obliczenie wartości OCRx

OCRx = (F_CPU/prescaler/pożądana_częstotliwość)-1

a więc dla 1us --> czyli ---> 1MHz i np dla prescalera=1 i F_CPU=16MHz

OCRx = (16000000 / 1 / 1000000) - 1

krótko mówiąc tak dobieraj sobie prescaler spośród dostępnych dla danego procka i danego timera żeby po obliczeniu tego wzoru wychodziła ci wartość od powiedzmy 2-254 dla timera 8-bitowego

w Bluebooku masz te przykłady rozpisane dla wielu różnych i to konkretnych przypadków - np podczas dobierania częstotliwości do multipleksowania wyświetlaczy.

I taka jedna uwaga - jak masz zamiar timery sprzętowe używać do odmierzania tak gigantycznie długaśnych czasów jak jedna sekunda albo i dłużej to daj sobie spokój z timerami sprzętowymi do tych celów ;) wtedy używa się tzw timerów programowych - których mechanizm też masz ładnie i z wieloma przykładami opisany w książce.

------------------------ [ Dodano po: 1 minucie ]

tester123pl napisał(a):
Wiem jak wygląda funkcja przerwania,

tak ale z tego co piszesz i pytasz - widać, że nie za bardzo zdajesz sobie jeszcze sprawę co to oznacza "timer programowy" i jak się korzysta z tego dobrodziejstwa - a to wręcz podstawa przy programowaniu procków

_________________
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: 21 sie 2018, o 12:25 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 183
Lokalizacja: Kraków
Pomógł: 30

Usuwam post bo Mirek mnie uprzedził.



Ostatnio edytowano 21 sie 2018, o 12:26 przez janusz17, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 12:26 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

W mkAVR Calculator w zakładce Narzędzia
Jest "narzędź" AVR timer kalkulator
Tam jest wszystko co potrzebujesz

Natomiast bez minimum teorii za daleko nie zajedziesz

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 12:52 
Offline
Nowy

Dołączył(a): 20 sie 2018
Posty: 5
Pomógł: 0

mirekk36 napisał(a):

Dziękuję za polecenie, ale póki co szukam darmowych źródeł wiedzy, bo w końcu jak większość mówi "w internecie jest wszystko", ale coś doszukać się nie mogę :D

mirekk36 napisał(a):
to sam obliczanie tego co chcesz jest banalnie proste, chodzi o obliczenie wartości OCRx

OCRx = (F_CPU/prescaler/pożądana_częstotliwość)-1

a więc dla 1us --> czyli ---> 1MHz i np dla prescalera=1 i F_CPU=16MHz

OCRx = (16000000 / 1 / 1000000) - 1

Właśnie nie rozumiem algorytmu obliczania i de facto szukam przejrzystego poradnika.

Dlaczego 1MHz dla 1us? Dlaczego 16MHz skoro korzystam z 8MHz? Właśnie jak precyzyjnie odmierzyć dowolny czas korzystając z 8 bitowego TIMERa? Skąd mam wyliczyć taką wartość TCNT0, aby po przepełnieniu się TIMER0 upłynął wybrany przeze mnie czas np. 1ms, 1us, 10us, 500ms?

Proszę mnie źle nie zrozumieć, ale w dziedzinie programowania mikrokontrolerów ciężko doszukać się klarownych tutoriali w przeciwieństwie do innych dziedzin programowania, gdzie jednak więcej ludzi produkuje fajniejsze tutoriale, które zrozumie nawet... prostszych nie ma :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 12:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

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

może to Ci rozjaśni jak to się oblicza.
Oczywiście obsługa przerwania i zezwolenie na przerwanie bo inaczej to kiszka....

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 13:06 
Offline
Moderator
Avatar użytkownika

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

tester123pl napisał(a):
Proszę mnie źle nie zrozumieć, ale w dziedzinie programowania mikrokontrolerów ciężko doszukać się klarownych tutoriali w przeciwieństwie do innych dziedzin programowania

Proszę mnie źle nie zrozumieć, ale nie na darmo polecam książkę ;) ... proponuję poszukać opinii na jej temat w internecie - zamiast wierzyć nawet w to co ja piszę ;) Wtedy może kolega zrozumie, że jednak taka książka w której wszystko jest przejrzyście wyjaśnione to spora oszczędność ...

Mi osobiście ciężko teraz tutaj od nowa pisać to samo co napisałem w książce żeby koledze wyjaśniać. Tym bardziej, że akurat m.in za tą właśnie tematykę czytelnicy cenią sobie tę książkę.

tester123pl napisał(a):
ale póki co szukam darmowych źródeł wiedzy, bo w końcu jak większość mówi "w internecie jest wszystko", ale coś doszukać się nie mogę

No właśnie ... zatem trzeba się uzbroić w cierpliwość i szukać - jak się ma duuuuuuużo czasu to co to za problem? prawda ? ;) ... zejdzie na to może rok albo i dwa ... może i szybciej - ale co tam czas ;) nie ma co go liczyć

tester123pl napisał(a):
Dlaczego 1MHz dla 1us? Dlaczego 16MHz skoro korzystam z 8MHz? Właśnie jak precyzyjnie odmierzyć dowolny czas korzystając z 8 bitowego TIMERa? Skąd mam wyliczyć taką wartość TCNT0, aby po przepełnieniu się TIMER0 upłynął wybrany przeze mnie czas np. 1ms, 1us, 10us, 500ms?

Bo widzisz - zaczynasz do KOŃCA i dlatego nie widzisz celu. Dlaczego 16MHz - dziwne pytanie - przecież podałem ci tylko przykład - dlaczego nie możesz podstawić do wzoru swojej częstotliwości ? w czym problem.

Kłopot polega na tym, że hmm nie masz książki to zajrzyj chociaż do noty PDF procka - tam masz to też w pewnym zakresie wyjaśnione - chociaż wzory wyglądają nieco inaczej ale to tylko kwestia spojrzenia matematycznego na wzory bo wyniki są te same. Aczkolwiek wydaje mi się, że ja omawiam to w dużo bardziej przystępny sposób w książce i to jak mówię na konkretnych przykładach - żeby łatwiej było zrozumieć a nie tak na sucho jak w PDF. Nie mniej jednak - no co tu dużo mówić - na tą chwilę to na pewno nota PDF procka to dla ciebie i dla każdego zresztą, dla mnie również - to PODSTAWA PODSTAW - mówię ci - tam też jest spora dawka wiedzy i to za darmo - więc tak jak chcesz i lubisz - zatem korzystaj ile wlezie

_________________
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: 21 sie 2018, o 13:06 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

Pewnie, że jest sporo darmowych. Ale wydając pieniądze na książkę (polecam w zestawie z programatorem) nauczysz się wielu innych przydatnych rzeczy. I zaoszczędzisz _mnóstwo_ czasu. Sam posiadam wszystkie 3 książki Mirka, kilka programatorów i 2 zestawy ATB i bardzo sobie je chwalę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2018, o 19:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

tester123pl napisał(a):
Dziękuję za polecenie, ale póki co szukam darmowych źródeł wiedzy, bo w końcu jak większość mówi "w internecie jest wszystko", ale coś doszukać się nie mogę :D
Widzisz, w internecie jest wiele różnych rzeczy, w większości za darmo. Ale problem polega na tym że jeśli nie masz gruntu w postaci chociażby podstawowej wiedzy w danym zakresie, to niestety będzie Ci bardzo ciężko wyłowić z darmowej czeluści internetu wiadomości które by Ci wszystko rozjaśniły. Czasem warto nazbierać trochę grosza by mieć chociaż solidne podstawy pod ręką. A wspomniany już tu BlueBook jest naprawdę solidną skarbnicą wiedzy podstawowej w zakresie programowania avr-ów, sam posiadam i niestety nie wygląda już pięknie, bo często wertowany ;)
Wracając do meritum: jeśli masz problemy ze zrozumieniem przeliczania podziału liczników, to zacznij od zamierzchłych podstaw czyli poczytaj o licznikach binarnych zarówno w teorii jak i w postaci kostek 7493 - i tu nie tylko teoria ale zabawa fizyczną kostką jest wskazana bo to najlepsza nauka poprzez obserwację wyników działania układu. Ja kiedyś podstawy zgłębiałem z książki (jak widzisz bez książek ciężko) "Układy Cyfrowe" autorstwa pana Wojciecha Głockiego (był to podręcznik szkolny do technikum) - moim zdaniem bardzo fajna wiedza z podstaw działania układów cyfrowych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2018, o 12:06 
Offline
Nowy

Dołączył(a): 20 sie 2018
Posty: 5
Pomógł: 0

Muszę powrócić do tematu. Na podstawie wypowiedzi z wątku topic13270.html oraz innej strony znalezionej w sieci.

Doszedłem do poniższego rozumowania i chciałbym by ktoś zweryfikował czy dobrze myślę czy jednak niekoniecznie :) Może się to wydawać dziwne ale próbuję zrozumieć częstotliwość na chłopski rozum. Częstotliwość to liczba operacji wykonanych na sekundę. W ciągu sekundy może być 1, 2, 1000, 1 000 000 operacji...

1Hz to 1 operacja w ciągu sekundy. Czyli przy częstotliwości 8MHz (8 000 000Hz) operacji jest 8 000 000 na sekundę.

Wzór na obliczenie częstotliwości:
f = 1 / T

gdzie T to okres czasu. Przekształcając wzór można otrzymać T = 1 / f.

TIMER/licznik jest układem cyfrowym, który zlicza impulsy zegarowe. Zwiększa się po każdym zliczonym impulsie zegara.

--- Mój algorytm ---
Krok 0.
Używany TIMER0, liczone wartości 0-255 (liczba_wartości_timera = 256), chcę odmierzać czas np. 10us.

Krok 1. Częstotliwość taktowania zegara uCPU:
F = 8 000 000

Krok 2. F dzielona przez preskaler:
f = (8 000 000 / 1) = 8 000 000

Krok 3. Oblicz okres T (Time Period?): ---> ważne pytanie! Jest to czas wykonania 1 impulsu?
T = (1 / f) = (1 / 8 000 000) = 0.000 000 125s = 0.125us.

Krok 4. Liczba impulsów w zakładanym czasie (zakładam 10us): ---> w ciągu 10us wykona się 80 impulsów
timer_count = (zakładany_czas / T) = (1 / 0.125) = 80

Krok 5. Oblicz potrzebną wartość TCNT:
TCNT = (liczba_wartości_timera - timer_count) = (256 - 80) = 176.


--- Wynik ---
Czyli aby TIMER0 odmierzał wybrany czas musi być ustawiony na 176.

Dobrze, niedobrze? No panowie nie skrywajcie tajemnic, bo chciałbym dłużej tutaj posiedzieć :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2018, o 12:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

Kilka postów wyżej napisałem jak to obliczać. Nie czytasz swojego wątku?

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2018, o 12:48 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

Obrazek

Narzędzie które Ci zaproponowałem parę postów temu też tak wyliczyło
Zwróć uwagę że możesz ustalać przedział czasu na dwa sposoby
CTC i Normal.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2018, o 14:27 
Offline
Nowy

Dołączył(a): 20 sie 2018
Posty: 5
Pomógł: 0

mczarny napisał(a):
Kilka postów wyżej napisałem jak to obliczać. Nie czytasz swojego wątku?


Czytam, ale nikt nie odpowiedział na temat tylko podał zdawkowe informacje, polecał książkę itp. Nie ma konkretów tylko jest gdybanie, stosowanie preskalera, innych częstotliwości, mówienie o poradnikach bez podania konkretów. Po co kod z ustawieniem bitów koro zapytałem o sposób dobierania wartości? Muszę zwrócić uwagę, bo nie odpowiedziałeś na pytania postawione przy krokach algorytmu i nie zweryfikowałeś czy dobrze myślę.

Jak ktoś u mnie na forum tematycznym o coś pyta (nawet o pierdołę którą wygugla w 10 sekund) to dostaje konkretną odpowiedź a nie miku fiku, fifti fifti. Wtedy z biegiem czasu sama zaczyna coraz więcej robić i oprócz pytań pomaga innym.

@JarekB:
Spoko kalkulator, mam zainstalowanego ale chciałem wiedzieć czy mój tok rozumowania jest dobry. Najwidoczniej tak ale nie wiedzieć czemu nikt nie chce potwierdzić :)

Swoją drogą niektóre poradniki w sieci są jak ten mem

https://i.kym-cdn.com/photos/images/new ... 78/d6d.jpg

Bardzo pomocne ( ͡° ͜ʖ ͡°)

Skoda panowie ale trochę rozczarowuje polskie forum, nadal panuje zła mentalność jak u większej konkurencji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2018, o 14:39 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

To nie jest tak jak piszesz, o złej mentalności forumowiczów. Na dobrą sprawę nikt nigdy nie wie jaką wiedzę ma pytający. Od czego zacząć, od budowy tranzystora. Od przerzutnika, dwójki liczącej i tak dalej i tak dalej. Im bardziej będziesz zadawał ogólne pytanie tym bardziej będzie ogólna odpowiedź. Zobacz "namęczyłem się" żeby Ci wkleić skreena. mczarny napisał ci kawałek kodu. Pytaj o szczegóły. Im precyzyjniejsze pytanie tym bardziej trafna odpowiedź.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2018, o 15:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

Cóż podałem Ci przykład dla 1ms.
No więc dla 10us będzie następująco:
F_CPU = 8 000 000Hz
przerwanie co 10us więc z częstotliwością 100 000Hz

8 000 000/100 000 -> 80
czyli TCNT0 = (256 - 80) czyli 176
Wychodzi na to, że Twój tok rozumowania jest prawidłowy ;) a wynik taki jak w mkAVRCalculator co pokazał Kol.JarekB

pozdrawiam

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2018, o 15:21 
Offline
Moderator
Avatar użytkownika

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

tester123pl napisał(a):
Jak ktoś u mnie na forum tematycznym o coś pyta (nawet o pierdołę którą wygugla w 10 sekund) to dostaje konkretną odpowiedź a nie miku fiku, fifti fifti.

Ja pierdziu ;) .... podałem gotowy wzór, jak obliczać, ba! podałem nawet przykład obliczania dla jakiejś założonej częstotliwości taktowania - żeby było łatwiej zrozumieć, czyli dla jakichś konkretnych wartości, gdzie wystarczy, żebyś podstawił swoje taktowanie i pożądaną częstotliwość .... a ty piszesz, że fiku miku ?

Inni też podają tutaj już jak przysłowiowej krowie na rowie jak obliczać, swoje przykłady ... .dzięki czemu jeśli się jednego nie zrozumie to można podejrzeć inny sposób a ty na to

tester123pl napisał(a):
Czytam, ale nikt nie odpowiedział na temat tylko podał zdawkowe informacje,


to już jest chore ;) ...

z tego co opisujesz w swoim toku rozumowania widać, że na tą chwilę nie znasz jeszcze kompletnie chyba zasad działania różnych trybów timerów w AVR, które nomen omen są jak byk opisane w każdej nocie PDF dowolnego procka. Nie wiesz czym się różni np tryb NORMAL od trybu CTC a to już wymaga nieco innego podejścia do obliczania - trzeba byłoby zatem zacząć wyjaśniać podstawy timerów, jak to działa itp itd - sporo opisu

Ja podałem ci sedno, wzór, gotowca wręcz , przykładowe obliczenie z wyjaśnieniem krótkim - a książkę poleciłem bo tam się rozpisałem sporo na ten temat i nie na darmo, tak żeby każdy nawet mega początkujący mógł zrozumieć

tester123pl napisał(a):
Skoda panowie ale trochę rozczarowuje polskie forum, nadal panuje zła mentalność jak u większej konkurencji.

ręce opadają - wychodzi lenistwo i mega roszczeniowa postawa. Nie ważne że nic nie wiem o timerach ale macie mi tu raz dwa wytłumaczyć ! to nic że nie rozumiem jak one działają - ale wy MACIE mi tu wyjaśniać w podskokach a nie zdawkowo

po prostu żenada

------------------------ [ Dodano po: 2 minutach ]

Nie dość, że pierwsza wizyta na forum, to jeszcze pretensje że nikt nie podpowiada - pomimo aż tylu różnych podpowiedzi , odpowiedzi, przykładów i wzorów podanych

co ty chłopie chcesz udowodnić ? ;)

_________________
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: 23 sie 2018, o 16:24 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

A z ciekawości - na jakim to forum tematycznym się udzielasz? Może się czegoś nowego nauczę?



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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