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



Teraz jest 27 sty 2025, o 17:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 24 ] 
Autor Wiadomość
PostNapisane: 5 mar 2014, o 01:51 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

Witam,

Mam problem z wygenerowaniem przerwania dokładnie z częstotliwością 1Hz. Ustawiłem wszystko jak należy, policzyłem jaką wartość należy ustawić na rejestrze porównania i generalnie przerwanie następuje w okolicach 1hz jednak po kilku sekundach migotania diody można już zauważyć odchył w czasie. Pod spodem zamieszczam kod. Pracuję na Atmega88PA-PU, standardowe ustawienie Fuse bitów, taktowanie tak samo: 1Mhz. (niestety w darmowej wersji Mkavr nie można tego procka ustawić, więc po zakupie niczego nie zmieniałem. :) ). Uważam, że nie możliwością jest aż tak fatalna dokładność wewnętrznego oscylatora dlatego napewno sam zrobiłem coś nie tak. Bardzo proszę o pomoc. Pozdrawiam


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

Do wstawiania kodu używamy znacznika 'syntax' zamiast znacznika 'code' - poprawiłem (Sonix)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 07:32 
Offline
Użytkownik

Dołączył(a): 12 paź 2012
Posty: 207
Lokalizacja: Rzeszów
Pomógł: 16

Używaj do wstawiania kodu syntax c.
Obliczone chyba dobrze, ale wyliczoną wartość ładujesz do OCR1A a włączasz i obsługujesz przerwanie od porównania B.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 10:34 
Offline
Użytkownik

Dołączył(a): 26 mar 2012
Posty: 26
Pomógł: 0

Dokładnie! Jeśli używamy przerwania COMPB to musimy wpisać wartość do rejestru OCR1B..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 10:56 
Online
Moderator
Avatar użytkownika

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

DC2002 napisał(a):
Dokładnie! Jeśli używamy przerwania COMPB to musimy wpisać wartość do rejestru OCR1B..


tylko że jeśli OCR1A będzie miało mniejszą wartość to i tak na nic się zda takie działanie z COMPB

używaj OCR1A oraz przerwania COMPA

_________________
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 mar 2014, o 16:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

deathes napisał(a):
Uważam, że nie możliwością jest aż tak fatalna dokładność wewnętrznego oscylatora


Kiedyś robiłem prosty zegarek jeszcze w bascomie (w celu nauki), procek był pędzony tekże 1MHz wewnętrznym oscylatorem. Minuta trwała ok 90 sekund :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 17:24 
Online
Moderator
Avatar użytkownika

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

kaka0204 napisał(a):
deathes napisał(a):
Uważam, że nie możliwością jest aż tak fatalna dokładność wewnętrznego oscylatora


Kiedyś robiłem prosty zegarek jeszcze w bascomie (w celu nauki), procek był pędzony tekże 1MHz wewnętrznym oscylatorem. Minuta trwała ok 90 sekund :D


Bo kolega bardzo źle napisał program - więc proszę nie opowiadać TAKICH HEREZJI niestety :( tzn żeby nie było nieporozumień - pisząc o tych herezjach nie chcę kolegi obrazić, ani się nie denerwuję ani nie krzyczę - chociaż napisałem to dużymi literami - ale dalej wyjaśnię dlaczego takiego określenia używam ok?


proszę nie zwalać kłopotów z umiejętnością programowania na takie niepowodzenia co do mierzonego czasu ....

żeby lepiej zrozumieć o co chodzi z dokładnością wewn. oscylatorów w AVR proponuję sobie z jednej strony zajrzeć do noty PDF i zobaczyć o ile ew % może być odchyłka. A z drugiej strony proszę sobie powtórzyć to ćwiczenie nawet w Bascomie i gwarantuję - że NIGDY w ZADNYM wypadku przy poprawnie napisanym kodzie nie dojdzie do takiej rozbieżności ;) ok ? .... ewentualnie proszę pokazać swój kod z tego doświadczenia ;)

reaguję na tą wypowiedź bo niestety w ten sposób rozsiewają się po świecie takie bajki a później ludziska tzn początkujący lecą do sklepu i kupują kwarca 1MHz bo rzekomo wewn oscylator jest AŻ TAK niedokładny ;)

_________________
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 mar 2014, o 17:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

mirekk36 napisał(a):
ewentualnie proszę pokazać swój kod z tego doświadczenia


Kodu nie pokaże, bo go nie mam :P Co do odchyłki, może trochę przedobrzyłem, ale była na pewno duża, powiedziałbym, że bardzo duża. Testowałem, też ten kod z tej stronki (bez rezonatora) i także był ten sam problem.

http://danyk.cz/avr_hod.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 17:52 
Online
Moderator
Avatar użytkownika

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

kaka0204 napisał(a):
może trochę przedobrzyłem


No no - ja bym nawet powiedział że nie "może" a - o cały ocean ;)

więc jedna najważniejsza zasada - nie siejemy defetyzmu i plotek na bazie niesprawdzonych wiadomości i własnej wyobraźni bo sam się orientujesz - że później to się szerzy jak .... no właśnie ;)

więc dajmy już spokój temu nieszczęsnemu przykładowi ;)

_________________
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 mar 2014, o 18:39 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

Kod został poprawiony zgodnie z sugestią ale niestety dalej jest to samo. Policzyłem kilka razy i w czasie 30 sekund dioda zmienia swój stan 29 razy. Jeśli kod jest dobrze napisany to wina leży po stronie procka, chyba, że dalej coś jest źle ustawione. :(



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: 5 mar 2014, o 19:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 65
Pomógł: 0

A po co tam na górze kodu ISR(TIMER1_COMPA_vect);? Może to ma jakiś wpływ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 21:40 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

Ta linijka to deklaracja wektora przerwania. Odkąd uczę się C, wszelkie procedury, funkcje zawsze trzeba było zapisywać w postaci deklaracji dodatkowo nad main'em, więc podejrzewam, że ta linijka nie emituje zakłóceń.

Czy ktoś ma jeszcze jakieś rozwiązanie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 22:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

deathes napisał(a):
Ta linijka to deklaracja wektora przerwania.

Nie musisz jej deklarować, gdyż, jej deklarację dołączasz w pliku avr/interrupt.h



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 22:31 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

Zasadniczo stosuję się do zaleceń P. Mirka, który w każdym swoim poradniku deklaruje przed mainem, ale dziękuję za radę. Jednak dalej nie jest to rozwiązaniem mojego problemu :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 mar 2014, o 22:35 
Online
Moderator
Avatar użytkownika

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

deathes napisał(a):
Zasadniczo stosuję się do zaleceń P. Mirka, który w każdym swoim poradniku deklaruje przed mainem


ale to DOTYCZY (podpowiadam) tylko funkcji a nie procedur obsługi przerwań ;) ok ? ..... tych nie musimy deklarować przed mainem jak słusznie wyżej podpowiada kolega

_________________
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: 10 mar 2014, o 21:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Powinno Ci pomóc ,mnie działa w zegarku ,napisane wczoraj. Wycinam to co potrzebne. Spróbuj. Na pewno trwa 1sek.

Z tym ,że to Toogle ,więc miganie widać co 2 sek.

Używam tej diody jako debbugera by sprawdzić ,czy poprawnie zatrzymuję i startuję Timer, wszystko działa u ciebie też powinno.

A taktowanie 8MHz. (procek Atmega8, jak masz inny sprawdź nazwy rejestrów) Wzór 8MHz / 256 / 31250 -> 1Hz

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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2014, o 22:20 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

Skompilowałem cały kod, wrzuciłem na ten sam procek, to samo taktowanie wewnętrzne 8Mhz i co? Wyświetliłem na LCD ilość tooglów i w ciągu równych 5 minut dioda powinna zmienić stan 5x60=300 razy a wyświetlacz pokazuje 310. Wcześniej ten sam problem był na atmega88. Skoro oba procki są inne i w innym miejscu kupione prawdopodobieństwo, że są uszkodzone jest niskie. To co, programator źle programuje czy te wewnętrzne oscylatory są upośledzone. Poniżej przedstawiam kod ( bardzo lekko zmodyfikowany ).


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: 11 mar 2014, o 22:42 
Online
Moderator
Avatar użytkownika

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

Panie kolego - daj że ty spokój z takim katowaniem siebie i timerów .... no powiedz - spróbuj chociaż wyjaśnić na co ci to ? na co te testy ? czego mają dowieść ? ....

jak spróbujesz wyjaśnić - to prędzej uda się ciebie wyprowadzić z błędnego myślenia - tylko że teraz to nie wiadomo nawet o co chodzi ?

napisz lepiej jaki masz cel ? co chcesz osiągnąć - to będzie można podpowiedzieć ci jaką drogą można pójść aby to rozwiązać bo teraz brniesz w ślepy zaułek

_________________
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: 11 mar 2014, o 23:50 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

No generalnie chciałem rozwiązać w końcu ten problem, bo jako, że jestem dopiero na początku przygody z prockami, chciałbym w końcu ogarnąć te timery i przerwania w jakimś chociaż podstawowym stopniu. Dlatego nie wiem, czy robię coś źle, czy nie. Ale po Pana wypowiedzi wnioskuję, że temat wyczerpałem, więc można zamykać.

Pozdrawiam wszystkich



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, o 00:22 
Online
Moderator
Avatar użytkownika

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

To nie o to chodzi - timery odpalasz poprawnie - ale próbując szukać jakiejś dokładności przy pomiarze TAAAK długich czasów to po prostu nieporozumienie. Timery służą do pomiarów szczególnie bardzo krótkich czasów - tu mają zastosowanie. A nie żeby na oko odliczać przez 5 minut albo godzinę - ile razy mignie dioda i czy na wewn oscylatorze RC mignie 10 razy więcej czy mniej, a na zewn kwarcu 5 razy mniej albo więcej ... ? tak jak mówię - to do niczego nie doprowadzi.

Postaraj się np pomyśleć o zastosowaniu timera do powiedzmy pomiaru obrotów silniczka, pomiaru czasu jakichś krótkich impulsów, do nadawania / generowania przebiegów itp itd ...

z takich doświadczeń wyciągniesz o wiele więcej pożytecznych wniosków a schodząc w dół do pomiarów coraz niższych czasów w końcu też dojdziesz - do tego gdzie zaczyna się różnica pomiędzy zastosowaniem wewn. oscylatora RC w porównaniu do kwarca .... tyle że mówię tu o czasach np rzędu mikrosekund ... czy nanosekund


Autor postu otrzymał pochwałę

_________________
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: 12 mar 2014, o 09:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

A czy zamiast OCR1A=15625; nie powinno być OCR1A=15624; - w końcu licznik liczy od zera te 15625 kawałeczków...

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, o 10:41 
Online
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
A czy zamiast OCR1A=15625; nie powinno być OCR1A=15624; - w końcu licznik liczy od zera te 15625 kawałeczków...


pewnie że powinno być

_________________
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: 12 mar 2014, o 17:51 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

Dziękuję za cenne uwagi. Początki nie są łatwe, eh :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, o 21:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Ja z uporem maniaka, będę Cię nakłaniał do sprawdzeniu na kwarcu. Taki rezonator kosztuje grosze a co za problem sprawdzić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, o 21:45 
Offline
Nowy

Dołączył(a): 09 sty 2014
Posty: 23
Pomógł: 0

I właśnie, że podłączyłem rezonator kwarcowy 32,768khz pod TOSC1, TOSC2. Testuję już z 2h i nie ma kompletnie żadnej odchyłki w czasie. :) W nocie od atmegi napisane jest, że nie potrzebne są dodatkowe pojemności, więc i ich nie stosowałem. Poniżej przedstawiam specyfikację i kod, może komuś się kiedyś też przyda :)

Atmega88PA-PU, taktowanie wewnętrzym oscylatorem 8Mhz, dodatkowo na nóżkach TOSC1, TOSC2 rezonator kwarcowy 32,768khz. Zasilanie filtrowane 100nF, 2,2uF. Nóżka reset rezystorem pod VCC, micro-switch pod gnd. LCD 2x16, tryb 4-bit.

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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 24 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 4 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