Sterownik świateł - LXT
LXT - Led Christmas Tree
słowa na wiatr (niewypowiedziane)...


Kilka słów...

LXT jest małym, zabawowo zorientowanym systemem mikroprocesorowym, pozwalającym sterować szesnastoma diodami LED, które mogą pełnić rolę na przykład lampek choinkowych.
Systemem zarządza odpowiednio zaprogramowany procesor AT90S2313, ładowanie danych do sterownika zapewnia specjalna aplikacja działająca w systemie Windows.
Działanie układu jest bardzo proste: procesor sekwencyjnie pobiera dane z zewnętrznej pamięci EEPROM (24C16) i wysyła je do dwóch ekspanderów I/O (PCF8574A). Lokalna komunikacja odbywa się przy pomocy magistrali I2C. Wyjścia układów PCF8574A mają wystarczającą wydajność prądową aby bezpośrednio zasilić diody LED, więc nie było potrzeby budowania dodatkowych stopni sterujących. Sterowane diody LED zapięte są pomiędzy VCC a wyjścia ekspanderów I/O. Oczywiście istnieje możliwość sterowania obciążeniem większej mocy. Układ można wyposażyć w zestaw tranzystorów wyjściowych i sterować niskonapięciowymi żarówkami lub w miejsce LED podłączyć wejścia optoizolowanych sterowników triaków np. MOC3021 lub podobnych.

Schematy ideowe

  • zasilacz +5V


  • procesor, sygnalizacja, komunikacja szeregowa


  • EEPROM, szesnastobitowe I/O


    Kompletny schemat: lxt_sch.pdf

    Płytka drukowana

    Sterownik został wykonany na jednostronnym laminacie, rozkład elementów jak na rysunku poniżej.
    Mozajka ścieżek:
    ledtree_bottom.pdf (termotransfer)
    ledtree_bottom_mirror.pdf (flamaster)

           
    oraz na żywo:
    MVI_0024.AVI   (13 MB) MVI_0025.AVI   (13 MB) MVI_0026.AVI   (1.1 MB)

    Oprogramowanie sterownika

    Sterownik LXT posiada cztery tryby pracy:

  • tryb RUN
    Tryb RUN jest domyślnym trybem pracy po sprzetowym resecie procesora lub załączeniu zasilania. Jego aktywnośc sygnalizuje świecenie zielonej diody (D3) na płytce drukowanej urządzenia.
    W trybie RUN sterownik odczytuje wzroce binarne zapamiętane w pamięci EEPROM i zgodnie z układem bitów odczytanego wzorca aktywuje odpowiednie wyjścia sterownika oraz interpretuje i wykonuje ewentualne polecenia wysłane przez łącze szeregowe.
    Tryb RUN może zostać uaktywniony poprzez wysłanie polecenia 'run' zgodnie z opisem w sekcji 'Programowanie LXT'.

  • tryb LOAD
    Tryb LOAD jest uaktywniany jeżeli sterownik odbierze przez łącze szeregowe pierwszą, poprawną komendę 'load'. W tym trybie dane wysyłane przez łącze szeregowe są zachowywane w zewnętrznej pamięci EEPROM, każdy cykl zapisu do pamięci jest sygnalizowany mignięciem czerwonej diody (D4) na płytce drukowanej. Wysłanie jednego z poleceń: 'online', 'demo' lub 'run' powoduje, że LXT opuszcza tryb LOAD i rozpoczyna wykonywanie nowego polecenia.

  • tryb ONLINE
    Tryb ONLINE jest użyteczny, kiedy zachodzi potrzeba natychmiastowej zmiany stanu wyjść sterownika, ale z pominięciem zapisania nowych danych do pamięci EEPROM. Tryb ONLINE jest aktywowany przez pierwszą komendę 'online'. Jeżeli w ciągu kliku sekund od wydania pierwszej komendy 'online' nie nastąpią dalsze, LXT automatycznie przejdzie do trybu RUN. Innym sposobem wyjścia z trybu ONLINE jest wydanie sterownikowi dowolnej, innej komendy. Aktywnośæ trybu ONLINE sygnalizuje świecenie żółtej diody (D5) na płytce sterownika.

  • tryb DEMO
    Tryb DEMO pełni rolę autotestu urządzenia, może też służyć do weryfikacji poprawności podłączenia sterowanych źródeł światła (diod LED, żarówek) bez konieczności programowania sterownika. W tryb DEMO wprowadzamy sterownik poleceniem 'demo', podczas wykonywania demonstracji LXT aktywuje kolejne wyjścia sterujące, po wykonaniu tej sekwencji zapalą się kolejno diody sygnalizacyjne na płytce sterownika. Taka sekwencja demonstracyjna jest powtarzana w nieskończonej pętli, w czasie pokazu sterownik nie odbiera żadnych poleceń przez łącze szeregowe. Jedyną możliwością wyjscia z trybu DEMO jest chwilowe wyłączenie zasilania lub twardy reset procesora.

    Mapa pamięci sterownika (układ danych w EEPROM)

     adres   znaczenie 
     0x000   LO / HI wartość opóźnienia (*) 
     0x002   LO / HI długość zapisanego wzorca (**) 
     0x004   LO / HI pierwsze słowo danych (wzorzec do wyświetlenia) 
     0x006   LO / HI drugie słowo danych 
     0x008   LO / HI i trzecie 
     0x00A   LO / HI i następne... 
    ....
     0x7FE   LO / HI ostatnie możliwe do zapisania 


    (*) - wartość 0x0001 oznacza szybkie wybieranie wzorców z pamięci, 0x0063 (100 dec) - raczej powolne
    (**) - ta lokacja musi zawierać wartość zgodną z ilością zapisanych w pamięci wzorców (słów danych)
    Użyta kostka EEPROM typu 24C16 może zapamietać ( 2048 - 2 - 2 ) / 2 = 1022 różne wzorce do wyświetlenia.

    Programowanie LXT

    Sterownik komunikuje się z komputerem nadrzędnym przy pomocy łącza szeregowego RS232, parametry transmisji to: 9600,8,N,1.
    Odebranie każdej ramki danych (polecenia) sygnalizowane jest mignięciem niebieskiej diody (D2) na płytce sterownika. Aktualnie zaimplementowane jest tylko odbieranie poleceń z komputera nadrzędnego, aczkolwiek elektronika sterownika wspiera komunikację dwustronną (odbieranie i nadawanie danych).

    Sterownik interpretuje i wykonuje następujące polecenia:

  • komenda 'demo'

    składnia:
           ^D!

    działanie:
           wprowadza sterownik w tryb demonstracyjny (DEMO)

  • komenda 'run'

    składnia:
           ^R!

    działanie:
           wprowadza sterownik w tryb sterowania wyjściami zgodnie z zapisanym wzorcem (RUN)

  • komenda 'online'

    składnia:
           ^Odddd!

    parametry:
           dddd – 16-bit słowo danych w formacie szesnastkowym

    przykład:
            ^OAAAA! - stan wyjść:

            ^OF0F0! - stan wyjść:

  • komenda 'load'

    składnia:
           ^Laaadddd!

    parametry:
           aaa – adres (szesnastkowo)) lokacji w pamięci EEPROM do której zostanie zapisana dana
           dddd – dana do zapisu (szesnastkowo) pod wskazaną lokację

    przykład:
            ^L0000010! – ustawia wartość opóźnienia na 0x10 (16 dec)
            ^L0020008! – ustawia długość wzorca do wyświetlenia na 8
            ^L0045555! – ustawia wartość pierwszego wzorca do wyświetlenia (adres 0x004)


    Zalecana sekwencja komend pozwalająca zaprogramowaæ sterownik:

    polecenie 'load' (wzorzec nr 1, zapis pod adres 0x004)
    polecenie 'load' (wzorzec nr 2, zapis pod adres 0x006)
    ....
    polecenie 'load' (wzorzec N, zapis pod ostatni dostępny adres: 0x7FE)
    polecenie 'load' (długość sekwencji /ilość wzorców/, zapis pod adres 0x002)
    polecenie 'load' (ustawienie szybkości wybierania wzorców, zapis pod adres 0x000)
    polecenie 'run'


    Aplikacja programująca sterownik LXT - LedTreeCtrl

    Program LedTreeCtrl jest prostą aplikacją przeznaczoną dla systemu Windows (95/98/2K/XP) pozwalającą ładować dane do sterownika LXT a także sterować jego wyjściami w czasie rzeczywistym, bezpośrednio z poziomu komputera PC.
    Aplikacja komunikuje się z LXT poprzez wybrane przez użytkownika łącze szeregowe RS232, numer portu szeregowego (COM) zapisany jest w pliku konfiguracyjnym (LedTreeCtrl.ini), którego obecności aplikacja oczekuje w tym samym katalogu, gdzie znajduje sie plik wykonywalny LedTreeCtrl.exe.
    Przykładowa zawartość pliku LedTreeCtrl.ini

    ;
    ; plik konfiguracyjny dla LedTreeCtrl 
    ; do komunikacji przez port COM2
    ;
    [serial]
    port = COM2


    Okno główne programu LedTreeCtrl (z załadowanymi danymi demo) przedstawia się następująco:



    Opis przycisków:

     File / Plik
    Wywołuje systemowe okno, pozwalające wskazać do odczytu zapisany w lokalnym systemie plików zbiór danych *.led.
     Load / £aduj
    Naciśnięcie rozpoczyna proces wysyłania danych do LXT. Po zaprogramowaniu sekwencji do wyświetlenia, wysyłane jest polecenie 'run' i sterownik automatycznie rozpoczyna samodzielną pracę.
     Simulation / Symulacja
    Rozpoczyna symulację (prezentację) załadowanego z pliku wzorca.
    Symulacja jest widoczna tylko na ekranie (w oknie aplikacji), ale jeżeli zostanie zaznaczony checkbox 'Online mode', każde wyświetlenie nowego wzorca będzie powodowało wysłanie do LXT adekwatnej komendy 'online'. Pozwala to na sterowanie wyjściami LXT bez potrzeby reprogramowania zapisanej w nim sekwencji sterującej.
     Demo / Demonstracja
    Naciśnięcie powoduje wysłanie do LXT polecenia 'demo'.
    Z punktu widzenia aplikacji LedTreeCtrl, wykonanie tej komendy oznacza utratę łączności z LXT aż do czasu twardego resetu sterownika.
     Delay / OpóŸnienie
    Naciśnięcie tego przycisku wysyła do LXT polecenie 'load' z adresem odpowiadającym ustawianiu szybkości wybierania wzorców z pamięci (adres 0x000). Jako parametr (dana do zapisania) pobierana jest wartość dziesiętna z pola edycyjnego obok przycisku. Zalecane do wpisywania wartości to: 1...100, więcej oczywiście można, ale jest to kompletnie bez sensu.
     Exit / Wyjœcie
    Po jego naciśnięciu aplikacja zamyka używany port szeregowy, zwalnia zaalokowane zasoby systemowe i kończy pracę.


    Format pliku z danymi (*.led)

    Pliki danych aplikacji LedTreeCtrl mogą zawierać dwa typy rekordów:

  • rekord szybkości wybierania wzorów (występuje tylko raz)

    składnia:
           ;@nnn

    parametry:
           nnn – wartość dziesiętna (1..100)

    przykład:
           ;@50

  • rekord definicji wzoru do wyświetlenia (wystepuje wielokrotnie)

    składnia:
           >cccccccccccccccc

    parametry:
           c – znak ASCII odpowiadający bitowi słowa danych

    przykład:
           >..aa..aa..aa..aa będzie widoczne jako:

    Znak '.' (kropka) - oznacza zero logiczne (odpowiednie wyjście nie będzie aktywne), jakikolwiek inny znak ASCII oznacza wyjście aktywne. Kolejność bitów jest MSB-LSB - od najstarszego do najmłodszego.

    Aby plik z danymi był bardziej czytelny, można w nim używać komentarzy. Linie, które mają pełnić rolę komentarza zaczynamy od ; (średnik).


    Przykładowa zawartość pliku danych (test.led)

    ;test.led
    ;
    ;cała sekwencja będzie dość szybka
    ;opóźnienie na 1
    ;@1

    ; "linijka" hex
    ;FEDCBA9876543210
    >w..............w
    >.w............w.
    >..w..........w..
    >...w........w...
    >....w......w....
    >.....w....w.....
    >......w..w......
    >.......ww.......
    >.......ww.......
    >......w..w......
    >.....w....w.....
    >....w......w....
    >...w........w...
    >..w..........w..
    >.w............w.
    >w..............w
    ;


    A to kilka gotowych, chyba całkiem sympatycznych wzorków...
    demo1.led demo2.led demo3.led
    demo4.led demo5.led mix.led

    Wersje źródłowe oprogramowania:
    led_tree_avr.zip  (kod drivera I2C - Bray++)
    LedTreeCtrl_src.zip   (klasy CLed,CHyperLink,CSerialPort pochodzą z zasobów www.codeguru.com)

    Komplet binariów dla AVR i PC:
    (plik LedTreeCtrl.ini ustawiony na COM1, biblioteka MFC linkowana statycznie)
    led_tree.zip

    Zasilanie sterownika:
    Do zasilania LXT potrzeba zasilacza prądu stałego o napięciu 9..12V (ale nie musi być stabilizowany) i o wydajności prądowej co najmniej 200mA.

    Z łezką w oku
    To archiwalne zdjęcia i filmik wykonane podczas pierwszych prac nad tą zabawką,
    datowane na listopad 2004, tyle lat....

       
       
       

    live_leds.avi   (1.9 MB)



  • Natasza Biecek 2004-2017/~, e-mail