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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 lip 2025, o 18:15


    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 10 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