Elektroda.pl
Elektroda.pl
X
Relpol
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATMEGA8][C] - Sterowanie oświetleniem - włączniki dzwonkowe

marian_bieda 15 Gru 2012 23:04 4242 25
  • #1 15 Gru 2012 23:04
    marian_bieda
    Poziom 9  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Chcialbym sie podpiac pod temat bo raczej podobne zagadnienie...
    Nie rozumiem czemu zaznaczony fragment w funkcji is_pressed() "zawiesza calosc" - nic sie nie swieci, nie reaguje na zaden przycisk...

    Opis calosci: Mam 7 przyciskow i 8 diod. Jedno wcisniecie odpala diode drugie ją gasi. Jest jeden przycisk co obslusguje 3 tryby (1. odpala jedna diode, 2 odpala druga, 3 gasi obie ).

    To wszystko ladnie mi dziala.
    Zachcialo mi sie dopisac funkcjonalnosc ktora zgasi wszystkie diody jesli przytrzymam ktorykowliek przycisk np 2 sek. Za cholere niemoge sie doszukac bledu. Normalnie korzystalem z tego "while" z pustym blokiem jako przeczekanie na
    puszczenie przycisku - dziala poprawnie. Wydaje mi sie ze ten delay rabi cos wiecej niz mi sie wydaje. Programownie znam dosc dobrze ale AVRy ucze sie hobbistycznie od tygodnia.

    0 25
  • Relpol
  • #2 15 Gru 2012 23:19
    BlueDraco
    Specjalista - Mikrokontrolery

    Standardowa odpowiedź: brak atrybutu volatile.

    A tak poza tym, program napisany fatalnie. Masz mnóstwo zmiennych, które de facto są stałymi, więc nie powinny być zmiennymi. Masz też zamiłowanie do procedur zawierających jedną instrukcję. Twój program większość czasu spędza na wywoływaniu i powrotach z procedur.

    Proste maski bitowe przekazujesz przez adres zamiast przez wartość. Po co?

    0
  • #3 15 Gru 2012 23:37
    marian_bieda
    Poziom 9  

    Dzieki za podpowiedz, ale cos nie bardzo z tym 'volatile', ustawilem 3zmiennym ten atrybut i nic nie daje...

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Maski bitowe - rozumiem ze masz na mysli... PORTD PIND to myslalem ze musze przez adres jesli chce miec ich aktulany rzeczywisty stan lub chce je zmienic.

    Bo jesli przekaze stan przycisku przez wartosc to dostane jego kopie wiec niema co liczyc na czekanie az sie zmieni (bo kopia si enie zmieni).[/code]

    0
  • #4 15 Gru 2012 23:45
    BlueDraco
    Specjalista - Mikrokontrolery

    bool is_pressed(volatile char *i_btn, char *i_port)

    Adres portu oczywiście jest adresem, ale maska bitowa - to tylko stała wartość, więc tu akurat lepiej byłoby dać:

    bool is_pressed(volatile char *i_btn, char i_port)

    No i dlaczego bool, a nie standardowe _Bool ?

    No dobra, czepiam się, ale w imię słusznej idei. ;)

    0
  • Relpol
  • #5 16 Gru 2012 00:08
    marian_bieda
    Poziom 9  

    BlueDraco napisał:

    bool is_pressed(volatile char *i_btn, char *i_port)


    Tak tez nie pomoglo, ale nalepilem tego volatile jeszce przy *i_port i wszystkich deklaracjach "przyciskow" w MAIN - i zadzialalo.

    Bardzo dziekuje za pomoc.

    Dodatkowe pytanie...
    1.
    Zauwazylem ze na porcie PB02 (mam go jako wyjscie) dioda ledwie swieci (reszta ladnie, jasno). Podejzewam ze to "zasluga" ktorejs z opcji PWM (ktorego nie wlaczalem...) a wiem ze PB02 jest portem dedykowanym do tego. Da sie to jakos zmienic zeby PB02 bylo jako najzwyklejsze wyjscie.

    2. Kazde z wyjsc atmegi jest podlaczone do diody oraz tranzystorem NPN do przekaznika 12v (wyjscie atmegi jako plus do bazy, wspolny minus w emiterze, +12v do colectora ). Dziwne zjawisko jakie zaoserwowlaem to:
    kiedy atmega daje na wyjsciu sygnal (+5v), to mi ladnie "uruchamia" tranzystor i przekaznik - niby wszystko ok, ale jesli recznie odlacze przekaznik od tranzystora (przerwe obowd 12v) to resetuje/przelacza mi sie stan wyjscia z atmegi. Są dwa oddzielne zasilania (baterie do atmegi, zasilacz do przekaznika) [ATMEGA8][C] - Sterowanie oświetleniem - włączniki dzwonkowe

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

    A gdzie masz diody wsteczne na tych przekaźnikach? W ULN20xx miałbyś to wszystko w jednej kostce, tutaj musisz dołożyć luzem.

    Być może z powodu braku diod upaliłeś wyjście, o którym piszesz, że nie działa jak trzeba.

    0
  • #7 17 Gru 2012 11:06
    marian_bieda
    Poziom 9  

    BlueDraco napisał:
    A gdzie masz diody wsteczne na tych przekaźnikach?

    mam jedna na napiecu 12v (nie widac jej bylo na wycinku schematu -teraz zalaczylem caly schemat).

    Teraz sie zastanawiam czy nie dac jecze po jednej na kazdym wyjsciu i wejsciu z/do atmegi.

    Cytat:

    Być może z powodu braku diod upaliłeś wyjście, o którym piszesz, że nie działa jak trzeba.


    Wykluczam tą mozliwosc bo sprawdzalem drugą atmegą (juz bez 12v dla proby)

    0
  • Pomocny post
    #8 17 Gru 2012 12:25
    BlueDraco
    Specjalista - Mikrokontrolery

    Diody są potrzebne na przekaźnikach, a nie na liniach ATmega. Nie kombinuj, tylko zrób to, co naprawdę trzeba. W Twoim rozwiąazaniu na kolektorze tranzystora może pojawić się nawet kilkadziesiąt V - jest groźba przebicia tranzystora i ew. uszkodzenia procesora.

    Dodano po 1 [godziny] 6 [minuty]:

    Popatrz na ustawienie DDRD - nie ustawiasz bitu 6.

    0
  • #9 17 Gru 2012 13:38
    marian_bieda
    Poziom 9  

    Cytat:

    Popatrz na ustawienie DDRD - nie ustawiasz bitu 6.


    O kurcze, fakt! :) I to by sie zgadzalo z tym co obserwuje (teoretycznie, sprawdze to wieczorem na plytce prototypowej).

    Wtedy D6 pracuje jako wejscie 'na plusie' pewnie i ma mniejsze napiecie (dioda sobie lekko swieci). Jako ze jest u mnie powiazane w parze z PB02, moglem sie pomylic ktora z nich swieci slabiej (nie PB02 tylko PD06 ) Jakies 'zawirowania' na tranzystorze od PD06 sa traktowane jako impluls sygnalu wejsciowego i zmienia stan... Jedyne co troche nie pasuje do teorii to ze w ustawieniach podciagnietych napiec mam PORTD = 0b00000000; Czyli bez 1 nad pd6 (wiec plusu tam byc nie powinno) ale zwsze to punkt zaczepienia...

    Wieczorkiem wielki test :)

    Ddzieki Ci wielkie Dobry Czlowieku ;)

    0
  • #10 17 Gru 2012 16:48
    dondu
    Moderator Mikrokontrolery Projektowanie

    marian_bieda napisał:
    Teraz sie zastanawiam czy nie dac jecze po jednej na kazdym wyjsciu i wejsciu z/do atmegi.

    A skąd taki pomysł? Do czego miały by służyć?
    Jak wspomniał kolega BlueDraco, diody mają być na każdym przekaźniku, by eliminować zakłócenia powstające na nim: http://mikrokontrolery.blogspot.com/2011/03/przekaznik-i-zaklocenia.html

    Czy podciągasz pin RESET programowo? Jeżeli nie to szansa na resetowanie się mikrokontrolera jest spora:
    http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html

    Analiza Twojego schematu z pliku PDF jest koszmarem.
    Naucz się rysować schemat w ten sposób: http://mikrokontrolery.blogspot.com/2011/04/jak-projektowac-czytelne-schematy.html

    Zapominasz wstawiać znak połączenia w niektórych miejscach np. na zasilaniu mikrokontrolera.

    0
  • #11 17 Gru 2012 18:18
    marian_bieda
    Poziom 9  

    Spokojnie Panowie :)

    To jest mój pierwszy w życiu:

    Programator
    Program pod mikroprocesor
    Schemat - styczność z CAD-em do projektowania
    Płytka PCB
    Płytka prototypowa....itd.

    3 tygodnie temu nie wiedziałem, że takie coś istnieje lub ja się to robi. Do tej pory to moja styczność z elektryko-elektroniką sprowadzała się do szukania spalonych żarówek na choinkę i szukaniu +12V w samochodzie :) Tranzystor to wiedziałem, że ma 3 nóżki :) A dioda świeci tylko jak się ją podłączy w kierunku przewodzenia. Wszystkie wasze uwagi są bardzo dla mnie cenne i je wprowadzam w trakcie właśnie tego zadanka...
    Pozdrawiam

    0
  • #12 17 Gru 2012 18:56
    BlueDraco
    Specjalista - Mikrokontrolery

    No to gratuluję skuteczności i zawziętości, życzę sukcesów w walce ze sprzętem i współczuję wyboru mikrokontrolera.

    PS. Po co Ci te kłapacze z produ - na wejściach? Nie dałoby się ich pominąć?

    0
  • #13 17 Gru 2012 21:03
    marian_bieda
    Poziom 9  

    BlueDraco napisał:

    PS. Po co Ci te kłapacze z produ - na wejściach? Nie dałoby się ich pominąć?


    Ok, naswietle temat blizej. U zony rodzcow w domu jest specyficzny system oswietlenia. Wlaczniki swiatla w pokojach sa w stylu przycisku dzwonka - wciskasz raz - swieci drugi raz gasnie. Jest na nich 12v - te zwarte 12v idzie do skszynki i tam są przekazini 12v-250v ktore wlaczaja ostateczniee zarowke 250v. Po 20latach te przekazniki bardzo szwankuja i trzeba sie naklikac by to wl/wyl no to postanowilem zrobic cos ciekawego :) (Tych przekazniow oryginalnych juz nie mozna kupic - pojedyncze sztuki na ebay po ok 60zl szt czyli w sumie by wyszlo ok 500zl) W polsce sa podobne ale tez kosztuja podobnie...)

    'Klapacze' z przodu mi sluza jako zwarcie wejcia do masy od atmegi gdy sie wcisnie wlacznik swiatla. Probowalem to zrobic tranzystorem npn baza(+) oraz emiter(-) do wlacznika a kolektor do wejscia atmegi ale cos dziwnego zaczelo mi sie dziac - wystarczylo palcem lub czymkolwiek dotknac bazy a juz spracowywalo wejscie atmegi... i tak oto z tego pomyslu zrezygnowalem. Dodatkowo nie jestem pewien czy te 12v wlacznikach sa pradu stalego czy nie...

    0
  • #14 17 Gru 2012 23:04
    BlueDraco
    Specjalista - Mikrokontrolery

    Prościej i taniej byłoby to zrobić na transoptorach z wejściem bipolarnym, np. K844. Wejście transoptora zasilać z tego wyłącznika - dodać rezystor szeregowy ok. 2 kOhm.

    0
  • #15 17 Gru 2012 23:14
    marian_bieda
    Poziom 9  

    A czy transoptron 'zapamieta' stan?

    Po puszczeniu przycisku napiecie 12v znika niezaleznie czy wlaczamy czy wylaczamy swiatlo...

    0
  • #16 17 Gru 2012 23:28
    BlueDraco
    Specjalista - Mikrokontrolery

    To mikrokontroler ma zapamiętać (a raczej zmienić) stan po wciśnięciu przycisku, a nie transoptor.

    0
  • #17 18 Gru 2012 00:16
    marian_bieda
    Poziom 9  

    Acha, rozumiem ze ten transoptron mialby zamienic wejsciowe przekazniki...

    Wlasnie przeprogramowalem atmege uwzgledniajac zauwazony przez Ciebie blad z PD6, jak reką odjal - wszystkie problemy zniknely !!!

    Za co bardzo Ci dziekuje!

    Musze zglebic temat tych transoptronow i przemyslec zmiane. Aktualnie testuje co i jak bardzo sie grzeje w aktualnej konfiguracji. Narazie widze ze 7812 KEC 1A przy 2ch zalaczonych przekaznikach (po ok 30mA kazdy) jest bardziej niz cieply. Nie wiem czy to moze przez to ze zbyd wiele redukuje (podlaczylem akumulatorek od wkretarki 18v) czy badziewny nabylem.

    PS. Odnosnie tego transoptora K844 - pewnie miales na mysli K847 (literowka) - 4 kanaly ? Bo nie moge sie doszukac tego K844. JUtro sie zaopatrze w dwa takie i zobacze jak z tym bedzie smigac.

    0
  • #18 18 Gru 2012 13:59
    BlueDraco
    Specjalista - Mikrokontrolery

    Miałem na myśli 844 z dowolnymi literkami z przodu. Ma on po dwie przeciwsobne diody w każdym kanale, więc może pracować przy prądzie przemiennym lub przy dowolnej polaryzacji stałego, a kosztuje tyle, co 847.

    0
  • #19 19 Gru 2012 09:01
    perlon
    Poziom 19  

    Swego czasu zmierzyłem się z podobnym co do zasady działania problemem i wymodziłem taki oto zespół włączników.
    Programowalny zespół wyłączników (ATmega8)
    Zamontowane dwa takie zespoły chodzą u mnie w domu ponad pół roku. Trzeci czeka na montaż. Zastępują one nędzne włączniki bistabilne pewnej firmy z Pabianic. Wszystkie włączniki oświetlenia mam w domu jako przyciski. Wyjścia zamiast przekaźników mają triaki separowane od kontrolera optotriakami z detekcją zera sieci. Układ pracuje stabilnie. Nie zauważyłem zakłóceń w sieci. Może więc warto zastąpić przekaźniki triakami. Ja nie mam z nimi żadnych kłopotów, a rozwiązanie wydaje się tańsze i zajmuje mniej miejsca.

    0
  • #20 19 Gru 2012 14:52
    marian_bieda
    Poziom 9  

    perlon napisał:


    Czy włączniki u Ciebie maja własne napięcie ? Czy tylko robią zwarcie 'pustego' obwodu - tak mi to wygląda po schemacie...

    O triakach nie slyszalem planujac 'projekt'. Jesli przekażniki zaczna szwankowac to przerobie jak u Ciebie na triaki. Dzieki za info.

    0
  • #21 19 Gru 2012 15:29
    perlon
    Poziom 19  

    Napięcie na włącznikach to +5V z rezystorów podciągających ATMegi. Włącznik zwiera wejścia do masy układu a nie do "zera" instalacji.

    0
  • #22 19 Gru 2012 16:12
    marian_bieda
    Poziom 9  

    perlon napisał:


    Widze ze zasilanie wyjsc (żarówek za triakiem) puściłeś po płytce grubszą ścieżka (250v)

    Nie ma ryzyka ze sie to przepali przy np 100W (PCB mam 35um)?

    U siebie mysle to zrobic recznie lutowanym kabelkiem ... nie warto ?

    0
  • #23 19 Gru 2012 21:16
    perlon
    Poziom 19  

    W opisie do wyłącznika napisałem, że ścieżki 230V są pociągnięte grubo cyną. Po kilku miesiącach pracy przy okazji małego przemeblowania w tablicy rozdzielczej sprawdziłem co ze ścieżkami. Żadnych śladów przegrzania. Wiem, że nie jest to najszczęśliwsze rozwiązanie ale jednym z ważnych argumentów było zmieszczenie płytki w obudowę Z101 do montażu w tablicy. Dlatego zasilanie jest zrobione od środka w dwie strony żeby prąd na ścieżce od razu zmniejszyć do połowy zapotrzebowania. Obecnie większość żarówek to świetlówki energooszczędne więc prąd na jednej gałęzi to max 4wyjścia x 3żarówki x 15W/230V=0,8A ( z grubsza licząc). Na początku miałem część zwykłych żarówek 60W i mogło być nawet 2,5 do 3A ale chyba nigdy się tyle nie zbiegło. Przymierzyłem się takiego włącznika na 16 wyjść (mam obudowę na 10 modułów) i problem zasilenia triaków mam nierozwiązany.

    0
  • #24 28 Kwi 2013 22:00
    marian_bieda
    Poziom 9  

    Po zamontowaniu mojego dzieła w domu mam ciekawe - nieporządane zjawisko.
    Czasami po ok 3 dniach pracy (początkowo tylko w nocy - 2 razy sie wydażyło ) układ wariuje i samoistnie włącza światła :(

    Aktualnie brak w nim rezystora 10k podciągnietego do pinu RESET oraz +5V ?

    Czy brak owego opornika skutkuje wyłącznie resetem czy wszelakimi dziwacznymi zachowaniami ?

    0
  • Pomocny post
    #25 28 Kwi 2013 22:01
    dondu
    Moderator Mikrokontrolery Projektowanie

    marian_bieda napisał:
    Aktualnie brak w nim rezystora 10k podciągnietego do pinu RESET oraz +5V ?

    Czy brak owego opornika skutkuje wyłącznie resetem czy wszelakimi dziwacznymi zachowaniami ?

    Tak to podstawa tego typu objawów. Dodaj jakikolwiek inny rezystor większy od 4,7k.
    Możesz także na razie ten pin połączyć z VCC przewodem, tylko przed ponownym programowaniem usuń ten przewód.

    0
  • #26 14 Gru 2015 10:57
    marian_bieda
    Poziom 9  

    Działa jak powinno. Dzieki wszsytkim.

    0