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.

atiny 13 - połączenie kilku modułów w sterownik oświetlenia

26 Wrz 2012 17:56 8958 99
  • Poziom 13  
    Witam kolegów

    Zostałem posiadaczem kilkunastu modułów Led z procesorem atiny13 (schemat modułu poniżej)
    atiny 13 - połączenie kilku modułów w sterownik oświetlenia atiny 13 - połączenie kilku modułów w sterownik oświetlenia

    Jest on już zaprogramowany tak ze po podaniu napięcia dioda zapala się, i powoli gaśnie i po ok. 5 sek. znowu to samo.

    Wpadł mi do głowy pomysł by połączyć 15 takich modułów (Jeden moduł na jeden stopień schodów) i zrobić tzw. inteligentne oświetlenie schodów.

    Tzn. Gdy zostaną otworzone drzwi na dole schodów to diody zapalają się płynnie z dołu na górę i po np. 2min gasną od dołu do góry też płynnie. I na odwrót gdy na górze schodów czujnik wykryje ruch, to zapalają się płynie od góry do dół i po ok. 2min. gasną płynie z góry na dół.

    Wiem że to się wiąże z nowym programem, ale mam to nieco ułatwione bo na każdym tym module znajdują się wyprowadzenia pinów mosi, miso, sck i reset.

    Moje pytanie brzmi czy jest możliwe osiągnięcie tego tylko ze strony programowej (czyli jakiś prosty program który się zmieści w pamięci) i czy będzie potrzebny jeszcze jakiś sterownik ?

    P.S Poprawiłem opis wygaszania na poprawny.
  • Poziom 13  
    Kolego wydaje mi się że ten Uc jest po to by spełniać funkcje płynnego rozświetlania i wygaszania, oraz cyklicznemu załączania co 5 sek.
    Po za tym to nie ja konstruowałem te moduły, tylko dostałem i to sporo
  • Poziom 19  
    Skoro nowy program a widać wolne wyprowadzenia więc można zamiast jednej diody podłączyć trzy. Dwa porty IO przeznaczyć na komunikację między modułami (I2C ?). RESET bym zostawił w spokoju ale w zasadzie też można by go użyć na czwartą diodę. Dla 15 stopni wystarczyłoby 5 modułów lub nawet może 4. Nie wiem tylko czy 1kB pamięci wystarczy na obsługę I2C i softwarowe PWM bo sprzętowe są tylko 2.
  • Poziom 13  
    Rozumiem kolego perlo, ale po co wykorzystywać 4 czy tam 5 modułów skoro mam ich naprawdę dużo i wydaje mi się że to zmniejszy możliwość małej pamięci, bo wystarczy że jeden moduł poda sygnał na drugi i tak po kolei i na odwrót ostatni poda do poprzedniego itd. tylko jak to zrealizować ?
  • Poziom 19  
    Hmm... to może tak. Dwie linie sygnałowe jedna wyzwalana od góry druga wyzwalana od dołu. Każdy z modułów podłączony po jednym porcie wejściowym do każdej z linii. Każdy moduł ma program z opóźnieniem początku rozjaśniania i wygaszania. Oczywiście opóźnienia zależą od kierunku wyzwalania. Pogram w kontrolerach taki sam, opóźnienia zapisane w EEPROM w zależności od numeru stopnia. Idea jest taka, że po podaniu sygnału na wejście kontroler odliczy czas zapisany w EEPROM i rozpocznie rozjaśnianie diody, po rozjaśnieniu do 100% odliczy czas świecenia a następnie diodę wygasi i przejdzie w stan czekania na kolejny sygnał. Wystarczy w poszczególnych kontrolerach zapisać różne opóźnienia i gotowe. Jeszcze trzeba obsłużyć sytuację kiedy wyzwolenie nastąpi w czasie gdy coś jeszcze świeci.
  • Poziom 13  
    No to szkoda , w takim razie kolego dasz rade to przedstawić w postaci schematu ?
  • Poziom 19  
    Na schemacie są trzy moduły ale powinno być ich 15. Do połączeń między modułami potrzebujesz 4 żyły. VCC, GND, wyzwolenie z góry, wyzwolenie z dołu. Resztę załatwia program kontrolera.
    atiny 13 - połączenie kilku modułów w sterownik oświetlenia
  • Poziom 13  
    dzięki kolego, jeszcze jak możesz załączyć plik sch to pokaże ci moją koncepcje

    P.S kolego skąd Uc będzie wiedział że zostanie wyzwolony przełącznik od góry a nie od dołu ?

    Dodano po 9 [minuty]:

    przepraszam kolegę źle popatrzyłem na schemat myślałem że oba przełączniki są umieszczone na jednej lini
  • Poziom 19  
    Dołączyłem do poprzedniego postu
  • Poziom 13  
    Ok mam dzięki ;)
    Moja koncepcja jest taka by do pierwszego oraz ostatniego modułu połączyć przełączniki i gdy przełącznik zostanie wyzwolony to po 1 sek. zaczyna się rozjaśniać dioda i gdy osiągnie 100% jasności przekazuje do następnego itd, aż dojdzie do ostatniego i gdy ostatni osiągnie 100% jasności odlicza ok 2 min. i wygasza poprzednią i oczywiście w druga stronę na odwrót .

    atiny 13 - połączenie kilku modułów w sterownik oświetlenia

    głownie chodzi mi o to by do każdego modułu wgrać taki sam program :)
  • Poziom 19  
    No twój pomysł właśnie zakłada różne programy w kontrolerach bo skąd ostatni ma wiedzieć że jest ostatni i że ma odliczyć te 2min a potem odbić z powrotem? No chyba że zużyjesz jeszcze jeden pin na zworę która ustawi moduł jako końcowy to wtedy tak. Mój pomysł zakłada tylko różnice w zawartości EEPROM natomiast sam program jest jeden we wszystkich kościach taki sam.
  • Poziom 13  
    No powiem ci kolegoo ze z tą zworką to nie taki głupi pomysl, tylko jak to zrealizowa, tak ze pierwszy modol ma zworke i ostatni tez, dobrze mysle?
  • Poziom 19  
    No dokładnie tak. Pierwszy i ostatni jedną nóżkę przez zworkę do masy i odpowiednie sprawdzenie w programie. Jak masz stan niski to moduł krańcowy jak wysoki to moduł pośredni.
  • Poziom 14  
    Najłatwiej jest wziąć większy mikrokontroler i do niego podłączyć ledy, albo ten attiny 13 i scalak 4017.
  • Poziom 13  
    Kolego Benson000 ale po co ten licznik 4017 skoro jak wspomniałem wcześniej posiadam kilkanaście tych modułów i chce to rozwiązać ze strony programowej, do tego celu właśnie siedzę i uczę się bascoma
  • Poziom 14  
    Chodzi mi o to, że wtedy mógłbyś do każdego modułu wgrać ten sam program rozjaśniający i ściemniający, który włączał by się po impulsie z 4017.
    Do 4017 też przydałby się jakiś mały uC, który dawałby impulsy.
  • Poziom 13  
    Rozwiń kolego swoją wypowiedź, bądź narysuj schemat jak możesz, bo na razie nie mam pojęcia o co ci chodzi.
  • Poziom 14  
    Oto schemat blokowy, narysowałem w paincie bo mam program na drugim komputerze.
    atiny 13 - połączenie kilku modułów w sterownik oświetlenia
    Gdy drzwi zewrą styki, to avr puści do cd4017 dziesięć impulsów. Potem 4017 rozdzieli te impulsy po kolei na każdy moduł. W modułach będzie ten sam program, ktory je rozjaśni, a potem ściemni. Rozumiesz?
  • Poziom 19  
    Dobry pomysł. Ja proponuję pójść dalej. Wyrzuć CD4017 i moduły a zostaw drzwi i jeden AVR ( np. ATMega8 za 5PLN) a będzie to o co chodzi.
  • Poziom 30  
    ogor11 napisał:
    Ok mam dzięki ;)
    Moja koncepcja jest taka by do pierwszego oraz ostatniego modułu połączyć przełączniki i gdy przełącznik zostanie wyzwolony to po 1 sek. zaczyna się rozjaśniać dioda i gdy osiągnie 100% jasności przekazuje do następnego itd, aż dojdzie do ostatniego i gdy ostatni osiągnie 100% jasności odlicza ok 2 min. i wygasza poprzednią i oczywiście w druga stronę na odwrót .

    atiny 13 - połączenie kilku modułów w sterownik oświetlenia

    głownie chodzi mi o to by do każdego modułu wgrać taki sam program :)


    ...i ta koncepcja wydaje się być najbardziej rozsądna. Kwestia tylko automatycznego przeprogramowywania wejść sterujących, bo przykładowo w jedną stronę po wciśnięciu S1 będzie ok, a co jak w tym czasie S2 dostanie impuls (nawet nie koniecznie w tym samym czasie) - przecież to wyjście... :-)
  • Poziom 13  
    Cytat:
    Dobry pomysł. Ja proponuję pójść dalej. Wyrzuć CD4017 i moduły a zostaw drzwi i jeden AVR ( np. ATMega8 za 5PLN) a będzie to o co chodzi


    Nie chce kupować żadnej ATmegi 8 bo mam tych modułów dużo i przydało by się je wykorzystać, by nie leżały w pudełku i się kurzyły.

    Cytat:
    Oto schemat blokowy, narysowałem w paincie bo mam program na drugim komputerze.
    atiny 13 - połączenie kilku modułów w sterownik oświetlenia

    Gdy drzwi zewrą styki, to avr puści do cd4017 dziesięć impulsów. Potem 4017 rozdzieli te impulsy po kolei na każdy moduł. W modułach będzie ten sam program, ktory je rozjaśni, a potem ściemni. Rozumiesz?


    Tylko że to musi działać także w drugą stronę ?

    Dodano po 2 [minuty]:

    SylwekK napisał:
    ogor11 napisał:
    Ok mam dzięki ;)
    Moja koncepcja jest taka by do pierwszego oraz ostatniego modułu połączyć przełączniki i gdy przełącznik zostanie wyzwolony to po 1 sek. zaczyna się rozjaśniać dioda i gdy osiągnie 100% jasności przekazuje do następnego itd, aż dojdzie do ostatniego i gdy ostatni osiągnie 100% jasności odlicza ok 2 min. i wygasza poprzednią i oczywiście w druga stronę na odwrót .

    atiny 13 - połączenie kilku modułów w sterownik oświetlenia

    głownie chodzi mi o to by do każdego modułu wgrać taki sam program :)


    ...i ta koncepcja wydaje się być najbardziej rozsądna. Kwestia tylko automatycznego przeprogramowywania wejść sterujących, bo przykładowo w jedną stronę po wciśnięciu S1 będzie ok, a co jak w tym czasie S2 dostanie impuls (nawet nie koniecznie w tym samym czasie) - przecież to wyjście... :-)


    A ma kolega pomysł jak to zrealizować, oczywiście od strony programu ?
  • Poziom 19  
    Kolego ogor11. Uwaga o ATMega8 była do Benson000 i była raczej sarkastyczna.
    Co do powyższego to nóżki 5 i 6 muszą być wejściami a impuls sterujący jest wyzwalany tylko na chwilę na wyjściu przeciwnym do tego z którego kontroler dostał sygnał. Czyli jeżeli potrzebujesz wyzwolić kolejny moduł to w poprzedniku zmieniasz wejście na wyjście puszczasz impuls i natychmiast zmieniasz z powrotem na wejście. W ten sposób wszystkie moduły nasłuchują ciągle. Osobną kwestią jest reakcja na taki impuls kiedy kontroler jest właśnie w trakcie obsługi innego impulsu. Chwila zadumy każe jednak zadać ci pewne pytanie. Dlaczego chcesz aby diody gasły w odwrotnej kolejności do kierunku poruszania się przechodnia? Jeżeli idę pod górę to diody powinny zapalać się od dołu do góry i gasnąć od dołu do góry. Wtedy zadanie staje się wręcz trywialne i wszystkie kości są zaprogramowane identycznie. Odpada również problem nałożonych sygnałów wyzwalających bo kostka dostając kolejny sygnał w zależności od stanu zapalanie/świecenie/gaszenie może rozpocząć kolejny taki cykl w dowolnym momencie jego trwania lub obsłużyć taką sytuację inaczej.
  • Poziom 13  
    Rozumiem kolego perlon, źle zrozumiałem o tej ATmedze 8 za co przepraszam i zapomnijmy o tym. A co do kierunku przeciwnego to chodzi mi o wygaszanie w tym stylu

    Link



    Cytat:
    Jeżeli idę pod górę to diody powinny zapalać się od dołu do góry i gasnąć od dołu do góry.


    przepraszam źle cały czas to tłumaczyłem w poprzednich postach, ale chodziło mi cały właśnie o takie wygaszanie.
  • Poziom 19  
    No to jak mówiłem jest całkiem inna sprawa. Schemat masz poprawny. Każdy z modułów musi nasłuchiwać na dwóch pinach. Wyzwolenie na jednym z nich uruchamia obsługę diody. Niezależnie od tej obsługi po określonym czasie należy zmienić funkcję drugiego pinu na wyjście puszczenie impulsu dalej i powrót na nasłuch. To wszystko.
  • Poziom 13  
    Kolego twój czy mój schemat ?
  • Poziom 19  
    No twój
    ogor11 napisał:
    Ok mam dzięki ;)
    Moja koncepcja jest taka by do pierwszego oraz ostatniego modułu połączyć przełączniki i gdy przełącznik zostanie wyzwolony to po 1 sek. zaczyna się rozjaśniać dioda i gdy osiągnie 100% jasności przekazuje do następnego itd, aż dojdzie do ostatniego i gdy ostatni osiągnie 100% jasności odlicza ok 2 min. i wygasza poprzednią i oczywiście w druga stronę na odwrót .

    atiny 13 - połączenie kilku modułów w sterownik oświetlenia


    Tylko opis działania faktycznie wprowadził niezłe zamieszanie.
  • Poziom 13  
    Dobrze rozumiem, wiem ze trochę to namieszało, ale cóż zdarza się niestety nie pierwszy i pewnie nie ostatni raz.

    To jak już wiadomo o co chodzi, to trzeba program napisać, tak jak już pisałem uczę się i na razie tylko próbuje napisać kod udzielnie do każdej funkcji.

    Jak na razie udało mi się rozjaśniać powoli diodę i nie mogę zrobić tak by gasła także powoli, może ktoś pomoże

    Code:
    regfile = "attiny13.dat"
    

    $crystal = 1200000
    $hwstack = 32
    $swstack = 8
    $framesize = 16

    Config Portb.0 = Output
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 8

    Dim A As Byte

    Do

    For A = 1 To 255
    Pwm0a = A
    Waitms 4

    Loop
    End


    na tym kodzie po podaniu napięcia dioda ładnie się rozjaśnia.

    Następnie próbowałem tak by po podaniu napięcia dioda się rozjaśniła i ściemniała i tak w kółko

    Code:
    regfile = "attiny13.dat"
    

    $crystal = 1200000
    $hwstack = 32
    $swstack = 8
    $framesize = 16

    Config Portb.0 = Output
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 8

    Dim A As Byte

    Do

    For A = 1 To 255
    Pwm0a = A
    Waitms 4

    Next = A
    For A = 255 To 1 Step -1
    Pwm0a = A
    Next
    Loop
    End


    Ale efekt niestety jest tak jak w kodzie pieszym, gdzie jest błąd, co robię źle, przypominam że to moje jedne z pieszych kroków w bascomie.

    P.S tak z innej beczki, oryginalnie z tych modułach dioda jest podpięta pod pin 2, a tego co wyczytałem atiny13 nie ma obsługi pwm na tym pinie, a jest zrealizowane rozjaśnianie i ściemnianie diody. Jak to może być zrealizowane ?
  • Poziom 24  
    ogor11 napisał:
    P.S tak z innej beczki, oryginalnie z tych modułach dioda jest podpięta pod pin 2, a tego co wyczytałem atiny13 nie ma obsługi pwm na tym pinie, a jest zrealizowane rozjaśnianie i ściemnianie diody. Jak to może być zrealizowane ?


    Poczytaj o programowym PWM. Można go zrealizować na dowolnym pinie procesora.

    Po drugie popatrz sobie na swój kod. Kopiujesz i wklejasz wszystko jak popadnie. Po co ci podwójne deklaracje zmiennej A ?

    Po co podwójne:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    ?

    Dlaczego jeśli chcesz sobie rozjaśniać i ściemnieć cyklicznie leda to nie zrobisz sobie po prostu jednej pętli w której inkrementujesz zmienną i podstawiasz ją pod wybrane wyjście PWM a potem dekrementujesz i także podstawiasz. Nic więcej nie musisz kombinować. A jak chcesz zrealizować PWM na dowolnym pinie to zaprzęgnij do tego Timer i po sprawie. Jest tego setki przykładów na forum.
  • Poziom 13  
    tu nic nie było robione metodą kopiuj, wklej. Po prostu wzorowałem się na przykładach znalezionych na forum, niestety nie znalazłem żadnego pod atiny13 więc pewnie dlatego ta podwójna zmienna. Jutro sobie o tym poczytam, tylko nie wiem czy będzie mi to potrzebne przy moim projekcie
  • Poziom 24  
    ogor11 napisał:
    Jutro sobie o tym poczytam, tylko nie wiem czy będzie mi to potrzebne przy moim projekcie

    No skoro musisz zmienić oprogramowanie w twoich modułach to chyba oczywiste jest że jeśli zamierzasz płynnie regulować jasność a dany pin nie oferuje funkcji sprzętowego PWM to musisz napisać programowe. Chyba troszkę porywasz się na razie z motyką na słońce. Chcesz zbudować prom kosmiczny a na razie masz tylko dwa gwoździe i deskę. Może zacznij najpierw ćwiczyć na jednym z tych modułów i opanuj jak pisałem programowe pwm (a w zasadzie chyba powinieneś zacząć od podstaw programowania). Potem zajmij się wejściami i wyjściami. Dodatkowo każdy z tych modułów może być wzbudzany poprzez zewnętrzne przerwania co daje już nieograniczone mozliwości.