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



Teraz jest 30 wrz 2024, o 00:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 13 lis 2013, o 09:58 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

Witam.

Mam problem z obudzeniem uC Atmega8L.

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


Gdy na nóżce PD2(INT0) pojawia się stan niski to występuje przerwanie.

Jednak gdy uśpię uC.

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


To przerwanie nie wybudza uC. Proszę o pomoc w znalezieniu błędu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2013, o 10:34 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
To przerwanie nie wybudza uC. Proszę o pomoc w znalezieniu błędu


To trzeba jeszcze panie kochany zwrócić uwagę w nocie - że jeśli chcemy wybudzać procka sygnałem INTx to przed wprowadzeniem go w stan uśpienia trzeba ustawić wyzwalanie przerwania NISKIM POZIOMEM logicznym a nie zboczem bo się nie uda. Przecież to proces mocno asynchroniczny i nie da rady załatwić tego zboczem. A po wybudzeniu jeśli ci potrzeba to można przestawić int0 na zbocze znowu

_________________
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: 13 lis 2013, o 11:13 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

mirekk36 napisał(a):
trzeba ustawić wyzwalanie przerwania NISKIM POZIOMEM logicznym a nie zboczem bo się nie uda


MCUCR &= ~((1 << ISC01) | (1 << ISC00));

1 << ISC01 = 0b00000010
1 << ISC00 = 0b00000001

1 << ISC01 | 1 << ISC00 = 0b00000011

negacja 0b00000011 = 0b11111100

MCUCR = MCUCR & 0b11111100 = xxxxxx00

czyli ISC00 = 0 i ISC01 = 0

czyli wg tabeli z noty - The low level of INT0 generates an interrupt request

Albo zrobiłem błąd w wyliczeniach albo nie znam angielskiego ale wydaje mi się, że ustawiłem yzwalanie przerwania niskim poziomem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2013, o 11:26 
Offline
Moderator
Avatar użytkownika

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

sorki nie spojrzałem dokładnie na kod ... ale też dlatego że jak bity mają mieć wartość 0 to ich nie zeruję bo po restarcie jak widzisz i tak są = 0 .... Nie mniej - oczywiście to że extra dodatkowo jest ustawiasz na zero nie jest powodem że to nie działa

skoro masz dobrze ustawione to znaczy że gdzieś dalej w kodzie masz jakiś babol - tyle że nie pokazałeś całości jak to testujesz to ciężko coś powiedzieć

_________________
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: 13 lis 2013, o 11:46 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

mirekk36 napisał(a):
tyle że nie pokazałeś całości jak to testujesz to ciężko coś powiedzieć


Oto całość :) Może krótko o tym co robi program. Program ustawia zegar w RTC i alarm. Gdy alarm wywoła przerwanie to program wypisuje datę godzinę i temperatury na terminalu. Wiem, że trochę za dużo dałem w obsłudze przerwania ale bez usypiania wszystko działa a po uśpieniu nie działa przerwanie.

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: 13 lis 2013, o 12:38 
Offline
Moderator
Avatar użytkownika

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

a po czym ty poznajesz że ci się wybudza czy nie ?

Panowie dlaczego nie staracie się tworzyć prostej wersji kodu do testu tego co wam nie wychodzi (sorki że tak w liczbie mnogiej piszę ale to nie tylko twój przypadek ... a ja wciąż powtarzam o tym w poradnikach) .... tylko testujecie to na kobyle że tak powiem w której może być jeszcze 100 innych baboli

Pomyśl teraz - w obsłudze przerwania INT0 - ja bym wstawił np TYLKO zapalenie jakiejś diody LED żeby sprawdzić czy dojdzie do obsługi przerwania po wybudzeniu .... po co cały ten bagaż kodu ?

Sprawdzaj małymi kroczkami a szybko dojdziesz co jest nie tak - ok ? bo te hektolitry kodu tylko zaciemniają obraz całości i komuś kto to ma czytać ale i tobie w znalezieniu przyczyny

_________________
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: 13 lis 2013, o 12:44 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

Ok po południu sprawdzę wersję z diodą. Jak nie ruszy to napiszę a jak ruszy to też napiszę co było nie tak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2013, o 12:58 
Offline
Moderator
Avatar użytkownika

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

A jeśli ruszy z diodą to potem już wiesz - jak za jej pomocą - dodawać kolejne rzeczy i testować aż złapiesz miejsce które powoduje błąd ...

czekam więc na info co i jak

_________________
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: 13 lis 2013, o 17:36 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

Problem wydaje się raczej sprzętowy. Podłączyłem diodę i wywoływałem przerwanie z RTC co 1s. W przerwaniu zmieniałem stan diody na przeciwny. Czyli dioda powinna się świecić 1s i być zgaszona 1s i tak na zmianę. Tymczasem dioda raz świeci długo raz krótko, raz mocniej raz słabiej czyli przerwanie jest wywoływane nieregularnie. Gdy ustawię zamiast "The low level of INT1 generates an interrupt request" "The falling edge of INT1 generates an interrupt request." to wszystko działa poprawnie ale wtedy uśpienie uC nic nie da więc zostaje tylko opcja low level. Gdy ustawię dłuższy czas niż sekunda i low level np. przerwanie co 5 sekund to dioda zapala się na 5 sekund i gaśnie na 5 sekund i tak na zmianę. Jednak gdy włączę uśpienie to procesor się nie wybudza. Gdy zamiast RTC ręcznie zwieram pin INT0 do masy to przerwanie wywołuje się i uC się budzi. Drugim problemem jest to, że nie wiem jak go ponownie uśpić po wykonaniu przerwania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lis 2013, o 17:41 
Offline
Moderator
Avatar użytkownika

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

t__d napisał(a):
Gdy zamiast RTC ręcznie zwieram pin INT0 do masy to przerwanie wywołuje się i uC się budzi.


Panie .... od tego to trzeba było zacząć a nie od jakiegoś wywoływania przerwania z RTC ... to że wywołujesz je z RTC i masz wątpliwości że to dziwnie działa świadczy tylko o tym , że nie do końca poczytałeś i wiesz jak działa przerwanie wywoływane poziomem niskim. A jak nie wiesz to NIGDY go nie używaj ....

Takie przerwanie jest wywoływane wciąż ..... więc nie ma co się dziwić że od RTC miałeś jakąś kiszkę a nie regularne miganie diodą LED - tak miało być i to jest prawidłowe.

Jak przerwanie wystąpi to MUSISZ od razu je wyłączyć i jeszcze skasować flagę na wszelki wypadek

a usypianie w pętli głównej którą pozostawiłeś pustą

..... ale co tu dużo pisać - masz ładnie pokazany przykład w Bluebooku w rozdziale o pilocie RC5 - dlaczego tam nie zajrzysz ?

_________________
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: 13 lis 2013, o 18:18 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

mirekk36 napisał(a):
masz ładnie pokazany przykład w Bluebooku w rozdziale o pilocie RC5 - dlaczego tam nie zajrzysz ?


Jakoś nie doczytałem tego rozdziału ale zaraz to nadrobię :) Już myślałem, że będę musiał wstać z kanapy i iść do pułki po Bluebooka ale na szczęście zostawiłem go obok na fotelu. Dzięki :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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO