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.

Switch 1-kanałowy DMX [Atmega 8][BASCOM]

djfarad02 27 Cze 2012 02:07 13880 13
  • Switch 1-kanałowy DMX [Atmega 8][BASCOM]

    Ostatnio zaprojektowałem na potrzeby dyskoteki switch DMX. Wykonałem 8 sztuk, jak na razie pracują bez zarzutu. Nie publikuję płytki, bo wymaga dopracowania, a nad publikacją wsadów i źródła się zastanowię. Co do PCB, to i tak zaraz dostaną mi się pewnie słuszne baty za zbyt małe odstępy części sieciowej od niskonapięciowej. Zdjęcie tablicy też nie razi profesjonalizmem, a raczej trąci prowizorką, więc proszę powstrzymać się od uszczypliwych komentarzy. Nie była to robota na zlecenie.
    Za to być może przestaną być wieszane wiecznie psy na Bascomie - ten projekt powstał w całości w środowisku BASCOM-AVR. Program zajmuje pół procka, oprócz tego pozostało dużo wolnego czasu CPU.

    Układ wykonawczy - triak z dużym zapasem prądu (w myśl wysokiej niezawodności). Dodatkowo możliwa dzięki temu praca chwilowa z dużo większym obciążeniem

    Sygnał DMX odbiera UART Atmegi, sposób konfiguracji sprzętowego uartu do pracy przy sygnale DMX znalazłem w internecie. Przedstawiam fragment kodu odpowiedzialny za konfigurację uartu oraz obsługę przerwania. Dodatkowe zmienne to moje rozwiązania poprawiające niezawodność, np. sprawdzanie poprawności pakietów DMX.


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Od razu wyjaśniam, czemu jest:
    If Kanal = Adresdmx Then If Dmxbad = 0 Then Odbior = Odb
    zamiast
    If Kanal = Adresdmx AND Dmxbad = 0 Then Odbior = Odb
    Przy dwóch prostych warunkach kompilator generuje mniej kodu niż przy jednym warunku złożonym.

    Schemat:

    Switch 1-kanałowy DMX [Atmega 8][BASCOM] Switch 1-kanałowy DMX [Atmega 8][BASCOM] Switch 1-kanałowy DMX [Atmega 8][BASCOM]

    Wyświetlacz sterowany bezpośrednio z portów z multipleksowaniem. W każdej chwili świeci tylko jeden segment - takie rozwiązanie pozwoliło pozbyć się worka rezystorów od każdej katody wyświetlacza na konto jednego w anodzie. Wyświetlacz z racji takiego sposobu sterowania musi być superjasny, ponieważ odświeżenie całego odbywa się w 24 cyklach, tak więc każdy segment świeci ze średnim prądem wynoszącym 1/24 prądu rezystora ograniczającego. Zdobyte na allegro 3 cyfrowe czerwone wyświetlacze z pełnym powodzeniem się sprawdziły, dając dobrą jasność.

    Obsługa klawiatury obejmuje wszystkie możliwe dziwne przypadki, zabezpieczyłem przed krótkimi szpilkami zakłóceń bądź bardzo wyrobionymi przyciskami (zwłoka stwierdzenia przyciśnięcia oraz zwolnienia).

    Ustawianie adresu - dla wygody trzy przyciski, każdy zmienia inną cyfrę. Adres zapamiętywany w dwóch miejscach EEPROMU wraz z sumą kontrolną w celu podniesienia niezawodności

    Tryb PROT 10% - włączenie poprzez przytrzymanie przycisku. Zapewnia pracę z zabezpieczeniem przed włączeniem wyjścia na dłużej niż 10 s w przeciągu około 80 sek. Urządzenie oblicza współczynnik wypełnienia, tak więc seria krótkich włączeń ale w małych odstępach czasu również spowoduje zadziałanie zabezpieczenia. Tryb ten przydatny jest np. podczas pracy z blinderami.

    Tryb manual - można ręcznie sterować wyjściem oraz zdefiniować, jaki ma być domyślny jego stan przy braku sygnału DMX.

    - sterowanie DMX 512 1 kanał tryb on/off (brak dimmera)
    - praca ciągła 400W (triak bez radiatora)
    - praca z wypełnieniem 10% - 2000w (triak bez radiatora)

    Obudowy wyglądają średnio - chodziło o szybkość powstania, a nie o estetykę.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • #2 27 Cze 2012 17:42
    63404
    Użytkownik usunął konto  
  • #3 27 Cze 2012 17:50
    adversus
    Poziom 26  

    Witam,

    na wstepie prosze o wyrozumialosc moderatorow, nie mam polskich liter na klawiaturze

    a wracajac do tematu, bardzo fajne rozwiazanie, a jako ze sie zawodowo zajmuje miedzy innymi DMX'em tymbardziej robi wrazenie autorskie opracowanie, projekt wykonany calkiem starannie, bez zastrzezen...

    ps. czy wzorowales sie na kodzie z tej strony?
    http://www.gerold-online.de/cms/uc-projekte/microcontroller/dmx512-empfaenger.html
    jest tu opis zarowno procedur odbioru DMX'a jak i nadawania opisane wlasnie w Bascomie :) no i milo by bylo udostepnic zrodlo, lub jego czesci odpowiedzialne za np. wyswietlanie multipleksowe, zawsze mozna by bylo wzorowac sie na nim...

  • #4 27 Cze 2012 18:33
    dktr
    Poziom 18  

    Cytat:
    Jest 7 segmentów i kropka, czyli jak zapalisz wszystko to segmenty muszą się podzielić tym prądem. Takie sterowanie nie jest zbyt poprawnym rozwiązaniem.


    W każdej chwili z tego co rozumiem świeci 1 segment więc nie ważne co wyświetlamy zawsze będzie tak samo jasno. Świetna sprawa, muszę to sprawdzić :)

  • #6 27 Cze 2012 22:58
    63404
    Użytkownik usunął konto  
  • #7 28 Cze 2012 00:17
    djfarad02
    Poziom 17  

    Niestety mało Twoja wypowiedź ma wspólnego z praktyką. Wyświetlacze o podwyższonej wydajności są bardzo dobrze widoczne przy takim sterowaniu, zresztą dowodzi tego zdjęcie. Średni prąd na segment wypada ponad 1mA, co dla nowoczesnych ledów jest w zupełności wystarczające.

    Projekt wyświetlacza matrycowego o którym piszesz zawierał najtańsze niskowydajne diody, stąd problemy tamtego autora.

  • #8 28 Cze 2012 12:21
    daniel6662
    Poziom 20  

    Witam
    Dlaczego zamiast wykonać pojedynczy wielokanałowy switch-pack, zrobiłeś to w postaci jedno kanałowych "klocków"?
    Fajnym dodatkiem była by możliwość przełączenia się ze switch-a na dimmer, miałbyś w tedy jeden układ który mógł by pełnić dwie różne funkcje w zależności od potrzeb.
    Co do wieszania psów na bascomie, to są one wieszane właśnie za to że kod wynikowy jest bardzo duży. Nie jestem przeciwnikiem Bascoma, ale gdy ja robiłem swojego switch-packa 10 kanałowego z adresowaniem na dip-e, to soft napisany w C zajął tylko 786B pamięci w procku, gdyby dołożyć obsługę przycisków i wyświetlacza zapewne rozmiar nie przekroczył by 2kB, a w Twoim przypadku zajmuje pół procka.
    Poza tym projekt mi się podoba.

    Pozdrawiam

  • #9 28 Cze 2012 17:33
    djfarad02
    Poziom 17  

    Witam, wykonałem jednokanałowe z dwóch powodów - żeby zacząć od mniejszego a po drugie, kilka z nich jest rozrzuconych w różnych miejscach lokalu. Centralny switchpack wymusiłby ciągnięcie dodatkowych kabli 230V.

    Z możliwością przełączania na dimmer - dobry pomysł, należałoby zmienić w tym celu optotriak i dodać obwód detekcji zera

    W kwestii wielkości kodów wynikowych - nie przeczę, że C jest bardziej oszczędne ale zgrabne korzystanie z Bascoma też daje zadowalające rezulataty.
    Tak na marginesie - oprogramowanie prezenetowanego projektu odchudzone o obsługę wyświetlacza, pamięci, przycisków oraz bez algorytmów testowania poprawności większej serii pakietów DMX, bez trybów z wypełnieniem i kilku innych udoskonaleń zajmuje po kompilacji 488 bajtów a też można go używać np z dip switchem właśnie.

    Trzeba mieć na uwadze fakt, że najwięcej kodu pożerają różnego rodzaju zabezpieczenia oraz zmyślna obsługa peryferiów. Obsługa przycisków - zgoda jak działają to działają, ale mało kto bierze pod uwagę przypadki wyrobionych microswitchy. Bezbłędne działanie w razie częściowych uszkodzeń bądź dużych zakłóceń dopiero pozwala stwierdzić o konstrukcji, że jest udana - zarówno od strony sprzętowej jak i programowej

  • #10 28 Cze 2012 21:14
    marf41
    Poziom 11  

    djfarad02 napisał:
    oprogramowanie prezenetowanego projektu odchudzone o obsługę wyświetlacza, pamięci, przycisków oraz bez algorytmów testowania poprawności większej serii pakietów DMX, bez trybów z wypełnieniem i kilku innych udoskonaleń zajmuje po kompilacji 488 bajtów

    ... Czy coś zostaje poza odbiorem DMX i przełączaniem?

    djfarad02 napisał:
    Obsługa przycisków

    Tak z czystej ciekawości, co się kryje pod tym terminem? Czy jest to coś poza debouncing'iem? Jeżeli tak, nie lepiej / prościej byłoby zrobić to sprzętowo? W tym projekcie przyciski nie są chyba tak krytyczne...

    Poza tym, niezły projekt. Znikomy procent ceny w porównaniu do rozwiązań komercyjnych. Chociaż pokusiłbym się o dodanie ściemniacza, bo różnice niewielkie, a możliwości - bez porównania.

  • #11 29 Cze 2012 02:23
    djfarad02
    Poziom 17  

    Cytat:

    ... Czy coś zostaje poza odbiorem DMX i przełączaniem?

    Nie pozostaje praktycznie nic, obsługa samego DMX w najprostszej postaci nie wymaga wielu linni kodu :)

    Cytat:

    Tak z czystej ciekawości, co się kryje pod tym terminem? Czy jest to coś poza debouncing'iem? Jeżeli tak, nie lepiej / prościej byłoby zrobić to sprzętowo? W tym projekcie przyciski nie są chyba tak krytyczne...

    Poza tym, niezły projekt. Znikomy procent ceny w porównaniu do rozwiązań komercyjnych. Chociaż pokusiłbym się o dodanie ściemniacza, bo różnice niewielkie, a możliwości - bez porównania.


    Pisząc obsługa przycisków mam na myśli np niereeagowanie na bardzo krótkie szpilki bądź też właściwe wykrywanie dłuższego przyciśnięcia w przypadku przełącznika, który po prostu nie łączy i może generować stany chwilowe podczas przytrzymywania go.

    Co do ceny urządzenia - przy samodzielnym wykonaniu faktycznie przystępna, zwłaszcza że przeróbka na urządzenie np 4 kanałowe nie podniesie znacząco kosztów. Pracuję na co dzień przy projektowaniu i produkcji elektroniki i wiem, że niestety mimo takiej ceny ciężko byłoby rzy realnych marżach pośredników i kosztach wytworzenia (robocizna, podatki) konkurować cenowo z droższymi konstrukcjami będącymi już w sprzedaży

  • #12 30 Cze 2012 15:51
    marf41
    Poziom 11  

    djfarad02 napisał:
    Pisząc obsługa przycisków mam na myśli np niereeagowanie na bardzo krótkie szpilki bądź też właściwe wykrywanie dłuższego przyciśnięcia w przypadku przełącznika, który po prostu nie łączy i może generować stany chwilowe podczas przytrzymywania go.

    Nie prościej dać kondensator i zrobić filtr RC?

  • #13 01 Lip 2012 00:27
    Wojtek001
    Poziom 15  

    Zastosowanie kondensatora jako zabezpieczenie przed drganiem styków nie wydaje mi się zbyt dobrym pomysłem ponieważ gdy przycisk zostanie puszczony , procek będzie "myślał" jeszcze przez pewien czas (dopóki ten kondensator się nie rozładuje) że przycisk jest wciśnięty.

    Sam programuje w BASCOMIE ale nigdy nie używam gotowego polecenia "debounce" (czy jak to się tam nazywało), ponieważ (podobnie jak polecenia z serii wait) zatrzymuje program. Efekt drgania styków eliminuje jednak zawsze programowo - najczęściej na bazie inkrementacji jakiś zmiennych.

  • #14 19 Sie 2012 18:20
    DjDaniel11
    Poziom 27  

    Ok. Projekt w porządku, jednak za bardzo przejmujecie się problemami od przycisków, gdzie tak naprawdę jest to w tym wypadku najmniej ważne. Dużo ważniejsze są zakłócenia od linii DMX. I tutaj, bardzo ważne są kable (wraz ze złączami).

    Co do dorobienia opcji dimmera, to nie jest to takie proste jak się pisze. A przynajmniej nie takie tanie. Oprócz układu detekcji zera, należy zastosować filtr przeciwzakłóceniowy. Ponieważ, przy wypełnieniu różnym od 0 i 100%, będzie słychać w nagłośnieniu charakterystyczne "brumienie". Niestety dużo tańszych dimmerów, takich filtrów nie posiada, a później właśnie ludzie mają problemy.

    Sam aktualnie skończyłem prace (teoretycznie, pisanie programu itd) nad małą przystawką na Attiny13. Mianowicie, przystawka posiada wyświetlacz 3 cyfrowy, oraz 2 lub 3 przyciski. Wpina się ją bezpośrednio w miejsce dip switchy, nie ingerując w urządzenie. (Oczywiście jeszcze trzeba podciągać zasilanie logiki).