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 10 lip 2025, o 13:09


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
    Autor Wiadomość
    PostNapisane: 21 sty 2016, o 14:42 
    Offline
    Nowy

    Dołączył(a): 20 lut 2014
    Posty: 13
    Pomógł: 0

    Witam uprzejmie, potrzebuję zacząć projekt korzystający z programowego pwm. Poniżej dotychczasowy 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.


    Oraz plik z funkcjami :

    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.


    Trzeci plik jest jedynie z definicjami, nie ma chyba potrzeby żeby go wrzucać.
    Oczekiwałem pwm na zdefiniowanych wyprowadzeniach zależnie od parametrów pwm_x

    Kwarc 16MHz, wszystko jest ustawione ok (sprawdziłem wprowadzając do pętli main prosty _delay i załączanie diod)

    Niestety diody nie świecą się tak jakbym tego oczekiwał a dzieje się tak :
    [youtube]https://youtu.be/ht5-GLB_gWc[/youtube]

    Jest ktoś skłonny wyłapać błąd ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 sty 2016, o 16:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Masz za małą częstotliwość PWM-a - 16000000/256(preskaler)/131(256-125) daje częstotliwość występowania przerwań równą ok. 477Hz. W przerwaniu zmienna cnt liczy od zera do 255. Częstotliwość PWM będzie równa 477Hz/256 czyli ok. 1,8Hz.

    Aby sprawdzić to co napisałem zmniejsz preskaler. Zwiększy to częstotliwość występowania przerwań a tym samym częstotliwość PWM. Możesz również skrócić cykl zliczania zmiennej cnt.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 sty 2016, o 16:16 
    Offline
    Użytkownik

    Dołączył(a): 26 lip 2015
    Posty: 269
    Pomógł: 34

    Jeśli ustawiłeś tryb normal to w przerwaniu musisz znowu napisać to: TCNT0 = 125; druga sprawa to taka, że bibliteki w nawiasach ostrych inkludujemy na samym górze, a w cudzysłowach pod nimi i jeszcze masz zbyt małą częstotliwość wykonywania przerwania więc to też popraw.(ja nie poprawiłem tej częstotliwości)
    Kod powinien wyglądać 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.

    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: 21 sty 2016, o 16:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Teraz zauważyłem, że w przerwaniu nie ładujesz do TCNT0 początkowej wartości równej 125. To sprawia, że tylko pierwsze przerwanie wystąpi po odliczeniu 131 impulsów. Każde następne przerwanie wystąpi po odliczeniu 256 impulsów. Co jeszcze zmniejszy częstotliwość.

    Tryb Overflow to nie CTC. Tu trzeba w przerwaniu ustawiać początkową wartość licznika TCNT0.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 sty 2016, o 16:23 
    Offline
    Nowy

    Dołączył(a): 20 lut 2014
    Posty: 13
    Pomógł: 0

    TCNT0 to pozostałość po innych próbach, usunąłem z przerwania ale nie z funkcji init(),mój błąd , to ma i tak wpływ tylko na pierwszy cykl. Sam tryb overflow jest dla mnie wystarczający i jednocześnie jest najprostszy.

    TCCR0 |=(1<<CS01)|(1<<CS00); //prescaler 64
    Na 'oko' diody mrugają jedynie 2 razy szybciej
    Przy konfiguracji :
    TCCR0 |=(1<<CS01); //prescaler 8
    Diody mrugają bardzo szybko ale nie widać charakterystycznego dla pwm przyciemnienia.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 sty 2016, o 18:44 
    Offline
    Użytkownik

    Dołączył(a): 26 lip 2015
    Posty: 269
    Pomógł: 34

    Napisz jaki masz procek.Zrób tak wydaje mi się, że to będzie działać:
    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.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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