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 w 2025? 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 30 kwi 2025, o 12:41


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
    PostNapisane: 8 kwi 2020, o 10:56 
    Offline
    Nowy

    Dołączył(a): 08 kwi 2020
    Posty: 8
    Pomógł: 0

    Cześć,
    Chcę za pomocą przerwań spowodować miganie jednej diody LED i nie mogę tego zrobić.
    Nie wiem co robię źle. Proszę o pomoc.
    Dioda jest podłączona Anodą do uC na PC0 i katodą do masy.
    uC to Atmega88PA z taktowaniem 1 MHz.

    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: 8 kwi 2020, o 11:10 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    No w przerwaniu gasisz diodę, a gdzie ją zapalasz?
    użyj operatora ^.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 kwi 2020, o 11:13 
    Offline
    Nowy

    Dołączył(a): 08 kwi 2020
    Posty: 8
    Pomógł: 0

    auers napisał(a):
    No w przerwaniu gasisz diodę, a gdzie ją zapalasz?
    użyj operatora ^.


    W funkcji głównej main jest: PORTC |= LED1; , czyli dioda powinna być cały czas zapalona i gaszona gdy wystąpi przerwanie.
    Układ zachowuje się tak, że dioda faktycznie się świeci, tak jakby przerwanie wgl. nie występowało.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 kwi 2020, o 12:00 
    Offline
    Moderator
    Avatar użytkownika

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

    Ten kod jest w 100% poprawny i powiem więcej działa - zatem coś musiałeś mocno poplątać np w połączeniach albo nie wiem co
    Oczywiście lepiej jest zawsze dawać sobie XOR jak pisał wyżej kolega auers - bo to łatwiej zawsze okiem wyłapać ale u ciebie dioda powinna normalnie zgasnąć i już. Więc w kodzie nie szukaj 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: 8 kwi 2020, o 12:30 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    W tej chwili nie mam jak tego sprawdzić, ale wg mnie nie ma prawa działać.
    Pętla while jest pusta.
    W przerwaniu jest wyjście ustawione w stan niski.
    Ale w jaki sposób ma przejść w stan wysoki?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 kwi 2020, o 12:50 
    Offline
    Nowy

    Dołączył(a): 08 kwi 2020
    Posty: 8
    Pomógł: 0

    auers napisał(a):
    W tej chwili nie mam jak tego sprawdzić, ale wg mnie nie ma prawa działać.
    Pętla while jest pusta.
    W przerwaniu jest wyjście ustawione w stan niski.
    Ale w jaki sposób ma przejść w stan wysoki?


    Tak jak mówiłem, w funkcji main wpisałem PORTC |= LED1; , a że LED1 to (1<<PC0) to na pinie PC0 jest ustawiony cały czas stan wysoki.

    mirekk36 napisał(a):
    Ten kod jest w 100% poprawny i powiem więcej działa - zatem coś musiałeś mocno poplątać np w połączeniach albo nie wiem co
    Oczywiście lepiej jest zawsze dawać sobie XOR jak pisał wyżej kolega auers - bo to łatwiej zawsze okiem wyłapać ale u ciebie dioda powinna normalnie zgasnąć i już. Więc w kodzie nie szukaj przyczyny.


    Połączenie jest tak banalne, że musi być prawidłowe, sprawdziłem to ustawiając kolejno 1 i 0 na PC0, dioda reaguje tak jak powinna.
    Czy to może być wina samego uC? No ale opóźnienia działają, a podejrzewam, że są związane z Timerem w uC, czyli ten również teoretycznie działa.
    Nie wiem, może kupię drugą sztukę uC i wgram na nią ten program.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 kwi 2020, o 12:59 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    Pytanie co chcesz zrobić?
    Raz mrugnąć? To masz dobrze i jak Mirek napisał szukaj problemu w połączeniach.
    Jeżeli ma migać cyklicznie? To Ci nie działa bo nie ustawiasz ponownie wyjścia w stan wysoki.
    Zamiast PORTC &= ~LED1
    zrób PORTC ^= LED1


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 kwi 2020, o 13:21 
    Offline
    Moderator
    Avatar użytkownika

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

    ASUR napisał(a):
    Nie wiem, może kupię drugą sztukę uC i wgram na nią ten program.

    Kompletny absurd i nonsens ... po prostu kosmos. Podejrzewanie procków o takie uszkodzenia to szok .... szok

    Prędzej mogłeś sam upalić sam pin procka bo np nie podłączyłeś rezystora do diody LED. A podłączyłeś ? Ale wtedy wystarczy sprawdzić miganiem diodą LED na tym pinie w pętli głównej w main.c - sprawdziłeś ?

    _________________
    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: 8 kwi 2020, o 14:21 
    Offline
    Nowy

    Dołączył(a): 08 kwi 2020
    Posty: 8
    Pomógł: 0

    mirekk36 napisał(a):
    ASUR napisał(a):
    Nie wiem, może kupię drugą sztukę uC i wgram na nią ten program.

    Kompletny absurd i nonsens ... po prostu kosmos. Podejrzewanie procków o takie uszkodzenia to szok .... szok

    Prędzej mogłeś sam upalić sam pin procka bo np nie podłączyłeś rezystora do diody LED. A podłączyłeś ? Ale wtedy wystarczy sprawdzić miganiem diodą LED na tym pinie w pętli głównej w main.c - sprawdziłeś ?


    Podłączałem wszystko tak jak pokazywałeś na YT i sprawdziłem. Okazuje się, że częstotliwość była za wysoka i moja dioda migała za szybko żebym mógł to zobaczyć i należało faktycznie zmienić operator na ^= w przerwaniu. Zwiększyłem preskaler na 255 i zmieniłem operator na ^= i jest git.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 kwi 2020, o 14:30 
    Offline
    Użytkownik

    Dołączył(a): 11 sty 2015
    Posty: 166
    Pomógł: 24

    ASUR napisał(a):
    Zwiększyłem preskaler na 255 i zmieniłem operator na ^= i jest git.

    Znowu coś kręcisz.
    Jak zwiększyłeś preskaler na 255 jak miałeś 1024?
    Po pierwsze nie ma preskalera 255.
    Po drugie jak go zmniejszasz na 256 to fizycznie zwiększasz częstotliwość a nie odwrotnie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 kwi 2020, o 09:13 
    Offline
    Nowy

    Dołączył(a): 08 kwi 2020
    Posty: 8
    Pomógł: 0

    Mój błąd, chodziło mi o OCR0A.



    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 1 gość


    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