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



Teraz jest 19 mar 2026, o 07:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 20 gru 2017, o 19:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 329
Lokalizacja: Rybnik
Pomógł: 23

Witam wszystkich forumowiczów.
Mam problem ze sprzętowymi flagami w ATmega8. Dopiero się uczę programowania w C.
Otóż z noty katalogowej wywnioskowałem, że np. dla TMER0 w ATMEGA8 jest rejestr dla flagi sprzętowej o nazwie TIFR.
W rejestrze tym jest bit TOV0 , w którym flaga sprzętowa jest ustawiona na 1 w momencie wystąpienia przerwania od TIMER0 i jest kasowana po wykonaniu tego przerwania.
Nie wiem czy to dobrze zrozumiałem , ponieważ krucho u mnie z angielskim.
Jeżeli jednak dobrze to zrozumiałem, to proszę o wyjaśnienie jak korzystać z tych flag.
Wujek google nie pomógł a w BB też nie znalazłem konkretnej odpowiedzi ( chyba, że nie doczytałem albo nie zrozumiałem wszystkiego) .
Prosiłbym, żeby mi ktoś wyjaśnił sposób korzystania z tych flag na jakimś prostym przykładzie abym mógł to zrozumieć.
Będę bardzo wdzięczny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2017, o 20:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2017
Posty: 140
Pomógł: 6

Cytuj:
w którym flaga sprzętowa jest ustawiona na 1 w momencie wystąpienia przerwania od TIMER0 i jest kasowana po wykonaniu tego przerwania


Jeżeli o to Ci chodzi, to po ustawieniu timer'a żeby wywoływał przerwanie co jakiś czas ( np. tak jak w przykładzie multiplexowania w BB), nie musisz kompletnie się przejmować flagami, procek robi za Ciebie całą robotę,



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2017, o 21:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

cześć
Jeżeli chodzi o Timery to kolega DarkMajster ma rację z tym że musisz napisać obsługę przerwania od Timera bo inaczej to program się wysypie.
Nie zawsze jednak trzeba pisać obsługę przerwania np:
masz coś podłączone pod INT0 - powiedzmy, że jest to jakiś scalak RTC który co sekundę generuje przerwanie
konfigurujesz wejście na które przychodzi przerwanie bo to musisz zrobić
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i zamiast pisać obsługę przerwania korzystasz z flagi sprzętowej którą ustawia procesor
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no i tak można z innymi flagami


Autor postu otrzymał pochwałę

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 gru 2017, o 22:35 
Offline
Moderator
Avatar użytkownika

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

mczarny napisał(a):
GIFR |= (1<<INTF0); // uwaga kasujemy przez wpisanie do rejestru "1"


Niestety tu jest błąd (tak samo w moich wcześniejszych wielu materiałach) ... trzeba tak kasować flagę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to jest bardzo ważna różnica

_________________
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: 21 gru 2017, o 06:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 329
Lokalizacja: Rybnik
Pomógł: 23

Czyli rozumiem to tak:
Jeżeli korzystam tylko z przerwań od timerów np: TIMER1 , to flaga sprzętowa nie jest mi do niczego potrzebna
a jeżeli korzystam z przerwań zewnętrznych, to zamiast pisania procedury obsługi przerwania,
mogę użyć flagi sprzętowej w pętli głównej.
Bardzo dziękuję o wyjaśnienie i jeśli to dobrze zrozumiałem, to uważam że temat zamknięty a jeśli wg. was źle to zrozumiałem,
to proszę o cierpliwość i jeszcze jakieś sugestie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2017, o 07:43 
Offline
Moderator
Avatar użytkownika

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

mario2015 napisał(a):
Jeżeli korzystam tylko z przerwań od timerów np: TIMER1 , to flaga sprzętowa nie jest mi do niczego potrzebna


A dlaczego nie? to jest dokładnie taki sam mechanizm jak:

mario2015 napisał(a):
a jeżeli korzystam z przerwań zewnętrznych, to zamiast pisania procedury obsługi przerwania,
mogę użyć flagi sprzętowej w pętli głównej.


czyli w przypadku Timerów obowiązuje to samo - obojętnie jakie przerwania zresztą zawsze można wykorzystać tylko flagi - bez procedur przerwań jeśli zajdzie taka potrzeba


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: 21 gru 2017, o 07:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 329
Lokalizacja: Rybnik
Pomógł: 23

Dzięki Mirku .
Teraz już chyba jestem na właściwym tropie, tzn. rozumiem to tak:
Jeśli do obsługi czegoś tam wystarczy mi flaga sprzętowa, to nie potrzebuję
pisać procedury przerwania np: ISR (TiMER2_COMP_vect) ...
Czy o to chodzi ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2017, o 11:08 
Offline
Użytkownik
Avatar użytkownika

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

Mikroprocesor przy spełnieniu warunku przerwania ustawia z automatu flagę sprzętową. Możesz zawsze z niej skorzystać, ale możesz także zaprząść do roboty dalej mikroprocesor i kazać mu przy ustawieniu flagi wywołać twój kod procedury obsługi przerwania. Jak w życiu - jedni wolą co chwila patrzeć na zegarek by wyjść o czasie a inni wolą nastawić budzik i dostać sygnał jak przyjdzie pora by nie musieć się co chwila patrzeć na zegar :).

Gdy procesor wywołuje procedurę obsługi przerwania to automatycznie kasuje flagi a gdy sam je sprawdzasz, to musisz o ich kasowanie sam dbać.

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2017, o 11:21 
Offline
Moderator
Avatar użytkownika

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

mario2015 napisał(a):
Czy o to chodzi ?

Dokładnie tak ... i tak jak wyżej kolega rskup napisał - trzeba zwracać uwagę na to, że jak jest procedura przerwania to flaga jest automatycznie kasowana a jeśli nie - to trzeba ręcznie ją kasować w razie potrzeby


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: 21 gru 2017, o 15:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 329
Lokalizacja: Rybnik
Pomógł: 23

Dzięki wszystkim za odpowiedzi. O to mi chodziło.
Teraz już zrozumiałem o co chodzi z tymi flagami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 gru 2017, o 18:02 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

Rskup - bardzo trafne porównanie!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2017, o 23:53 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

To jeszcze tylko dopytam.
Czy jest różnica (w szybkości kodu, wielkości), jeśli tak to jaka pisząc obsługę przerwania lub samemu sprawdzając flagę?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2017, o 00:17 
Offline
Użytkownik
Avatar użytkownika

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

Przerwanie jak nazwa sama mówi jest to przerwanie wykonywania innych czynności i natychmiastowa reakcja. Więc procedura w przerwaniu jest wywoływana natychmiast. A przy sprawdzaniu flagi reagujesz na zdarzenie zależnie jak masz to oprogramowane w kodzie. Czyli musisz cyklicznie sprawdzać flagę. Nie możesz też zrobić żadnych za długich działań w pętli głównej, bo przecież musisz sprawdzać co chwilę flagę.
Jak widzisz przerwania upraszczają programowanie. I są bardzo proste w użyciu, pamiętając tylko by je odpowiednio oprogramować.
Dodatkowo przy rzadkich zdarzeniach możesz wchodzić do trybów obniżonego poboru energii a przerwanie Cię z nich budzi. Tego nie zrobisz na flagach.

--
Pozdrawiam,
Robert



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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