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



Teraz jest 17 kwi 2026, o 16:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 5 lip 2015, o 20:36 
Offline
Nowy

Dołączył(a): 25 cze 2015
Posty: 9
Pomógł: 0

Witam,
Przerabiam właśnie bluebook'a i w ramach ćwiczeń które sobie sam wymyślam zrobiłem prosty stoper jak w temacie, jednak dzieje się coś czego nie rozumiem.

Procesor taktuję wewnętrznym oscylatorem RC 8MHz. W timer0 ustawiłem prescaler na 256 (bit CS02=1), do do rejestru TCNT0 ładuję wartość 131 (0b1000011) i włączam przerwanie od przepełnienia. W procedurze obsługi przerwania mam zmienną statyczną licznik. Z każdym przerwaniem inkrementuję go i gdy osiągnie wartość 250 mija jedna sekunda (powinna), co wyświetlam na wyświetlaczu 7 segmentowym, jednak rzeczywiście nie mija jedna sekunda tylko 2. Po zmienieniu warunku na "gdy osiągnie wartość 125" wszystko jest ok. Nie rozumiem czemu się tak dzieje, no bo po rachunkach:

8000000/256/(256-131)= 250

wychodzi że gdy licznik osiągnie wartość 250 powinna minąć 1 sekunda. Nie widzę błędu w moim rozumowaniu, jednak coś jest nie tak... tylko co?

Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 20:45 
Offline
Moderator
Avatar użytkownika

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

Pablo201_5 napisał(a):
Nie widzę błędu w moim rozumowaniu, jednak coś jest nie tak... tylko co?

No właśnie - a pytanie jest do jasnowidzów rozumiem ? po co pokazywać swój kod prawda ?

_________________
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: 5 lip 2015, o 20:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Bez obrazy, ale zamiast poezji:
Pablo201_5 napisał(a):
Procesor taktuję wewnętrznym oscylatorem RC 8MHz. W timer0 ustawiłem prescaler na 256 (bit CS02=1), ...
...
... na "gdy osiągnie wartość 125" wszystko jest ok.

taki ludzki kawałek kodu może by coś więcej powiedział.

...będę strzelał: a zerujesz TCNT po doliczeniu do określonej wartości?

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 22:21 
Offline
Nowy

Dołączył(a): 25 cze 2015
Posty: 9
Pomógł: 0

Tak, naturalnie, wkleję kod :-)

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


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



Ostatnio edytowano 5 lip 2015, o 22:32 przez Pablo201_5, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 22:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Zmień listing kodu: listing - SYNTAX wybierz: C bo "lekko" nieczytelne
..a to:
Pablo201_5 napisał(a):
TCCR0 &= ~((1<

zaczyna wyglądać groźnie.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 22:29 
Offline
Nowy

Dołączył(a): 25 cze 2015
Posty: 9
Pomógł: 0

edytowałem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 22:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

A w jaki sposób wyliczyłeś TCNT0=131? Jaką pożądaną częstotliwość chcesz uzyskać? Masz program mkAVR Calculator?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lip 2015, o 23:00 
Offline
Nowy

Dołączył(a): 25 cze 2015
Posty: 9
Pomógł: 0

Mam timer 8 bitowy, taktowanie wynosi 8 MHz. Prescaler wynosi 256. Do TCNT0 załadowałem 131. Chcę uzyskać częstotliwość 250 Hz...
...wiec:

8MHz/256/(256-131)= 250 Hz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lip 2015, o 01:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Zwróć uwagę na procedurę obsługi przerwania od przepełnienia w którym miejscu zamieściłeś linijkę:
TCNT0 = 0b1000011; //PRJESTR TCNT0=131

A gdzie powinna być? ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lip 2015, o 08:55 
Offline
Nowy

Dołączył(a): 25 cze 2015
Posty: 9
Pomógł: 0

Nie powinna być w warunku.

czyli tak:?

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


jednak dalej nie działa to dobrze. W ciągu minuty ma opóźnienie o jakieś 15 sekund.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lip 2015, o 09:10 
Offline
Moderator
Avatar użytkownika

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

Pablo201_5 napisał(a):
TCNT0 = 0b1000011; //PRJESTR TCNT0=131


Ja przepraszam że tak zapytam (na wesoło zaznaczam) ;) ... jesteś masochistą, że robisz takie zapisy ?

czy nie prościej byłoby zapisać

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


no powiedz sam ?

bo podpowiem ci, że właśnie przez taki masochizm ludzie nie potrafią później dostrzec swojego błędu - ta liczba binarna którą wpisujesz to na pewno nie jest 131

_________________
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: 6 lip 2015, o 09:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Składnia: [ Pobierz ] [ Ukryj ]
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: 6 lip 2015, o 09:20 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

mirekk36 napisał(a):
czy nie prościej byłoby zapisać

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

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lip 2015, o 09:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Pablo201_5 napisał(a):
czyli tak:?


Dokładnie tak, tylko popraw ten fragment kodu, o którym mówi pan Mirek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lip 2015, o 10:55 
Offline
Nowy

Dołączył(a): 25 cze 2015
Posty: 9
Pomógł: 0

mirekk36 napisał(a):
Pablo201_5 napisał(a):
TCNT0 = 0b1000011; //PRJESTR TCNT0=131


Ja przepraszam że tak zapytam (na wesoło zaznaczam) ;) ... jesteś masochistą, że robisz takie zapisy ?

czy nie prościej byłoby zapisać

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


no powiedz sam ?

bo podpowiem ci, że właśnie przez taki masochizm ludzie nie potrafią później dostrzec swojego błędu - ta liczba binarna którą wpisujesz to na pewno nie jest 131


Oczywiście że prościej! :-). Dzięki wielkie za pomoc.



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

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