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



Teraz jest 26 lut 2025, o 23:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 25 mar 2015, o 19:45 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

Witam,
mam problem z odmierzaniem czasu a mianowicie: podczas 1 minuty pojawia mi się błąd ok 2sekund. Mogę to skorygować programowo lecz chciałbym by liczyło mi dobrze. Podpiąłem kwarc 2MHz, ustawiłem ATmega8 na zewnętrzny kwarc, dałem C przy nim i błąd nadal pozostał. Czy istnieje możliwość poprawienia tego bez konieczności wkładania dodatkowych układów? Słyszałem o układach RTC lecz jestem w tym zupełnie zielony.

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


Pozdrawiam forumowiczów :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 19:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

OK, pierwsza rzecz
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 ustawiasz ale wrodzone lenistwo nie pozwala mi zaglądnąć do DS'a żeby sprawdzić co. Przydała by sie informacja typu "chcę uzyskać częstotliwość mrugania zegarkiem 1Hz". Wtedy ja czy ktoś inny jesteśmy w stanie sprawdzić czy to co chciałeś uzyskać uzyskałeś czy może tu jest babol. To jeswt pierwsza rzecz i zdanie "prescaler 1024" też niewiele wyjaśnia.
Choć dla 2MHz kwarcu i prescalera 1024 przy częstotliwości 1Hz vłąd jest na poziomie 1.28%. Więc podaj więcej informacji, a na pewno ktoś Ci pomoże :)


Autor postu otrzymał pochwałę

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 20:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2014
Posty: 37
Pomógł: 2

W niewielkim stopniu można skorygować częstotliwość kwarcu przez dodanie do kwarcu trymera (kondensatora regulowanego - Obrazek ). Do jednej nóżki kwarcu kondensator stały i do masy, do drugiej trymer i do masy. Jednak tego typu korekta da tylko niewielkie zmiany. Moim zdaniem pozostaje korekta programowa, która jest jak najbardziej prawidłowa.
(Coś jak tu -Obrazek- nóżki 15, 16 PIC-a)

[ fotki na forum umieszczamy w ten sposób: topic44.html - mirekk36 ]

Poprawiłem ;))



Ostatnio edytowano 27 mar 2015, o 09:21 przez wzagra, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 20:20 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

Spróbuję wyjaśnić jak ja to rozumię lecz jak pisałem, jestem początkującym :)

Ogólnie chcę mieć zegarek któy będzie liczył z cczęstotliwością1Hz, niestety tutaj nie otrzymiętego ponieważ maksymalny systemowy preskaler jaki mogę ustawić (a przynajmniej ja tak to rozumię) to 1024.
Więc zapis:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ustawia mi preskaler na opcje dzielenia przez 1024 sygnału zegarowego (ustawiłem by CLK był kwarc zewnętrzny 2MHz).

Otrzymuję więc 1953,125Hz czyli jest to 0,512ms. Ustawiam TCNT0 = 6; (więc 255-6=249, czyli 250stanó) więc przerwanie pojawi mi się raz na 128ms. Więc w jednej sekundzie mieści mi sie 7,8125 przerwań. Zmienna a zwiększa mi się po określonej liczbie przepełnień jednocześnie ustawiając mi wtedy sygnał że minęła 1sekunda.

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


Teraz mam problem, bo jeżeli chce mieć dokładnie 1s to powinienem mieć całkowitą liczbę przerwań w sekundzie, bez ułamków. Tutaj mam 7,8125 więc jest nie za dobrze. Dobrze rozumuję?

Wzorowałem sie na tej stronie :..., lecz niestety dopiero zaczynam zabawę z przerwaniami, licznikami i programowaniem układów.

Wolałbym nie dokładać trymerka ponieważ może się rozregulować z czasem a chciałbym zamknać to potem w pudełku i niech śmiga sobie latami :D mimo że jestem młody to przekażę to swoim wnukom za wieeeele lat :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 20:32 
Offline
Użytkownik
Avatar użytkownika

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

Radziłbym Ci jednak zastosować układ RTC np. DS3231, nie jest on drogi https://www.sklep.atnel.pl/pl/p/RTC-DS3231SN/87, a zobacz jakie możliwości http://mirekk36.blogspot.co.uk/2013/11/rtc-ds3231-najdokadniejszy-zegarek-na.html
Jeśli nie masz wprawy w lutowaniu napewno kupisz dość tanio gotowy modół z baterią przez internet, wystarczy tylko poszukać. :D


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 20:56 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

Akurat z lutowaniem sobie radzę, ale zrobiłem sobie założenie że chcę narazie ograniczyć sięz modułami zewnętrznymi, dopiero jak nauczę sie w miarę jak obsługiwać same ATmegi to podepnę kolejne moduły. Właśnie doszedł mi moduł radia TEA :)

Czy zastąpienie kwarcu 2MHz innym pomoże? takim który nie będzie mi dawał liczb ułamkowych. Np. mam 7,3728MHz i 10,240MHz, ale nie wiem który lepiej włożyć (o ile to pomoże)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 21:00 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

matti0010 napisał(a):
Wolałbym nie dokładać trymerka ponieważ może się rozregulować z czasem a chciałbym zamknać to potem w pudełku i niech śmiga sobie latami :D mimo że jestem młody to przekażę to swoim wnukom za wieeeele lat :lol:


No wnukom przekazać możesz, ale on będzie mieć już wtedy odchyłkę o kilka lat :lol:.
Po prostu uC bez użycia RTC nie uzyskasz pożądanej dokładności - chyba, że zrobisz synchronizację z jakimś zegarem atomowym (czy to przez DCF czy też przez internet) i zgodzisz się na to, że pomiędzy synchronizacjami będzie "troszkę nie tak".
Innym wyjściem jest PCF, a jeszcze lepiej właśnie super dokładny RTC przytoczony przez kolegę powyżej RTC DS3231 (jego opis tu: http://mirekk36.blogspot.co.uk/2013/11/ ... ek-na.html), ale i jego czasem warto zsynchronizować z czymś zewnętrznym. Tyle tylko, że w tym przypadku możesz to robić dość rzadko.
Ja bym to porównał tak:
- sam uC bez RTC - synchro co godzinę (albo i częściej zależnie jak dużą odchyłkę zauważysz)
- PCF - synchro raz na dobę
- DS3231 - synchro raz na tydzień (albo i rzadziej)

Wybierz sam - każdemu wg. potrzeb.

--
Grzegorz...


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 21:07 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

Na obecną chwilę zrobie na samym kwarcu, dam 10,240MHz. Potem faktycznie spróbuję RTC i zainteresuje się PCF. Będę miał porównanie :)

Tylko w jaki sposób najlepiej zrobić to programowo by nie wprowadzało mi to problemów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 lut 2014
Posty: 96
Lokalizacja: Łódź
Pomógł: 6

Cytuj:
Teraz mam problem, bo jeżeli chce mieć dokładnie 1s to powinienem mieć całkowitą liczbę przerwań w sekundzie, bez ułamków. Tutaj mam 7,8125 więc jest nie za dobrze. Dobrze rozumuję?


Jak najbardziej. Musisz uzyskać liczbę całkowitą.

Proponuję Ci tak:

Przerzuć się na 16-bitowy Timer (czyli taki, który potrafi odliczać od 0 do 65535). W atmedze8 jest to Timer1.

Dla częstotliwości 2 000 000 Hz ustaw prescaler 64 i otrzymasz 31250 tyknięć timera na sekundę. Jeśli ma ów być w trybie overflow-normal (choć polecam CTC), to ustaw mu wartość początkową (i ponawiaj to ustawianie w procedurze obsługi przerwania) równą 65536 - 31250 = 34286. Będziesz miał przerwanie co sekundę



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 21:52 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

właśnie ustawiłem trochę inaczej a mianowicie, dałem kwarc 10,240MHz, a do tego ustawiłem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak narazie w ciagu 22 minut nie widzę nawet sekundy opóźnienia.

Dziękuję wszystkim za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2015, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Można też wykorzystać kwarc zegarkowy 32768Hz podłączony do pinów TOSC1 i TOSC2. I tym kwarcem taktować Timer2 pracujący w trybie asynchronicznym
topic8369.html#p93820
topic8487.html#p95182

Wtedy procesor można taktować wewnętrznym oscylatorem o wartości np. 8MHz a Timer2 taktowany kwarcem zegarkowym będzie ładnie odmierzał 1s.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2015, o 00:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

matti0010 napisał(a):
Ogólnie chcę mieć zegarek któy będzie liczył z cczęstotliwością1Hz, niestety tutaj nie otrzymiętego ponieważ maksymalny systemowy preskaler jaki mogę ustawić (a przynajmniej ja tak to rozumię) to 1024.

Niestety nie mogę sie z Toba zgodzić.
Zacznijmy od początku. Masz zegar 2MHz co daje 2 000 000 Hz
Wg moich obliczeń przy użyciu tajmera 1 można bez problemu ustawić preskaler na 64 co dam nam niemalże bezbłędne odliczanie. Dla preskalera 1024 błąd jak wspominałem wcześniej wynosi 1,28%
Jest wiele kalkulatorów. Ja proponujue ten http://impuls.elektroda.eu/joomla/index ... kalkulator zkorzystaj i zobaczysz, że można spokojnie ustawic inny preskaler i teżbędzie GIT

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2015, o 19:25 
Offline
Użytkownik

Dołączył(a): 14 lut 2015
Posty: 44
Pomógł: 2

Może ja coś podpowiem, choć sam się uczę.
Jak nie możesz uzyskać częstotliwości 1Hz za pomocą preskalera, to może warto użyć trybu CTC ?
Ja popełniłem coś takiego na ATmega32 napędzana wewnętrznym oscylatorem 8MHz,uzyskując częstotliwość przerwania 1000Hz .

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


Zegarek zrealizowałem za pomocą kodu,umieszczonego w przerwaniu:

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


Wszystko zostało tak zrobione, bym miał pojedyncze liczby na wyświetlacz LED.
Oczywiście zegarek też nie był dokładny, łapał gdzieś minutę na godzinę, nie pamiętam dokładnie.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2015, o 19:42 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

To mam inne pytanie w tym momencie: muszę przenieść kod z ATmega8 na mocniejszą, np. na ATmega32. Czy Poza zmianą pinów I/O muszę zmienić ustawienia zegara itd? chodzi mi o ten licznik w ATmedze, ponieważ jestem w tym zielony i nie wiem czy one są "przenaszalne" czy może trzeba od zera je pisać



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2015, o 20:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

da się przenieść tylko trzeba będzie popatrzeć do DS'a jak nazywają się poszczególne rejestry. Czy są takie same czy może sie pozmieniały. Ale zasada obliczania zostaje taka sama.
Ale z tego co pamiętam jest tam jakaś różnica więć trzeba będzie napisać od początku.

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2015, o 20:33 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

a mógłby ktoś mi dać przykład? łatwiej jest mi zrozumieć zasadę działania na przykładzie a nie czytając suchą teorię. Oczywiście jeżeli to nie problem dla jakiegoś forumowicza :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2015, o 00:10 
Offline
Użytkownik
Avatar użytkownika

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

Zobacz ten wątek http://forum.atnel.pl/topic11157.html
Znajdziesz tam przykład na ATmega32.
Jeśli chcesz by trochę lepiej działał to podłącz zewnętrzny kwarc 11.0592 MHz i w pliku main.c zamiast OCR2=77 daj OCR2=107.
A gdy zależy Ci na dokładniejszym zegarku to tak jak pisałem wcześniej użyj układu DS3231 i kodu p. Mirka (link do "darmowego" poradnika masz kilka postów wyżej).
Jeśli naprawdę chcesz nauczyć się programowania w C to szczerze polecam Ci zakup BB http://atnel.pl/mikrokontrolery-avr-jezyk-c.html.
Tam znajdziesz nie tylko "suchą wiedzę" :D , ale rewelacyjne przykłady, dzięki którym wiele się nauczysz. Dodatkowo na płycie DVD znajdziesz wszystkie przykłady z naprawdę dobrymi (dopracowanymi ) bibliotekami, a nie często byle jakimi z internetu. :D Książka trochę kosztuje, wiem, ale warta jest tych pieniędzy, bez dwóch zdań! Gorąco polecam! Proszę nie traktuj mojej namowy do zakupu jako przymusu. Bez tej książki też dasz radę się nauczyć, tylko że zmarnujesz mnóstwo czasu. A jak mówią: czas to pięniądz. Pozdrawiam serdecznie!


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2015, o 00:18 
Offline
Użytkownik

Dołączył(a): 04 sie 2014
Posty: 207
Pomógł: 0

Właśnie pieniądze to główny problem, z tego powodu chcę ograniczyć się z dodatkowymi układami. Miałem już tę książkę w ręce i planuję ją kupić, ale najpierw muszę uzbierać dość funduszy, więc zachęcać mnie nie trzeba :P

Poczytam ten temat i chyba to mnie wystarczy jeżeli chodzi o przykłady, dziękuję :) Naprawdę wszyscy okazali mi tu nieocenioną pomoc, jesteście niesamowici :P



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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