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.

AVR Atmega8 PWM - Program do generowania tablic i zwiększenie płynności LED

wolodiej1 14 Gru 2012 22:28 1407 5
  • #1 14 Gru 2012 22:28
    wolodiej1
    Poziom 12  

    Witam, czy istnieje jakiś program do generowania tablic ? Mam tablicę przypisaną do 14 ledów i dość uciążliwe jest jej ręczne przerabianie. Tablica wygląda tak:

    Code:
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    
    Data 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 6 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0
    Data 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0
    Data 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0
    Data 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0
    Data 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 , 0
    Data 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0
    Data 2 , 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1
    Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2
    Data 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3
    Data 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4
    Data 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5
    Data 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6
    Data 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 7
    Data 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0


    Dodatkowe pytanie to jak zrobić płynniejsze przechodzenie między diodami, ale żeby nie "rozwlekało się" na wszystkie. ( fala jest za szeroka, w takim wykonaniu musiałoby być z 40 ledów).

    Zamiast:
    2 , 3 , 4 , 5 , 6 , 7 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1

    tak:
    2 , 5 , 8 , 5 , 2, 0 , 0 , 0 ,0 ,

    tylko z większą płynnością.

    Dosyć enigmatycznie napisane, ale mam nadzieję, że się domyślacie o co chodzi.

    0 5
  • #2 14 Gru 2012 23:33
    szulat
    Poziom 23  

    na taki prosty efekt to szkoda tablicy... ale okej, dzieki temu masz uniwersalny program który umie odtworzyć dowolne dane.

    jeżeli nie znajdziesz specjalizowanego programu to dosyć łatwo jest generować tego typu przesuwające się liczby (i inne efekty) w arkuszu kalkulacyjnym - z zapisem do CSV

    0
  • Pomocny post
    #3 14 Gru 2012 23:37
    BlueDraco
    Specjalista - Mikrokontrolery

    Co prawda zaledwie domyślam się, o co może Ci chodzić, ale proponuję zabrać się za to zupełnie inaczej. Nie trzymaj jasności w tablicy, trzymaj tylko ew. zera i jedynki (jako bity w słowie) określające, którą diodę chcesz zapalić, a którą zgasić. W każdym okresie PWM zmieniaj wypełnienie o 1 w górę dla zapalanych i w dół dla gaszonych. Ja robię to tak, że każda dioda ma min. dwie zmienne: bieżący i docelowy współczynnik wypełnienia. Algorytm wyświetlanego wzoru ustawia wsp. docelowy, a bieżący jest zmieniany o 1 w każdym okresie. W wersjo bardziej zaawansowanej można mieć jeszcze zmienną określającą szybkość zmian.

    0
  • #4 17 Gru 2012 15:48
    wolodiej1
    Poziom 12  

    @BlueDarco

    Wydaje mi się, że o to własnie mi chodzi, ale szczerze mówiąc nie wiem jak mam to zrealizować. Czy mógłbyś mi podać jakiś przykład, albo podobny program.

    Chciałbym zrobić tak aby, każdy led rozjaśniał się od 0 do 64 ale tak żeby następny zaczął się rozjaśniać gdy pierwszy będzie na poziomie 3/4 pełnej jasności. Miałem program który, był na pętli FOR - były płynne przejścia, ale stan można było zmieniać na jednej diodzie jednocześnie.

    Program z tablicą zastosowaną tutaj może działać na każdą osobno ale brak tej płynności. Potrzebuję hybrydy :)

    0
  • #6 17 Gru 2012 16:55
    BlueDraco
    Specjalista - Mikrokontrolery

    Na końcu każdego okresu PWM należy zrobić coś takiego, jak poniżej. Przy sprzętowym PWM będzie to umieszczone w procedurze obsługi przerwania od timera PWM; przy programowym - w przerwaniu timera, ale będzie to uaktywniane tylko raz na okres WM, czyli np. co 64 przerwania timera.

    W C wyglądałoby to +- tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0