Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla 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

14 Gru 2012 22:28 1488 5
  • 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.
  • 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
  • Pomocny post
    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.
  • 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 :)
  • 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