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



Teraz jest 25 kwi 2024, o 12:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 14 lut 2012, o 20:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

Witam mam głupi kłopot. Zbuntował mi się Timer0 i nie dokonuje mi przerwań od przepełnienia OVF czyż bym o czymś zapomniał ?

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


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 nie gasi diodki xP dodam że poza funkcją przerwania gasi się normalnie czyli wychodzi na to że nie wywołuje danego przerwania.
Preskaler 8



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2012, o 20:53 
Offline
Moderator
Avatar użytkownika

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

Taaaa - a globalne zezwolenie na przerwania sei(); to mrówki zjadły ? ;)

_________________
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: 14 lut 2012, o 21:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

sei() jest tylko w innej części kodu i zapomniałem wspomnieć o tym xP
Dodam że korzystam z timera1 jako pwm i timera2 który wykorzystałem do liczników programowych. No i działają normalnie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2012, o 21:10 
Offline
Moderator
Avatar użytkownika

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

No to musisz pokazać większą część kodu - bo z tego nie widać gdzie zrobiłeś babola.

Przy okazji - timery się nie buntują - buntują się programiści ;)

_________________
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: 14 lut 2012, o 21:36 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Programiści też się nie buntują.
Tylko popełniają błędy ;)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2012, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

Plik w którym dokonuje inicjalizacji Timerów

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



main.c
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: 14 lut 2012, o 23:08 
Offline
Moderator
Avatar użytkownika

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

No inicjalizacja timer0 wygląda dobrze - a sprawdzał kolega tak prozaiczne przyczyny jak:

1. uszkodzona dioda LED na PC1 ?
2. złe połączenie ?

Może spróbować na innym całkiem pinie zapalić inną diodę LED - daj znać OK ?

a swoją drogą to sei() daje się tuż przed startem pętli głównej w main() a nie gdzieś i to w środku inicjalizacji timerów i różnych przerwań (ale to nie ma oczywiście wpływu na opisywany problem - taka tylko luźna uwaga)

_________________
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: 14 lut 2012, o 23:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

Dziękuje za luźną uwagę. Wezmę sobie ją do serca :)

Dioda jest dobra. A wiem to stąd iż wymieniam czasem ją na zwykła święcącą diode np. zielona. Patrze sobie jak się świeci ^ ^' czy miga i jak miga itd itp :)
Spróbowałem na innym porcie i to samo. Dioda nie gaśnie. Aczkolwiek jeśli spróbuje to zrobić np w funkcji main() to działa bez problemu

Połączenie powinno być dobre ponieważ to samo tylko na timerze1 w trybie CTC działa bez problemu.

Nie wiem czy wspomniałem ale w tym przerwaniu chce nadawać sygnał nośny do odbiornika IR. żeby nie rozpędzać do takich prędkości Timera1 jak to wcześniej robiłem bo potem nie wygodnie mi się czasy wpisywało. Duże sumy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2012, o 23:59 
Offline
Moderator
Avatar użytkownika

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

Ok, posłuchaj

- inicjalizację Timera0 masz na 100% dobrą
- masz włączone globalne przerwania sei();
- masz poprawne makro i wektor przerwania

więc to musi działać ;) pozostaje prosty sposób do sprawdzenia i aż się dziwię że go nie sprawdzasz

zakomentuj wszystko inne w programie poza inicjalizacją timera, pinu diody itp - i obserwuj co się dzieje - nie ma że boli to musi działać - a jak zadziała to włączaj sekcjami pozostałe rzeczy po kawałku i dojdziesz od którego miejsca przestaje działać - i już złapiesz byka za rogi ;)

_________________
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: 15 lut 2012, o 13:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

Dalej to samo :/ za komentowałem wszystko i zostawiłem tylko kod którym ustawiam pin na wyjście i podciągam go do masy czym zapalam diode. inicjalizacje licznika na przerwanie od przepełnienia OVF przeniosłem do funkcji main() a funkcje sei() umieściłem przed pętlą główną programu. Obsługę samego przerwania również przeniosłem do do pliku main.c i tylko on się teraz kompiluje.

Mam wrażenie że to może coś z moim prockiem... kupiłem go od kumpla i parę lat ma. z połączeniami jest wszystko ok ponieważ w pętli głównej normalnie gaszę diode jeśli tam umieszczę odpowiedni kod. Po prostu nie wywołuje się przerwanie. Nie mam innych pomysłów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 15:35 
Offline
Moderator
Avatar użytkownika

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

Mnie zawsze interesują takie przypadki ;) i to bardzo - i gotów jestem się założyć, że procek nie mógł się tak uszkodzić.... ale....

ale zrób jeszcze tak:

1. utwórz w Eclipse całkiem nowy projekt
2. utwórz w projekcie od nowa plik main.c
3. w tym pliku w funkcji main zainicjalizuj tylko pin do diody i Timer0
4. odpal przerwania
5. w przerwaniu OVF gaś diodę LED

skompiluj, wgraj i sprawdź .... i podeślij albo tu pokaż cały taki krótki i zwięzły testowy kod .... zobaczymy co?

_________________
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: 15 lut 2012, o 17:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

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


Dzieje się dokładnie to samo :( próbowałem nawet za komentować 'TCNT0' i też to samo.
Jakieś wnioski ? Pomysły ?:D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2012, o 18:13 
Offline
Moderator
Avatar użytkownika

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

Tak dla dla zasady to powinno być tak:

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


ale to oczywiście nie ma związku z problemem tylko dla zasady jak mówię.

Wracając jednak do problemu - to jeśli te połączenia są dobre i dioda dobra w co wierzę bo przecież już testowałeś i ciężko byłoby dwa razy taką samą pomyłkę w tym zrobić .... to być może to pierwszy procek w taki sposób uszkodzony .....

aczkolwiek chciałbym mieć możliwość pomacania go aż własnymi łapkami ;)

_________________
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: 23 lut 2012, o 17:53 
Offline
Moderator
Avatar użytkownika

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

No JUŻ mam ;) ...... oczywiście że Timer0 działa w twoim procku

a ja przepraszam, że naraziłem cię na to wysyłanie do mnie - bo przecież w kodzie jest

M E G A E W I D E N T N Y B Ł Ą D !!!!!!!!!!!!!!!!!!!!!!!!!

i powinienem był go wcześniej zauważyć !!! tzn nawet pisałem ci że ten kod działa u mnie w procku ale zrobiłem .... no kichę ponieważ - ja nie zrobiłem kopiuj/wklej twojego kodu - tylko szybciutko go "z ręki" przeklepałem u siebie w ECLIPSE - skompilowałem i wgrałem - a potem potwierdziłem ci że identyczny kod u mnie działa bo działał !!!!

tyle że gdy ja pisałem kod "z ręki" to nie popełniłem tego błędu co ty, bo ty napisałeś taką linię programu panie kochany ;) .... normalnie po łapach musisz dostać ;) .... no ale ja też bo źle sprawdziłem ;)

Cytuj:
TIMSK |= (TOIE0);


a przecież chyba sam już wiesz teraz od razu jak powinno być ????

Cytuj:
TIMSK |= ( 1 << TOIE0 );


niestety takie "czeskie" błędy najbardziej kosztują jak widzisz - i mam nadzieję, że teraz już nigdy go nie popełnisz ;) ..... a jak widzisz - STRASZNIE trudno nawet w tak prostym kodzie tego BUG'a zobaczyć a co dopiero mówić w bardziej rozbudowanym kodzie ;)

jak procek przyszedł to znowu - wpisałem na szybko kod z ręki no i działa .... no to mówię co za czort!?! ... wtedy dopiero pokusiłem się na KOPIUJ/WKLEJ twojego kodu ..... no i wyszło szydło z worka - a przecież błąd masz już w pierwszym poście na samej górze - i ja niestety później odpowiadając na forum przekopiowywałem tylko ten kod - nie zwróciwszy uwagi na BABOLO-BUG'a

OK - koperty już nie mam - a na kartce adresu nie zapisałeś - więc napisz mi na maila swój adres to odeślę ci procka ;)

TAK więc mam nadzieję, że już nigdy nie wysnujesz wniosku, że jakiś moduł ci w procku nie działa OK? Jak nie działa to trzeba do upadłego szukać błędu w tym co się robi i pisze a nie doszukiwać się cudu w postaci uszkodzenia sprzętu w jego bebechach ;) Mówiłem, że to nie możliwe no i tak wyszło.

_________________
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: 23 lut 2012, o 18:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

O mój losie O.O A przecież wiem jak powinno się to pisać więc czemu popełniłem taki błąd ? Wstyd ^^' to wydawało się aż nie możliwe a jednak xP patrzyłem na kod tyle razy i nie zauważyłem :D Zastanawia mnie czemu popełniłem taki błąd skoro wszystkie inne timery i przerwania obsłużyłem prawidłowo xP

No cóż dziękuje za pomoc i przepraszam za kłopot ^ ^'



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 18:54 
Offline
Nowy

Dołączył(a): 30 mar 2013
Posty: 19
Lokalizacja: Częstochowa
Pomógł: 0

Panie Mirku u mnie ta sama opcja...pobrałem ten kod który Pan podał, ale procek nie zapala diody. Oczywiście wklepałem to z poprawką...Normalnie jak sprawdzam w pętli czy doliczył do jakiejś liczby to zapala diodę. W momencie gdy tylko zamienię na funkcję przerwania, tak nic nie reaguje...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 20:24 
Offline
Moderator
Avatar użytkownika

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

ravers_19 napisał(a):
Panie Mirku u mnie ta sama opcja...pobrałem ten kod który Pan podał, ale procek nie zapala diody. Oczywiście wklepałem to z poprawką...Normalnie jak sprawdzam w pętli czy doliczył do jakiejś liczby to zapala diodę. W momencie gdy tylko zamienię na funkcję przerwania, tak nic nie reaguje...


Przykro mi ale kompletnie nie wiem o czym mówisz :( Załóż nowy wątek i po kolei krok po kroku opisz z czym masz kłopot - wtedy pomogę.

_________________
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  
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ł: Brak zidentyfikowanych użytkowników i 8 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