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



Teraz jest 22 sty 2025, o 21:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 27 maja 2013, o 13:33 
Offline
Nowy

Dołączył(a): 03 paź 2012
Posty: 14
Pomógł: 0

Witam,
używam timera 16bit CTC i gdy następuje przerwanie to wykonywany jest określony podprogram i czy w tym momencie timer jest zatrzymany? I czy zlicza dopiero ponownie po wykonaniu podprogramu? Czy w C idzie zrobić tak żeby timer cały czas pracował i generował cyklicznie te przerwania?

pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2013, o 13:44 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Licznik idzie cały czas na okrętkę zgodnie z wybranym trybem bez względu na to jaka i czy w ogóle jest procedura obsługująca przerwanie. Trzeba tylko uważać, aby procedura obsługi przerwania wykonała się szybciej niż nastąpi kolejne zgłoszenie przerwania, bo zaraz po jej zakończeniu zostanie ponownie wykonana nie dając szans na zrobienie czegokolwiek innego.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2013, o 13:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

topic2875.html#p34423
też miałem z tym problem ;)

Czyli: w procedurze przerwania jak masz jakiś "podprogram" przerwanie jest wyłączone do czasu jego zakończenia.

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2013, o 14:19 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
używam timera 16bit CTC i gdy następuje przerwanie to wykonywany jest określony podprogram i czy w tym momencie timer jest zatrzymany? I czy zlicza dopiero ponownie po wykonaniu podprogramu?


Ja się zawsze zastanawiam skąd biorą się pomysły o tym, że timer miałby się zatrzymać ... a niby z jakiej to okazji ? Timer sprzętowy to Timer ... i albo go wystartujesz (ty programista) albo go sam zatrzymasz (ty programista) .... on sam z siebie się nigdy nie zatrzyma ....

W trybie CTC zlicza do zadanej przez ciebie wartości, po czym się zeruje i znowu do niej zlicza ....

Cytuj:
... Czy w C idzie zrobić tak żeby timer cały czas pracował i generował cyklicznie te przerwania?


Więc w C nic się nie robi żeby cały czas pracował i generował przerwania CTC ;) po jego wystartowaniu to się dzieje wciąż automatycznie

_________________
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: 27 maja 2013, o 14:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 gru 2012
Posty: 146
Lokalizacja: Racibórz
Zbananowany użytkownik

Pomógł: 0

Też miałem z tym problem w ATMega 8 o czym już pisałem. Dałem sobie z tym spokój i przeszedłem na ATmega 16. Tutaj timer i przerwania działają mi prawidłowo. Jaka przyczyna tego zjawiska to niestety nie wiem. I chyba nikt nie wie bo brak konkretnej odpowiedzi na post.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2013, o 15:14 
Offline
Moderator
Avatar użytkownika

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

stachn napisał(a):
Też miałem z tym problem w ATMega 8 o czym już pisałem. Dałem sobie z tym spokój i przeszedłem na ATmega 16.


Czyli nie rozwiązałeś problemu tylko go obszedłeś dookoła .... niestety

stachn napisał(a):
Tutaj timer i przerwania działają mi prawidłowo


W Atmega8 także wszystkie przerwania działają dobrze, zastanów się - bo pisząc to wygląda jakbyś odkrył tajemnicę, o której przez TYLE lat ile istnieje biedna m8 na rynku - nikt nie wiedział :(

stachn napisał(a):
Jaka przyczyna tego zjawiska to niestety nie wiem. I chyba nikt nie wie bo brak konkretnej odpowiedzi na post.


Pewnie, że nie ma odpowiedzi jednoznacznej bo ty tam sobie coś powymyślałeś że ci nie działa - i szukałeś raczej potwierdzenia, że komuś innemu też nie działa :( ..... zamiast zbadać problem swojego kodu źródłowego a w nim masz kłopot

napisałeś tam tak:

stachn napisał(a):
Natomiast ATmega 8 reaguje na narastające zbocza prawidłowo tzn wykrywa je ale nie uruchamia timera0 w przerwaniu.


nie ma takich zjawisk .... ewidentnie coś źle robisz programowo i to wszystko na ten temat. A taki sposób "obchodzenia" problemu zamiast jego rozwiązywania niestety jeszcze nie raz przyprawi ci tzw siwych włosów na głowie

Piszę to ponieważ nie chcę żeby w tym wątku ktoś przeczytał poradę - że jeśli mu ATmega8 nie działa to lepiej wziąć inny procek ? bo co to za porada ? no przykro mi ale żadna - bardziej wprowadza w błąd innych ...

_________________
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: 27 maja 2013, o 20:50 
Offline
Nowy

Dołączył(a): 03 paź 2012
Posty: 14
Pomógł: 0

No właśnie trochę to dziwne, wykorzystuję timer jako czasomierz i gdy stosuję taką metodę że mam przerwanie co 1ms zliczam do 1000 i to traktuję jako 1s to zegar mi się spóźnia a gdy zrobię to przerwanie co 1 sekundę to działa prawidłowo. Wychodzi mi na to że jakby timer się zatrzymywał wykonał podprogram i startował dalej i nigdzie nie mogę się doczytać jak to dokładnie jest. Wcześniej jak pracowałem na ST7 to było coś takiego że mógł się zatrzymywać lub nie.
Zależy mi jednak na przerwaniu co 1ms i jak to ugryźć :-/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2013, o 20:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

W samym przerwaniu zwiększ tylko licznik ms, ewentualnie jak jeszcze do czegoś Ci jest to potrzebne to ustaw flagę.

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2013, o 21:06 
Offline
Moderator
Avatar użytkownika

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

CeBe napisał(a):
No właśnie trochę to dziwne, wykorzystuję timer jako czasomierz i gdy stosuję taką metodę że mam przerwanie co 1ms zliczam do 1000 i to traktuję jako 1s to zegar mi się spóźnia


Do robienia zegarów są układy RTC a nie takie zabawy niestety. Poza tym kto wie co ty w kodzie tego przerwania robisz. 1ms to niewiele dla takiego AVR'ka w porównaniu do popędzanego np 2x większym taktowaniem ARM'a/STM'a

_________________
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: 27 maja 2013, o 21:14 
Offline
Nowy

Dołączył(a): 03 paź 2012
Posty: 14
Pomógł: 0

No właśnie wiem że są RTC, buduję zegar na DCF i w przerwaniu zliczam także czas trwania sygnału DCF i jak zegar będzie mi się spóźniał kilka sekund na dobę to nie będzie źle jak złapie sygnał DCF to się zsynchronizuje. A teraz przy takiej metodzie to dużo się spóźnia około 15 sekund na godzinę. I moim problemem jest właśnie prawdopodobnie zatrzymywanie się timera. Przerwanie co 1 sekundę działa ok.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2013, o 22:23 
Offline
Moderator
Avatar użytkownika

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

jeszcze raz ci mówię odpuść sobie robienie w ten sposób zegarka bo to totalna pomyłka jakaś :(

mówiąc układ RTC mam na myśli np PCF8583

a jeszcze raz powtórzę zainteresuj się ile zajmuje ci procedura obsługi przerwania bo to w niej się nie wyrabiasz a jak masz jeszcze inne przerwania odpalone to zapomnij już w ogóle o robieniu zegarka tą metodą

_________________
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: 29 maja 2013, o 11:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 mar 2013
Posty: 39
Pomógł: 0

Czytając ten wątek i inne pochodne odnośnie programowania zegarków wszelakiej maści. Nasunęło mi się pytanie:

Jeśli chciał bym zaprogramować "czasomierz", który miał by odmierzać czas od np. 5 minut do zera to czy warto oprzeć się wtedy na wewnętrznym oscylatorze procesora? Jeśli taki zegarek ma służyć do odmierzania czasu np. tury w grze planszowej, to nie musi być super dokładny.

Dodatkowo zastanawia mnie:
Przy użyciu jednego systemu przerwania do multipleksowania wyświetlaczy siedmiosegmentowych, warto jest "zaprzęgnąć" do pracy drugi w celu taktowania zmiany czasu? Czy po prostu oprzeć się na delayach w programie głównym? (dla 5 minut chyba nie będzie tragedii).

Dodam, że bluebooka już czytałem ale na razie tylko raz, więc mogę jeszcze nie do końca wszystko rozumieć i coś przekręcać.

Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2013, o 11:40 
Offline
Moderator
Avatar użytkownika

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

oczywiście że do takiego celu można wykorzystać wewn. oscylator - toż w tej grze czy minie 5 min i 10 s to chyba nikt głowy ci nie urwie i nie będzie mierzył z taką dokładnością tego czasu\

oczywiście że jako podstawę do liczenia tego czasu można spokojnie wykorzystać przerwanie od multipleksowania

ale dalsze dywagacje o delayach - to już w tym przypadku zgroza ;) .... po co delaye, skoro masz ten czas w przerwaniu odliczać ?

_________________
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: 29 maja 2013, o 11:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 mar 2013
Posty: 39
Pomógł: 0

mirekk36 napisał(a):
oczywiście że jako podstawę do liczenia tego czasu można spokojnie wykorzystać przerwanie od multipleksowania

ale dalsze dywagacje o delayach - to już w tym przypadku zgroza ;) .... po co delaye, skoro masz ten czas w przerwaniu odliczać ?


Hmmmm... chciał bym to dobrze zrozumieć. Czyli musiał bym to zrealizować np. w postaci: ustawić taktowanie w przerwaniu na np. 50hz po czym musiał napisać podprogram licznika, który po policzeniu do 50 zmieniał by czas (ustawiał kolejną wartość dla sekundy) po czym uległ by wyzerowaniu i zliczał dalej do 50?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2013, o 12:14 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@Markus
W rozdziale 8.4 jest dokładnie to o co pytasz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2013, o 12:17 
Offline
Moderator
Avatar użytkownika

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

#ciamciak# napisał(a):
@Markus
W rozdziale 8.4 jest dokładnie to o co pytasz.


No dokładnie w książce i na DVD są na to przykłady - najprostsze z możliwych - bez jakichś optymalizacji i udziwnień - po to tylko aby zrozumieć o co chodzi i załapać ideę .... bo to jest najważniejsze - jak do tego podchodzić. A pisanie kodu to sprawa drugorzędna ....

dlatego proszę książkę przeczytać jeszcze raz tzn chociaż te wszystkie rozdziały z ćwiczeniami praktycznymi a nie na wyrywki, to od razu sporo rozwiązań się w głowie pojawi ;)

a jak coś będzie niezrozumiałe - to BACH i pytanie na forum i pomagamy zrozumieć

_________________
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: 29 maja 2013, o 12:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 mar 2013
Posty: 39
Pomógł: 0

Dzięki wielkie, zatem wracam do czytania :D



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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