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 12 lip 2025, o 02:00


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 15 lut 2014, o 13:00 
    Offline
    Nowy

    Dołączył(a): 04 lut 2014
    Posty: 7
    Lokalizacja: Końskie/Tomaszów/Warszawa
    Pomógł: 0

    Witam wszystkich jest to mój pierwszy post na forum oraz pierwszy program jaki staram się stworzyć.
    Na wstępie chwiałbym podziękować Panu Mirkowi za tak wspaniałą książkę oraz poradniki, bez nich nie zdecydował bym się na rozpoczęcie nauki programowania.
    Teraz przejdę do sedna sprawy, mam problem z odpowiednim napisaniem programu. Składa się z dwóch części, oddzielnie działają idealnie jednak razem już nie wychodzi to co sobie zaplanowałem ;)
    Program oparty jest w 99% na książce jednak przerobiłem go na Atmege 8(wiem źle zrobiłem ale tak to jest jak człowiek się nie słucha mądrzejszych..).
    Pierwsza część odpowiada za szybkie mrugnięcia diodą pod kanałem PB1, druga opiera się na PWM i ma za zadanie płynnie rozjaśniać oraz przyciemniać diodę podłączoną do PB3.
    Co trzeba zmienić aby wykonywanie drugiej części nie powodowało opóźnienia wykonywania pierwszej?
    Jeśli brakuję jakiś informacji to bardzo przepraszam, postaram się odpowiedzieć na wszelkie pytania..jeśli je tylko zrozumiem ;)
    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.



    Ostatnio edytowano 19 lut 2014, o 21:23 przez Syntezator, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lut 2014, o 13:18 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Musisz wywalić wszystkie delay, zamiast pętli for zastosować inną pracę ze zmiennymi no i przede wszystkim musisz poczytać o timerach programowych, bo one są podstawą opóźnień przy nieblokujących programach.

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 lut 2014, o 14:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 02 gru 2012
    Posty: 530
    Lokalizacja: Bydgoszcz
    Pomógł: 8

    Zobacz jak ja steruję diodami RGB przez PWM, link znajdziesz w moim podpisie. Na dniach będę modyfikował kod, ale ten co tam jest działa bez zarzutu.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lut 2014, o 20:57 
    Offline
    Nowy

    Dołączył(a): 04 lut 2014
    Posty: 7
    Lokalizacja: Końskie/Tomaszów/Warszawa
    Pomógł: 0

    Dziękuję za podpowiedzi jednak muszę dalej prosić o pomoc.
    Zgodnie z zaleceniami zabrałem się za same timery programowe, napisałem trzy funkcje mające za zadanie mrugać diodami.
    Pierwsza zaczerpnięta jest w pewnym stopniu z Rozdziału "Wstęp do systemów czasu rzeczywistego str.443, druga "Sterowanie PWM" str.249, trzecia w oparciu o Poradnik "AVR Przerwania Cz.1".
    Zgodnie z moim tokiem rozumowania obie powinny zapalać i gasić diodę co 1s, jednak występują zauważalne różnice między 2 a 1 i 3-dlaczego?
    Kolejnym krokiem jaki chciałbym zrobić to wygenerowanie dwóch krótkich błysków i dłuższej przerwy w oparciu o ten timer.
    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.



    Ostatnio edytowano 19 lut 2014, o 21:23 przez Syntezator, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 lut 2014, o 21:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 mar 2013
    Posty: 739
    Lokalizacja: Poznań
    Pomógł: 84

    Umieść kod w znacznikach "synrax=c"
    bo teraz to nic nie widać :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lut 2014, o 11:49 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Syntezator napisał(a):
    Kolejnym krokiem jaki chciałbym zrobić to wygenerowanie dwóch krótkich błysków i dłuższej przerwy w oparciu o ten timer.


    Osobiście do takich efektów wykorzystuję dwie różne metody przede wszystkim w zależności od sytuacji i potrzeb:
    - wykorzystująca (wg mnie najprostsza) switch-case gdzie w każdym przebiegu ustalasz dla timera konkretną wartość do odliczenia zanim znowu wejdzie w "przełącznik", a przy zadawaniu wartości wykonujesz też konkretne instrukcje, które sobie zaplanowałeś (tu można by znowu podzielić na kolejne metody, ale mieszał nie będę);

    - nieco trudniejsza - choć czy ja wiem czy trudniejsza...po prostu inina 8-) - metoda oparta na matrycy bitowej i korzystająca z przesunięć bitowych. Ta również pozwoli na pojedyncze błyski, ale częściej ją wykorzystuje do generowania konkretnych serii zer i jedynek w ustalonym czasie.

    Są też i inne sposoby oparte na If...else (w sumie idealnie nadaje się jak mamy tylko dwa czasy), ale ja najbardziej lubię powyższe ;)

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lut 2014, o 17:18 
    Offline
    Nowy

    Dołączył(a): 04 lut 2014
    Posty: 7
    Lokalizacja: Końskie/Tomaszów/Warszawa
    Pomógł: 0

    Wczoraj udało mi się zrealizować sekwencje błysków wykorzystując Timer2.
    Niestety próba zrealizowania tego samego wykorzystując Timer1 już nie wypadła tak dobrze, w jaki sposób obliczyć taktowanie dla niego?
    Dodatkowo próbując wykorzystać zarówno Timer1 jak i Timer2 realizowała się tylko część związana z Timerem1 dlaczego?
    Poniżej podaje kod programu i ustawienia dla Timer1 oraz Timer2.

    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: 20 lut 2014, o 17:28 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Chyba nie do końca zrozumiałeś ideę timerów programowych :/ To coś co w przerwaniu może wyglądać mniej więcej tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Sporo na ten temat już napisano na forum...

    A czy Timer1 jeden może pracować w trybie CTC, bo nawet nie wiem na jakim procku działasz ?

    _________________
    http://www.sylwekkuna.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lut 2014, o 18:12 
    Offline
    Nowy

    Dołączył(a): 04 lut 2014
    Posty: 7
    Lokalizacja: Końskie/Tomaszów/Warszawa
    Pomógł: 0

    Procesor to Atmega8 strona 97 noty.
    Znalazłem jeden ale wszystko psujący błąd..
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Po tej zmianie obie diody żyją, chociaż w przypadku Timera 1 preskaler musiałem przestawić na 1 aby było coś widać.
    Jednak dalej nie wiem jak obliczać parametry dla Timera1.

    Uzyskanie zapalania i gaszenia diody znalazłem w wielu wątkach, niestety jak poprawnie uzyskać sekwencje aby nie zakłócać pozostałej części programu już nie.

    Masz racje nie do końca rozumiem ich idee, dlatego wrócę do przeanalizowania Poradników i książki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 lut 2014, o 19:54 
    Offline
    Nowy

    Dołączył(a): 04 lut 2014
    Posty: 7
    Lokalizacja: Końskie/Tomaszów/Warszawa
    Pomógł: 0

    Napisze post pod postem ale chciałbym wstawić działający kod do generowania płynnego rozjaśniania i ściemniania diody jednocześnie generując sekwencje błysków. Poprawiłem również komentarze bo jednak było sporo w nich błędów.
    Niestety nie jest to tak jak być powinno, jednak działa.
    Może ktoś pokusi się o przedstawienie poprawnego sposobu generowania błysków dla diody podłączonej do PC5?

    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.


    Gdyby ktoś chciał zmodyfikowałem lekko fragment związany z Timerem2 wielkość programu spadła z 424 do 382 baitó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.



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

    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