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 16 lip 2025, o 21:52


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
    Autor Wiadomość
    PostNapisane: 8 lis 2019, o 21:47 
    Offline
    Nowy

    Dołączył(a): 15 maja 2017
    Posty: 13
    Pomógł: 0

    Witam. Poszukuje sposobu na uruchomienie dwóch led w trybie PWM o różnych czasach działania.
    Led1/PWM1/PB0 - płynne rozjaśnianie 0-240 w czasie 60 sekund, ciągłe świecenie przez czas 120 sekund, płynne gaszenie 240-0 przez czas 60 sekund (w pętli)
    Natomiast równolegle chcę by Led2/PWM2/PB1 się płynnie rozjaśniało 0-240 przez czas 90 sekund , płynnie wyłączało przez czas 50 sekund (pętla).
    Niestety nie wiem jak się za to zabrać.

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lis 2019, o 20:44 
    Offline
    Nowy

    Dołączył(a): 15 maja 2017
    Posty: 13
    Pomógł: 0

    Doczytałem się o timerze programowym. Jednak niewiem jak się za to zabrać.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lis 2019, o 21:28 
    Offline
    Moderator
    Avatar użytkownika

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

    bobuss88 napisał(a):
    Jednak niewiem jak się za to zabrać.

    Proponuję zacząć od książki https://atnel.pl/mikrokontrolery-avr-jezyk-c.html

    _________________
    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: 10 lis 2019, o 10:33 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    Zaproponuję takie rozwiązanie
    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.

    Oczywiście i i j muszą być typu uint16_t, a dla drugiego kanału trzeba trochę pokombinować, by dopasować ściemnianie i rozjaśnianie do ilości kroków.
    Czas obiegu pętli też nie jest idealny. Jeżeli ma być idealny, to można zastosować zamiast _delay_ms(240); while(jakas_zmienna) a w obsłudze przerwania dopisać zerowanie tej zmiennej

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2019, o 13:09 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1978
    Lokalizacja: Lipsko
    Pomógł: 125

    Twoje zadanie najprościej byłoby chyba rozwiązać z użyciem switch-case. Prosta maszyna stanów dla każdego z led pozwoli na łatwiejsze zarządzanie czasami świecenia. Oczywiście bez timera programowego się raczej nie obejdzie.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lis 2019, o 13:38 
    Offline
    Nowy

    Dołączył(a): 21 mar 2019
    Posty: 3
    Pomógł: 0

    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.


    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 ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    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.


    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.


    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2019, o 00:38 
    Offline
    Nowy

    Dołączył(a): 15 maja 2017
    Posty: 13
    Pomógł: 0

    Dziękuję za zainteresowanie postem.
    Potrzebowałbym jednak jeszcze zmianę czasów poprzez przełączniki na portach PB3 i PB4:

    PB3 stan niski - przełącznik czasu Kanału 1 -płynne rozjaśnianie 0-240 przez czas 60 sekund, ciągłe świecenie przez czas 120 sekund, płynne wyłączenie przez czas 60 sekund.

    PB3 stan wysoki - przełącznik czasu Kanału 1 -płynne rozjaśnianie 0-240 przez czas 90 sekund, ciągłe świecenie przez czas 120 sekund, płynne wyłączenie przez czas 90 sekund.

    PB4 stan niski - przełącznik czasu Kanału 2 -Rozjaśnianie 0-240 przez czas 60 sekund, gaszenie przez czas 40 sekund.

    PB4 stan wysoki - przełącznik czasu Kanału 2 -Rozjaśnianie 0-240 przez czas 90 sekund, gaszenie przez czas 50 sekund.

    Oczywiście jak wyżej wspomniałem oba kanały pwm muszą pracować równolegle.

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2019, o 10:57 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    SylwekK napisał(a):
    najprościej byłoby chyba rozwiązać z użyciem switch-case
    Kolega ma na myśli coś takiego:
    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.

    SylwekK napisał(a):
    bez timera programowego się raczej nie obejdzie

    nie jestem przekonany czy w TYM konkretnym przypadku jest to niezbędne, choć jeżeli program ma być rozbudowywany to warto
    lub też jeżeli czasy są krytyczne
    bobuss88 napisał(a):
    zmianę czasów poprzez przełączniki na portach PB3 i PB4:

    a jaki to problem
    ponieważ zmieniasz tylko czasy i tylko w zależności od stanu wejścia, to wystarczy stałe w warunkach zamienić na zmienne, których wartość będzie zależeć od stanu wejścia, np tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2019, o 11:30 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 paź 2013
    Posty: 1978
    Lokalizacja: Lipsko
    Pomógł: 125

    @Alef2, tak, mniej więcej o to chodzi. Wypadało by tylko uzależnić kroki rozjaśnianie/ściemnianie od czasu aby te kroki w zadanym czasie odliczyło. Można to zrobić na kilka sposobów. Timer programowy jest wygodny nawet jak przerwan do niczego innego nie wykorzystujemy :)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2019, o 13:37 
    Offline
    Nowy

    Dołączył(a): 15 maja 2017
    Posty: 13
    Pomógł: 0

    Czy szkic programu jest obecnie poprawny?

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lis 2019, o 22:42 
    Offline
    Nowy

    Dołączył(a): 21 mar 2019
    Posty: 3
    Pomógł: 0

    Having both instance of class outside implementation file and fully opaque pointer requires dynamic allocation which is to be avoided. Furthermore, I think that to implement inheritance subclass has to know all about superclass.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lis 2019, o 22:50 
    Offline
    Nowy

    Dołączył(a): 21 mar 2019
    Posty: 3
    Pomógł: 0

    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.


    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.


    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.


    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.


    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.


    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.


    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.


    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.


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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lis 2019, o 23:42 
    Offline
    Nowy

    Dołączył(a): 15 maja 2017
    Posty: 13
    Pomógł: 0

    23:42:27 **** Incremental Build of configuration Release for project zzzz ****
    make all
    'Building file: ../button.c'
    'Invoking: AVR Compiler'
    avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=attiny13 -DF_CPU=9600000UL -MMD -MP -MF"button.d" -MT"button.o" -c -o "button.o" "../button.c"
    In file included from ../button.c:3:0:
    ../led.h:17:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'typedef'
    typedef struct LedConfigSet {
    ^
    In file included from ../button.c:4:0:
    ../button.h:8:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'typedef'
    typedef struct ButtonConfigSet {
    ^
    ../button.c:8:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'static'
    static void doFunction(Button * const me);
    ^
    ../button.c: In function 'rawState':
    ../button.c:12:31: error: 'ButtonConfigSet' has no member named 'port'
    return *me->config->port & me->config->mask;
    ^
    ../button.c:12:50: error: 'ButtonConfigSet' has no member named 'mask'
    return *me->config->port & me->config->mask;
    ^
    ../button.c: In function 'Button_init':
    ../button.c:22:13: warning: implicit declaration of function 'doFunction' [-Wimplicit-function-declaration]
    doFunction(me);
    ^
    ../button.c: At top level:
    ../button.c:47:10: warning: conflicting types for 'doFunction' [enabled by default]
    void doFunction(Button * const me)
    ^
    ../button.c:22:13: note: previous implicit declaration of 'doFunction' was here
    doFunction(me);
    ^
    ../button.c: In function 'doFunction':
    ../button.c:51:34: error: 'ButtonConfigSet' has no member named 'onFunction'
    if(me->config->onFunction)
    ^
    ../button.c:52:41: error: 'ButtonConfigSet' has no member named 'onFunction'
    (*me->config->onFunction)();
    ^
    ../button.c:56:34: error: 'ButtonConfigSet' has no member named 'offFunction'
    if(me->config->offFunction)
    ^
    ../button.c:57:41: error: 'ButtonConfigSet' has no member named 'offFunction'
    (*me->config->offFunction)();
    ^
    ../button.c: In function 'rawState':
    ../button.c:13:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
    make: *** [button.o] Błąd 1

    23:42:27 Build Finished (took 237ms)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 lis 2019, o 13:37 
    Offline
    Użytkownik

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

    Przy kopiowaniu zabrakło Ci jakiegoś nawiasu klamrowego }
    Taki przynajmniej masz komunikat.
    Sprawdź sobie jeszcze raz skopiowany kod.

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



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

    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO