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 25 maja 2025, o 19:41


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
    Autor Wiadomość
    PostNapisane: 17 gru 2017, o 15:22 
    Offline
    Nowy

    Dołączył(a): 26 lut 2017
    Posty: 9
    Pomógł: 0

    Witam.

    Proszę o analizę kodu (procesor ATmega328p)

    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.


    Program ma na zadanie sterować dwoma przekaźnikami oraz przełączać za pomocą jednego przycisku, po kolei pwm1 i pwm2 ... docelowo chcę dorobić jeszcze z trzy szybkości zmian PWM.
    Problem pojawił się podczas obsługi 1 przycisku:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Niby działa, ale nie do końca, bo zamiast po naciśnięciu włączyć "pwm2", a przy następnym naciśnięciu włączyć "pwm1" to od razu przełącza do "pwm1".

    Próbowałem różnych wariacji kodu, ale wynik zawsze był taki sam czyli wykonuje się pierwsza pętla i zaraz po niej druga. W skrajnych przypadkach nie działo się nic.
    A i jeszcze jeden mały problem z PWM po zainicjowaniu cały czas na wyjściu mam pik około 3V, co skutkuje świeceniem diody.
    Czy to jest normalne podczas kiedy OCR0A jest ustawione na 0?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 gru 2017, o 15:32 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    Żeby zlikwidować pik przy pwm=0 musisz ustawić PWM w trybie zanegowanym i odpowiednio sterować.



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

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

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


    Jak się robi tak tragiczne wcięcia w kodzie to nie dziwota, że się swojego BABOLA nie widzi. Pomijam już fakt, że tragicznie podchodzisz do obsługi przycisków no ale ok ... jak się uprzeć to tak też można - tyle że ty przez te wcięcia nie widzisz, że schowałeś obsługę drugiego przycisku "w brzuchu" obsługi pierwszego przycisku - o ile ja też dobrze widzę - bo ciężko coś dojrzeć przy takich wcięciach jak mówię.

    Zainteresuj się po pierwsze moim blogiem a szczególnie tym artykułem:

    http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

    i zrób obsługę przycisków jak się należy ;) a zobaczysz, że pójdzie ci później z górki

    a ogólnie jeśli chodzi o pisanie takiego kodu to polecam obserwuj bieżący poradnik:

    http://mirekk36.blogspot.com/2017/12/au ... iczne.html

    bo będzie w nim mnóstwo szczególnie dla ciebie interesujących informacji jak podchodzić do programowania NIEBLOKUJĄCEGO - bez żadnych kocich delayów ;)

    _________________
    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: 17 gru 2017, o 18:21 
    Offline
    Nowy

    Dołączył(a): 26 lut 2017
    Posty: 9
    Pomógł: 0

    Ok dziękuję za podpowiedzi i za linki.
    Zabieram się za czytanie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 gru 2017, o 15:03 
    Offline
    Nowy

    Dołączył(a): 26 lut 2017
    Posty: 9
    Pomógł: 0

    Poczytałem oglądałem i mam kolejne pytania:

    kod z bloga o drganiach styków;
    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.


    Działa jak najbardziej.

    Chciałem dopiąć kolejną diodę do tego kodu i już nie działa dlaczego? Nie widzę błędu swojego mimo usilnych prób zrozumienia dlaczego tak to działać nie chce;
    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.


    Dlaczego nie chce działać dioda podpięta pod PD2? Nie rozumiem tego :(



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

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Linia 20 i linia 31.
    Nie możesz tak zapisać. Powinno być:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    analogicznie dla drugiej wymienionej linijki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 gru 2017, o 16:06 
    Offline
    Nowy

    Dołączył(a): 26 lut 2017
    Posty: 9
    Pomógł: 0

    Ok. A dlaczego kompilator nie stwierdził, że jest coś nie tak... jest więcej takich zapisów gdzie nie można używać przecinka?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 gru 2017, o 16:14 
    Offline
    Użytkownik

    Dołączył(a): 24 kwi 2013
    Posty: 454
    Pomógł: 30

    Poza tablicami i argumentami funkcji, to raczej nigdzie nie można.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 gru 2017, o 16:17 
    Offline
    Nowy

    Dołączył(a): 26 lut 2017
    Posty: 9
    Pomógł: 0

    Ok dziękuje.



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

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Manekj napisał(a):
    Ok. A dlaczego kompilator nie stwierdził, że jest coś nie tak... jest więcej takich zapisów gdzie nie można używać przecinka?
    Przecinek jest operatorem. Opis pod linkiem: https://pl.wikibooks.org/wiki/C/Operato ... _przecinek
    A dlaczego kompilator nie zwrócił błędu? Bo go nie ma. Wg podanego opisu, wykonują się poszczególne działania, czyli ustawiasz kierunek/zmieniasz wartość dla pinu LED. Natomiast sam zapis LED_1 nie robi w zasadzie nic.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 gru 2017, o 17:23 
    Offline
    Nowy

    Dołączył(a): 26 lut 2017
    Posty: 9
    Pomógł: 0

    Dziękuję jeszcze muszę sporo poczytać i zapamiętać.
    I przede wszystkim najtrudniejsze dla mnie to nauczyć się czytać kod.



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

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Manekj napisał(a):
    Dlaczego nie chce działać dioda podpięta pod PD2? Nie rozumiem tego :(
    Autor twierdzi inaczej ;)
    Przecinek ma niższy priorytet niż "|="?



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

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

    roske napisał(a):
    Masz rację - odszczekuję

    Na tym forum nawet w stosunku do samego siebie wypadałoby stosować mniej agresywne wypowiedzi

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

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    roske napisał(a):
    Marhef czy ja Cię jakoś obraziłem, albo ogólniej: czy moja odpowiedź wzbudziła w Tobie jakiekolwiek negatywne odczucia?
    Nie, sam pisałem z głowy, więc nie wiedziałem, czy dobrze piszę. Stąd pytanie o priorytety operatorów. A uwaga, który pin jest ustawiany, żeby wskazać, na podstawie czego wysnułem taki wniosek.
    Gdyby Twoja wypowiedź była obraźliwa, odezwałbym się na pw. Staram się nie kłócić na forum.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2018, o 19:31 
    Offline
    Nowy

    Dołączył(a): 26 lut 2017
    Posty: 9
    Pomógł: 0

    Dziękuję za wyjaśnienia związane z operatorami.

    Od poprzedniego posta walczę z zrozumieniem timerów i dla ćwiczeń przerobiłem przykład z tej strony, co podał Pan mirekk36

    Cytuj:
    Zainteresuj się po pierwsze moim blogiem a szczególnie tym artykułem:

    http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html
    dokładnie z trzeciej części.

    Kod przerobiłem z ATmega32 na swój procesor ATmega328P (F-CPU 16MHz). Starałem się aby wcięcia były poprawne, ale nie wiem czy wszędzie takie są.

    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.


    Mo i nie działa, a przynajmniej nie tak jak powinien.

    Zastosowałem Timer 16 Bitowy.
    Ustawienia szukałem w noce katalogowej ATmegi328P po kolei:

    Strona 172 ustawienie trybu CTC:
    Obrazek

    Strona 173 ustawienie prescaler:

    Obrazek


    Strona 184 ustawienie przerwania CompareMatch i tu wystąpił problem po parunastu próbach doszedłem jak to ustawić:

    Obrazek

    i przeszukałem AVR Device Explorer

    Obrazek

    oraz

    Obrazek


    niestety nie znalazłem wzmianki w nocie ja ustawić TIMSK1 oraz jaki rejestr ustawić tak aby kompilator nie zgłaszał błędu.
    Ustawiłem tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    inne ustawienia kompilator nie przyjmował dlatego opisałem na rzutach, co zmieniłem aby kompilator chciał to kompilować opisy z noty nie działały.


    Czyli całe ustawienie timera TC1 16bit wygląda tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Przestawiam schemat jak to podłączyłem:

    Obrazek


    I teraz jak to działa:

    Po skompilowaniu i wgraniu w do procesora mrugnie dioda LED3 (1<<PD7), a po chwili miga , co około 4s i nie blokuje się gdy nacisnę przycisk czyli działa, ale jakoś bardzo długo.


    Po krótkim naciśnięciu przycisku KEY1 (1<<PB4) zmienia mi się tylko stan diody LED1, a po dłuższym nienacinaniu przycisku nie dzieje się nic, a miała zapalać się dioda LED2.

    Według opisu Pana mirekk36 po krótkim naciśnięciu inicjalizujemy zmienna "flag" po naciśnięciu i odczekaniu ustalonego czasu (wait_time_s = 3;) powinna zrealizować się druga akcja czyli zaświecić LED2. I teraz nie wiem czy ta część dobrze zrozumiałem Aktualnie 2 akcja nie działa.

    Mogę liczyć na doprecyzowanie, co jest nie tak z tymi moimi ustawieniami?



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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