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 26 lip 2025, o 14:13


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 9 gru 2018, o 17:04 
    Offline
    Nowy

    Dołączył(a): 26 sie 2018
    Posty: 3
    Pomógł: 0

    Cześć wam. Chciałbym poznać przyczynę problemu, który zaraz opiszę.
    Mikrokontroler to ATtiny13. Problem jest taki, że przy poniższym kodzie otrzymuję na wyjściu OC0A, czyli PB0, impulsy o czasie trwania 104 ns. Odpowiada to taktowaniu procesora na wewnętrznym RC, czyli 9,6 MHz. Impulsy pojawiają się z częstotliwością ok 37 kHz, co odpowiada częstotliwości przepełniania licznika tego timera.
    Nie ruszam tu wartości rejestru OCR0A. Nawet wstawienie na sztywno OCR0A = 0, w różnych miejscach kodu, nie pomaga.
    W kodzie tym, poza PWM, używam również przerwania od przepełnienia dlatego jest tam TOIE0.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Co prawda znalazłem obejście problemu, ale nadal nie rozumiem czemu mam ten impuls przy powyższym kodzie.
    Moje obejście to ustawienie kierunku wyjściowego dla pinu PB0 dopiero bezpośrednio przed sterowaniem tym pinem przez PWM. Następnie ustawiam kierunek jako wejściowy kiedy kończę sterowanie PWM i czekam na następne wyzwolenie.
    Chciałem wstawić obrazy przebiegów z oscyloskopu. Ale chyba nie umiem używać opcji "dodaj obrazek" :P



    Ostatnio edytowano 9 gru 2018, o 22:08 przez sir_auron, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 gru 2018, o 17:43 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    sir_auron napisał(a):
    Problem jest taki, że przy poniższym kodzie otrzymuję na wyjściu OC0A, czyli PB0, impulsy o czasie trwania 104 ns. Odpowiada to taktowaniu procesora na wewnętrznym RC, czyli 9,6 MHz. Impulsy pojawiają się z częstotliwością ok 37 kHz, co odpowiada częstotliwości przepełniania licznika tego timera.

    Cytuj:
    The extreme values for the OCR0A Register represents special cases when generating a PWM
    waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will
    be a narrow spike for each MAX+1 timer clock cycle
    . Setting the OCR0A equal to MAX will result
    in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0
    bits.)

    Innymi słowami mikrokontroler działa zgodnie z dokumentacją producenta. Jeśli chcesz uzyskać ciągły stan niski na pinie PB0 przy ustawieniu OCR0A=0, powinieneś użyć innego trybu, np. Phase Correct (niestety obniży to częstotliwość PWM), lub tak jak zrobiłeś, wyłączać sterowanie pinem przez PWM (np. zerując bity COM0A1 i COM0A0) na czas, kiedy na wyjściu ma być stabilny stan niski).



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 gru 2018, o 17:52 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    Innymi słowami mikrokontroler działa zgodnie z dokumentacją producenta.

    Dokładnie bo efekt który opisałeś:

    sir_auron napisał(a):
    Problem jest taki, że przy poniższym kodzie otrzymuję na wyjściu OC0A, czyli PB0, impulsy o czasie trwania 104 ns.


    to są tzw "glitche" ... niepożądane szpilki ...

    jeszcze innym rozwiązaniem jest odwrócenie fazy sygnału za pomocą bitów COMxn ... oczywiście nie zawsze może to rozwiązać problem ... ale jeśli np sterujesz jasnością diody LED i ona nie chce przygasnąć do końca przez te szpilki, to z powodzeniem uda się to jeśli właśnie odwrócisz fazę sygnału a szpilki będą dalej wprawdzie występować ale w trakcie gdy dioda będzie maksymalnie świecić. Wtedy efekt szpilek będzie kompletnie nieistotny ...

    Jeśli chodzi o całkiem inne zastosowanie PWM no to ... rozwiązania tak jak wyżej

    _________________
    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: 9 gru 2018, o 22:06 
    Offline
    Nowy

    Dołączył(a): 26 sie 2018
    Posty: 3
    Pomógł: 0

    No tak, nota katalogowa i wszystko jasne.
    Dzięki za szybkie i wyczerpujące odpowiedzi :)
    Steruję LEDami także chyba zostanę przy sposobie ze zmianą kierunku pinu. Jednak teraz znam i inne podejścia do problemu :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 gru 2018, o 22:37 
    Offline
    Moderator
    Avatar użytkownika

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

    sir_auron napisał(a):
    także chyba zostanę przy sposobie ze zmianą kierunku pinu. Jednak teraz znam i inne podejścia do problemu

    ale pomyśl - tracisz czas na przełączanie ;) a po zmianie fazy - co robisz raz przy starcie - później NIC nie musisz programowo robić ;)

    _________________
    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 gru 2018, o 06:41 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Oczywiście odwrócenie fazy zda egzamin, bo dla OCR0A=255 na wyjściu będzie stabilny stan niski lub wysoki w zależności od ustawień bitów COM0A1 i COM0A0 (czyli nie będzie tych niepożądanych szpilek).
    Trzeba jednak pamiętać, że wtedy należy albo odwrotnie podłączyć diodę (co nie zawsze jest możliwe np. w przypadku wyświetlacza 7-segmentowego), albo sterować odwrotnie, czyli wartość OCR0A=255 będzie oznaczać całkowicie zgaszone, a OCR0A=0 - całkowicie rozjaśnione.

    To tak w celu uzupełnienia tylko ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 gru 2018, o 20:50 
    Offline
    Moderator
    Avatar użytkownika

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

    andrews napisał(a):
    czyli wartość OCR0A=255 będzie oznaczać całkowicie zgaszone, a OCR0A=0 - całkowicie rozjaśnione.

    No dokładnie to miałem na myśli, bez konieczności zmiany fizycznych połączeń

    _________________
    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 gru 2018, o 21:22 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Inna sprawa, że w trybie Phase Correct częstotliwość PWM będzie wprawdzie mniejsza, ale wciąż zupełnie wystarczająca jak dla sterowania jasnością diod LED, natomiast zarówno dla OCR0A=255 jak i dla OCR0A=0 nie będzie żadnych szpilek tylko stabilne stany wysoki i niski (lub odwrotnie, zależnie od ustawień bitów COM0A1 i COM0A0).

    Istnieją więc przynajmniej dwie możliwości programowego rozwiązania problemu bez konieczności zmian sprzętowych (zmiany połączeń), ale to już od autora wątku zależy, jak sprawę rozwiąże. Może mimo wszystko będzie wolał pozostać przy swoim rozwiązaniu...



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

    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