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.

[ATTiny13][C] Przycisk + diody RGB = dziwne działanie

Lukaszm 24 Sie 2012 12:37 2757 16
  • #1 24 Sie 2012 12:37
    Lukaszm
    Poziom 9  

    Witam,
    Mam pewien problem z prostym układem ze schematu:
    [ATTiny13][C] Przycisk + diody RGB = dziwne działanie

    Do JP1 podłączona jest płytka z sześcioma diodami RGB (wspólna anoda, rezystory 240R, działanie samej płytki można zobaczyć na tym filmiku: http://www.youtube.com/watch?v=1afrZ2EbAf0 )
    Układ zasilam albo od razu z portu USB przez programator USBasp lub przez stabilizator 7805 z kondensatorami (470 uF i 100 nF na wejściu; 100 uF i 100 nF na wyjściu) - lecz nieważne które źródło zasilania wybieram, zachowanie układu jest to samo- opis niżej.

    Program napisałem w C, właśnie jestem w trakcie nauki, no i pojawił się problem:
    Najpierw program:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Działanie programu wydaje się być jasne i oczywiste- jak w komentarzach do kodu. Ale tak niestety nie jest, gdy włączę zasilanie to diody zmieniają kolory, ale widać, że zatrzymują się dłużej przy kolorze czerwonym- czyli uC wykrył, że przycisk jest niby wciśnięty (chociaż ja nie dotykałem przycisku w ogóle).
    Ogólnie to układ nie zachowuje się stabilnie- czasami włącza tylko kolor czerwony- chociaż przycisk nie jest wciśnięty.

    Gdy wyjmę przycisk (układ zmontowałem na płytce stykowej) to wszystko działa OK- diody cały czas zmieniają kolor, bez przedłużenia przy barwie czerwonej.
    Natomiast gdy włożę przycisk (na pewno sprawny i na pewno odpowiednie ułożenie- sprawdzałem) to zaczyna się ruletka- trochę mruga, trochę poświeci czerwony, a na dodatek, gdy odsunę się na od układu, to włącza się czerwony.


    I w związku z tym mam do Was pytanie- o co w tym chodzi?
    Domyślam się, że jest coś z zakłóceniami. Próbowałem dodawanie kondensatora (100nF) równolegle do przełącznika + rezystor (330R) pomiędzy "wyjściem" przełącznika a masą, ale poskutkowało to tym, że po włączeniu układu diody zmieniały kolor tak jak powinny, gdy wcisnąłem przycisk to był kolor czerwony, ale po puszczeniu przycisku układ pozostawał nadal w tym samym stanie- cały czas były włączone tylko diody czerwone. Może to tranzystory/diody są źródłem zakłóceń?
    Dodam jeszcze, że teraz gdy włączę układ i odsunę się, to świecą się diody czerwone, a gdy zbliżę palec do przycisku (bez naciskania), to zaczynają mrugać.
    Mam teraz już totalny mętlik w głowie co może w tym nie grać, mam nadzieję, że pomożecie ;)
    Dzięki za odpowiedzi z góry i pozdrawiam
    Łukasz
    Ująłem w tytule język programowania.
    LordBlick

    0 16
  • Pomocny post
    #2 24 Sie 2012 12:49
    dondu
    Moderator Mikrokontrolery Projektowanie

    Bardzo ładnie opisany problem :)

    Hmm, objawy które opisujesz pasują do nie podciągniętego pull-up. Ale Ty włączasz pull-up na PB3 programowo, stąd tę przyczynę można by wykluczyć. Ale żeby być pewnym na 100% dodaj do przycisku zewnętrzny rezystor pull-up np. 1kΩ.

    0
  • #3 24 Sie 2012 13:00
    Lukaszm
    Poziom 9  

    Po dodaniu pull-upa 1k działa tak jak powinno :)
    Tylko teraz powstaje pytanie- czemu nie działa na wewnętrznym pull-upie, chociaż powinno?

    Dla pewności wziąłem nowiutkie ATTiny13 i zaprogramowałem tym samym hexem- bez zewnętrznego pul-upa działa tak jak poprzedni uC (uszkodzenie mogło być przyczyną, bo przy pierwszych próbach bazy tranzystorów podłączyłem bezpośrednio do nóżek i uC się trochę zgrzał).
    Po dodaniu zewnętrznego śmiga jak powinno.
    Dzięki za pomoc i jeszcze raz pytanie: wiesz może czemu jest tak, a nie inaczej?

    0
  • #4 24 Sie 2012 13:15
    dondu
    Moderator Mikrokontrolery Projektowanie

    Hmm, nie zaglądam do dokumentacji ATtiny13, ale standardowo powinna być włączona funkcja pinu jako PB3. Jeżeli tak jest to przy takim programie jaki pokazałeś, pull-up powinien być włączony programowo. Skoro się nie włącza, to istnieje możliwość, że jest uszkodzony.

    Drobna uwaga:
    Nie definiuj F_CPU w kodzie tylko w opcjach projektu http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    0
  • #5 24 Sie 2012 13:21
    Lukaszm
    Poziom 9  

    Hmm uszkodzony w dwóch mikrokontrolerach (w tym jeden całkiem nowy)?
    Spróbuję zmienić pin pod którym jest przycisk na PB4- zobaczę, może coś to zmieni.

    Co do F_CPU - dzięki

    Edit:
    Po zmianie na PB4 nadal to samo, bez zewnętrznego rezystora podciągającego układ pracuje niestabilnie, chociaż w programie mam włączony wewnętrzny rezystor.
    Postaram się znaleźć odpowiedź czemu tak jest, a gdyby ktoś miał taki przypadek/wie czemu tak jest to proszę napisać ;)
    Pozdrawiam

    0
  • #6 24 Sie 2012 13:44
    tmf
    Moderator Mikrokontrolery Projektowanie

    W tym MCU masz bit PUD - pull up disable, może sobie więc przypadkiem te pull upy blokujesz. Druga możliwość - w zależności od układu i otoczenia - wewnętrzne pull upy mają spory opór, jak są zakłócenia wkoło to właśnie są podobne objawy do opisywanych.

    0
  • #7 24 Sie 2012 14:15
    Lukaszm
    Poziom 9  

    Program który wgrywam jest podany wyżej i wydaje mi się, że ustawień PUD w nim nie tykam- ale mogę się mylić.
    W DS znalazłem taką tabelkę:
    [ATTiny13][C] Przycisk + diody RGB = dziwne działanie
    No i z tego wynika, że początkowo ma wartość 0, czyli że rezystory podciągające można włączyć.
    Spróbowałem na początku programu dodać

    Kod: c
    Zaloguj się, aby zobaczyć kod

    lecz nie podziałało.

    Czyli pozostaje druga opcja- zakłócenia.
    Na płytce siedzi 6 diod RGB, ale w danym momencie świeci tylko jedna barwa- pobór to około 120mA.
    Mógłby ktoś podrzucić jakiś link albo napisać w jaki sposób poradzić sobie z zakłóceniami od diod/tranzystorów?
    Pozdrawiam

    0
  • #8 24 Sie 2012 14:37
    dondu
    Moderator Mikrokontrolery Projektowanie

    Z PUD dobrze kombinujesz - nie musisz nic robić, bo domyślnie jest OK.
    Zakłócenia z LED? Hmmm, nie bardzo, bo zasilasz z wydajnych źródeł, ale dodaj blisko nóżki zasilającej mikrokontroler kondensatory około 10-47uF oraz 100nF.

    Pokaż zdjęcia tego projektu.

    0
  • #9 24 Sie 2012 14:56
    Lukaszm
    Poziom 9  

    Dodałem kondensatory 22 uF i 100 nF, nadal nic, po odłączeniu zewnętrznego rezystora układ zaczyna szaleć.

    Fotki:
    [ATTiny13][C] Przycisk + diody RGB = dziwne działanie [ATTiny13][C] Przycisk + diody RGB = dziwne działanie [ATTiny13][C] Przycisk + diody RGB = dziwne działanie [ATTiny13][C] Przycisk + diody RGB = dziwne działanie [ATTiny13][C] Przycisk + diody RGB = dziwne działanie

    Jakiś pomysł?

    0
  • #10 24 Sie 2012 15:04
    dondu
    Moderator Mikrokontrolery Projektowanie

    1. Nie rób zdjęć pod światło.
    2. Bez rezystora szaleje, bo pull-up wewnętrzny się nie włącza.
    3. Inne pomysły? Brak.

    No i ponownie Ciebie postawię jako wzór porządku w tym co robisz :)
    Jedyna uwaga do kolorów przewodów - niebieski GND, czerwony Vcc, sygnały innych kolorów. Warto się trzymać tej zasady.

    Pozostaje więc wziąć ATtiny i na boku (nie w tym projekcie) spróbować z jedną diodą LED (bez tranzystora tylko rezystor) i do tego dodać przycisk.

    0
  • #11 24 Sie 2012 15:27
    Lukaszm
    Poziom 9  

    Za zdjęcia sorki, a co do kolorów jumperów: nie mogę zrobić tak jak piszesz, bo odpowiedni kolor odpowiada długości złączki, np. zielony 6 kratek, biały 10..., więc ciężko wszystko poukładać na płytce jeszcze tak, żeby kolory się zgadzały ;p poza tym jak na razie mam małe opakowanie zworek, jak dokupię większe to pomyślę o kolorach ;)

    Spróbowałem z trzema małymi diodami 3mm. Ten sam program. Przy zewnętrznym jest OK, po odłączeniu szaleje.

    Cytat:
    2. Bez rezystora szaleje, bo pull-up wewnętrzny się nie włącza.

    Myślałem, że w mikrokontrolerach nic nie dzieje się "ot tak" i skoro ustawiam PB3 jako wejście z podciągnięciem do VCC to tak będzie, a nie inaczej ;/

    Pozdrawiam i czekam na dalsze podpowiedzi, może ktoś miał taki przypadek

    0
  • #12 24 Sie 2012 15:48
    janbernat
    Poziom 38  

    Jest dobrze.
    Co można zrobić:
    Można zmniejszyć stromość zboczy sygnałów sterujących- dodać kondensatory ok.100pF
    między wyjście procesora a masę.
    Czy 100pF czy 510pF trudno powiedzieć- trudno oszacować jakie są pojemności połączeń na płytce stykowej i i ile je zwiększyć.
    Można też zmniejszyć efektywność anten nadawczych jakie się tworzą z przewodów między tranzystorami sterującymi a płytką z diodami.
    Najprościej- skręcić przewody parami.

    0
  • #13 24 Sie 2012 15:51
    dondu
    Moderator Mikrokontrolery Projektowanie

    Lukaszm napisał:
    Myślałem, że w mikrokontrolerach nic nie dzieje się "ot tak" i skoro ustawiam PB3 jako wejście z podciągnięciem do VCC to tak będzie, a nie inaczej.

    I tak jest gdy wewnętrzny pull-up się załączy. Tobie się nie włącza, i nie wiemy dlaczego. Wtedy potencjał wejścia szaleje w zależności co się koło niego znajduje, stąd powstają problemy.

    Więcej na ten temat w dziale Zasilanie i zakłócenia: http://mikrokontrolery.blogspot.com/p/spis-tresci.html#dzial_zasilanie_zaklocenia

    Niestety nie potrafię Ci pomóc ponieważ:
    - program jest OK
    - schemat OK
    - podłączenia także OK (o ile czegoś nie przegapiłem).

    To o czym pisze janbernat powyżej, to ostateczność.
    Jednak Twój układ powinien działać i bez tego.

    Czy to:
    Lukaszm napisał:
    Spróbowałem z trzema małymi diodami 3mm. Ten sam program. Przy zewnętrznym jest OK, po odłączeniu szaleje.

    zrobiłeś poza tą płytką? Jeżeli nie to spróbuj.

    Zmieniając pin z PB3 na PB4 uwzględniłeś zmianę w programie?

    Pokaż jeszcze na wszelki wypadek ustawienia fusebitów.

    0
  • #14 24 Sie 2012 16:07
    Lukaszm
    Poziom 9  

    Wrzucam dwa zdjęcia, jeden z Burn-o-mata(tego używam do programowania procka, bo WinAVR wywala jakieś błędy związane z AVRDude- brak jakiejś biblioteki dla Attiny13a, w Burn-o-macie używam innego AVRDdude, pobranego z internetu, ale nie ma to wpływu na działanie uC, więc mniejsza z tym), a drugi z Bascoma.

    [ATTiny13][C] Przycisk + diody RGB = dziwne działanie [ATTiny13][C] Przycisk + diody RGB = dziwne działanie

    Co do zmontowania poza płytką- w pająku? Spróbować mogę, ale wtedy jest prawdopodobieństwo, że coś źle zmontuję, będzie więcej przewodów itd. Ale ok.

    Zmianę pinu pod switcha uwzględniłem.

    Janbernat: dzięki za podpowiedzi, ale wydaje mi się, że tak przy normalnej pracy mikrokontrolera nie powinno być, przecież ludzie zasilają np. silniki i wtedy może być mowa o zakłóceniach, a ja tutaj mam 6 diod RGB na tranzystorach. Poza tym- nawet jak mam podłączone trzy małe diody led to i tak nie działa poprawnie.

    Spróbuję poza płytką

    0
  • #15 24 Sie 2012 17:48
    janbernat
    Poziom 38  

    Trzy małe LED-y na płytce stykowej niedaleko tranzystorów?

    0
  • #16 24 Sie 2012 17:49
    tmf
    Moderator Mikrokontrolery Projektowanie

    Sprawdź jeszcze jedną rzecz. Włącz pullup na pinie, połącz ten pin z masą przez rezystor ok. 47-100k. Czy nadal na pinie jest Vcc? Jeśli nie, to znaczy, że istotnie nie włącza się pullup (czyli magia), jeśli ciągle masz Vcc to pullup się włącza. Ponieważ montujesz wszystko na stykówce sprawdź dokładnie połączenia, pomierz wszystko. Tak jak pisałem, spotkałem się z takim zachowaniem w zaszumionym środowisku. Wewnętrzny pullup był niewystarczający do poprawnego działania switcha, dopiero zewnętrzne rezystory 4k7 pomogły. Swoją drogą czasami nie ma się co zastanawiać, bo są rzeczy o których nie śniło się nawet naszym filozofom :) Jak ci działa z zewnętrznym to git :)

    0
  • #17 24 Sie 2012 18:09
    Lukaszm
    Poziom 9  

    Janbernat- do tych małych ledów odłączyłem wyjąłem tranzystory, ledy podłączone były do nóżek uC przez rezystory.
    Tmf- Zrobiłem tak jak napisałeś- na pinie pojawia się napięcie.... 0.01V
    Magia ;)
    Myślę, że nie można tutaj mówić o zakłóceniach, bo przy podłączeniu jednej diody led program nadal nie działa poprawnie.

    Przy Atmedze8 wszystko działa, bez zewnętrznych rezystorów itd.
    Czyli lekcja taka, że jak będę w przyszłości robił coś na Attiny to dodać zewnętrznego pull-upa dla pewności ;)
    Pozdrawiam

    0