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 13 kwi 2025, o 12:38


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 26 wrz 2017, o 15:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 cze 2016
    Posty: 40
    Lokalizacja: Łódź
    Pomógł: 1

    Witam.
    Mam takie pytanie odnośnie przerwań generowanych z timera.
    Procesor Atmega328p 16 Mhz.
    Timer ustawiony na:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    Procedury obsługi:
    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.

    Pytanie dotyczy tego czy takie rozwiązanie jest poprawne i jakich komplikacji mogę się spodziewać?
    Ogólnie działa wyśmienicie ale jeszcze raczkuję w przerwaniach więc może mnie ktoś bardziej doświadczony wspomoże wiedzą.
    Pozdrawiam.



    Ostatnio edytowano 26 wrz 2017, o 21:05 przez radek3035, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 wrz 2017, o 18:34 
    Offline
    Moderator zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 18 lip 2012
    Posty: 3228
    Lokalizacja: Kraków - obok FAB5 ATMEL'a
    Pomógł: 91

    topic7402.html


    Autor postu otrzymał pochwałę

    _________________
    http://www.jaglarz.info



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 wrz 2017, o 14:12 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 cze 2016
    Posty: 40
    Lokalizacja: Łódź
    Pomógł: 1

    OK. Powyższy kod jest do niczego. Tylko się wydawało że działa ok. Ale już sobie poradziłem...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 wrz 2017, o 14:51 
    Offline
    Użytkownik

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

    Jeśli był problem, to zdradź na czym polegał i co pomogło. Ja nie zauważyłem błędu.
    Co prawda konwersja trwa krótko i z reguły można sobie pozwolić na to, by po prostu poczekać w przerwaniu od timera na koniec konwersji, i ja tak robię.
    Ale czasami potrzeba tych kilkadziesiąt cykli zaoszczędzić i wtedy Twoje rozwiązanie jest jak najbardziej przydatne.

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 wrz 2017, o 16:00 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 cze 2016
    Posty: 40
    Lokalizacja: Łódź
    Pomógł: 1

    Wydawało się że działa prawidłowo, ale jednak nie do końca...
    Po pierwsze:
    Preskaler na ADC zbyt mały, ADC może chodzić do 200 kHz przy rozdzielczości 10 bit.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Po drugie:
    Skrócenie kodu do minimum bo nie nadążało z przerwaniami.
    Po trzecie:
    Lepsza synchronizacja pomiaru ze zboczem opadającym na PWM. (Na tym mi zależało bardzo)

    Pomiar bez żadnego uśredniania na trzech kanałach jest zarąbiście stabilny :)
    Teraz wygląda to tak:
    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.

    Ewentualnie jeśli robimy tylko pomiary to można wstawić tablicę volatile
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Przy 15.625 kHz timera (pewnie i więcej) wszystko działa bez zarzutu i pomiary są stabilne bez uśredniania.
    wartości z pomiarów w zmiennych volatile (pomiar_kanal_x) warto przepisać do zmiennych w głównej pętli programu jeśli operujemy na nich dłużej bo szybko się zmieniają
    i mogą wychodzić dziwne obliczenia :)
    U mnie działają pomiary i regulacja pwm bez żadnych zacięć niezależnie razem z wyświetlaniem wyników na lcd od noki w 16-to bitowym kolorze czcionką 15 na 27 pixeli ;)

    Ps Jeśli moje wypociny się przydały kliknij "pomógł" ;) To motywuje do dalszych wypocin ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 wrz 2017, o 12:42 
    Offline
    Użytkownik

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

    radek3035 napisał(a):
    Jeśli moje wypociny się przydały kliknij "pomógł" ;) To motywuje do dalszych wypocin ;)

    Bardzo chętnie, powiedz mi tylko jak. To jest Twój wątek i Ty możesz nagradzać, a nie Ciebie można nagradzać. Swoja droga przydałoby się coś takiego, bo np. autorzy poradników pozostają bez uznania.
    Co się dzieje, gdy częstotliwość konwersji jest za duża. W PDFie nie jest to wyjaśnione, tylko jest wzmianka by unikac i, że traci się na rozdzielczości. Ale na czym ta utrata polega to już nie wiadomo.

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 wrz 2017, o 14:06 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 cze 2016
    Posty: 40
    Lokalizacja: Łódź
    Pomógł: 1

    Cytuj:
    Co się dzieje, gdy częstotliwość konwersji jest za duża.

    W moim przypadku zauważyłem że pomiary zaczynają się "mieszać", zmniejsza się separacja.
    Tzn. podanie napięcia na jeden kanał powodowało zmianę pomiaru(wzrost) na innych kanałach mimo że były podłączone do GND.
    Im wyższa częstotliwość, tym większe "przebicia".
    Rozdzielczość się nie zmniejsza, ale zmniejszając ją możemy zwiększyć częstotliwość ADC do ok. 250 kHz a nawet więcej przy 8 bitach.
    Z tym jeszcze nie kombinowałem.
    Do obliczania napięcia używam funkcji:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    Może komuś się przyda...



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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