Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Bascom - Programowy PWM, zmniejszanie i zwiększanie wypełnienia na portach.

fysiek 14 Lis 2014 06:01 1200 2
  • #1 14 Lis 2014 06:01
    fysiek
    Poziom 24  

    Witam. jestem w trakcie realizacji szopki bożonarodzeniowej. chciałbym uzyskać efekt gwieździstego nieba. Wykonałem płytkę na której znajduję się ATmega32 z kwarcem 32MHz, który do portów A,C i D ma podłączony ULN2803. W sumie 24 wyjścia w układzie darlingtona. Od pewnego czasu próbuje każde z tych wyjść zmusić do generacji przebiegu PWM. O ile udaje mi się uzyskać to samo wypełnienie na każdym z nich razem o tyle mam wielki problem aby uzyskać przebieg o zmiennym wypełnieniu na dowolnym wyjściu. Koncepcja jest taka:
    -na każdym porcie stan zero
    -zwiększaj wypełnienie na porcie np.porta.0
    -gdy wypełnienie na porcie porta.0=max wtedy zmniejsz wypełnienie
    -gdy wypełnienie na porcie porta.0 = 0 wtedy zwiększ wypełnienie na porcie np porta.1

    itd....
    Bardzo proszę doświadczonych forumowiczów nie tyle o gotowy program, lecz o poradę jak się do tego zabrać. Wyjścia mają sterować docelowo diodami led przed driver ULN2803.

    0 2
  • Pomocny post
    #2 14 Lis 2014 07:41
    Futrzaczek
    Admin Grupy Retro

    Robiłem kiedyś sterownik choinkowy pięciokanałowy. Sprawę rozwiązałem następująco:

    - przerwania od przepełnienia Timer0 generują skoki do podprogramu (u mnie był kwarc 4MHz, dobierz preskaler)

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    - w podprogramie obsługi przerwania inkrementujemy ośmiobitową zmienną (typu Byte) i porównujemy jej stan z innymi, które zadają jasność świecenia
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Nie ma problemu, by rozbudować to dla 24 pinów.
    PS. 32MHz to nie za szybko?

    0
  • #3 15 Lis 2014 19:53
    fysiek
    Poziom 24  

    Witam. Dziękuję za radę, dzięki niej ruszyłem z projektem nieba. Na ta chwile wygląda to tak jak na filmiku. Tak, oczywiście z tym kwarcem to pomyłka, Atmega 32 taktowana jest z częstotliwością 16MHz. Umieszczam także kod źródłowy jaki wyskrobałem. wszelkie uwagi mile widziane.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod




    Dodano po 5 [godziny] 17 [minuty]:

    ...i jeszcze jedna możliwość. Wszystko się dzieje w przerwaniu timera 0.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    0