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



Teraz jest 17 wrz 2026, o 13:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 2 sty 2016, o 22:30 
Offline
Nowy

Dołączył(a): 21 sie 2014
Posty: 11
Pomógł: 0

Witam.
Właśnie przerabiam zagadnienia związana z timerami i niby wszystko działa ale...

Mam taki programik który dla rezonatora 8Mhz powinien generować przerwania co ok 200Hz, przynajmniej według książki tak powinno być.
I teoretycznie, a nawet praktycznie tak jest. Program wgrany na Atmega32. Po zmierzeniu częstotliwości na pinie PD0 poru A, miernik pokazuje 200,3Hz.
Ale w moim przypadku chyba nie powinno to tak działać ponieważ mam na płytce kwarc 16Mhz (opis na rezonatorze CQ16.000)
Fuse bity ustawione tak: L - 0xEF, H - 0xD0.
Czyli żeby otrzymać ok 200Hz przy rezonatorze 16Mhz powinienem wpisać do OCR0 liczbę 77. Jak ją wpiszę zamiast liczby 38 to wynik się nie zgadza. Przy OCR0=77 otrzymuję na wyjściu 100,1Hz.
Liczę to w ten sposób:
OCR0 = (f_cpu 16 000 000 / preskaler 1024 / 200Hz ) -1 = 77
Mimo iż mam rezonator 16Mhz to wszystko działa jakbym miał 8Mhz
I tu moje pytanie co zrobiłem źle lub czego nie zrozumiałem?


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: 2 sty 2016, o 22:46 
Offline
Użytkownik
Avatar użytkownika

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

Witam
wylly napisał(a):
Fuse bity ustawione tak: L - 0xEF, H - 0xD0

Nie wiem, ale to wygląda na ustawienie pod generator zew. a nie kwarc >8MHz.
Z mkAVR'a "wychodzi" że raczej FF i D9, ale nie przepisuj tak na słowo tylko jeszcze sprawdź żebyśmy wspólnymi siłami nie zadusili M32.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2016, o 23:20 
Offline
Użytkownik

Dołączył(a): 07 kwi 2015
Posty: 42
Pomógł: 1

PORTA ^= (1<<PD0); //Zmiana stanu

Coś tu chyba nie teges.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 00:03 
Offline
Użytkownik
Avatar użytkownika

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

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

Coś tu chyba nie teges.

...jeśli ma pod PORTA to bez różnicy bo dla kompilatora obojętnie czy wpisze PD0 czy PA0 i tak podstawi wartość cyfrową " 0 " - no ale brzydko wygląda ;)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 01:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Chyba masz wszystko dobrze. Tylko pomyliłeś że częstotliwość to pomiar okresu a nie półokresu. Miernik liczy ci długość okresu czyli czas gdy masz obie części przebiegu - 0 i 1. A do tego potrzebne są aż 2 zmiany, czyli 2 przerwania przepełnienia.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 09:57 
Offline
Nowy

Dołączył(a): 21 sie 2014
Posty: 11
Pomógł: 0

Witam.
Dzięki za zainteresowanie tematem.
Jeśli chodzi o
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

No to faktycznie nieładnie to wygląda - obiecuję poprawę :D

Jeśli chodzi o częstotliwość przerwań i jej pomiar miernikiem to chyba kolega rskup ma rację.
Pół nocy analizowałem w głowie ten przypadek i doszedłem do podobnych wniosków.

Według obliczeń dla zew rezonatora kwarcowego 16Mhz wychodzi że po wpisaniu OCR0=38 powinienem otrzymać częstotliwość ok 400Hz, a mkiernik pokazuje ok 200Hz, czyli wychodzi dobrze bo tak jak kolega rskup napisał:
Cytuj:
częstotliwość to pomiar okresu a nie półokresu. Miernik liczy ci długość okresu czyli czas gdy masz obie części przebiegu - 0 i 1. A do tego potrzebne są aż 2 zmiany, czyli 2 przerwania przepełnienia.


Jeśli chodzi o fuse bity to chyba są dobrze bo po sprawdzeniu na
http://www.engbedded.com/fusecalc/
Wychodzi że kwarc to:
Ext. Crystal/Resonator High Freq.; Start-up ime: 16K + 4ms; [CKSEL=1111 SUT=10]

Pozdrawiam i zaczynam dalej wałkować temat z timerami.
Jeszcze raz dzięki 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: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO