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.

Atmega - dziwne mruganie diody.

Manadrake 15 Lut 2012 14:42 2013 17
  • #1 15 Lut 2012 14:42
    Manadrake
    Poziom 11  

    Witam, mam problem z atmegą 8. Chciałem zrobić mruganie diodą, układ działa, tzn po naciśnięciu przycisku reaguje i w ogóle, ale dioda zamiast mieć 0 jako stan spoczynkowy ma jakieś wachania napięć, raz ma 2,5 potem 1,5 itp. Wsadziłem nową atmegę i problem nadal jest ten sam. Układ zasilam stabilizowanym, filtrowanym napięciem 5V. Dioda podłączona jest pod PD0, a switche pod PB1 i PB0. Proszę o pomoc, co może być przyczyną takiego dziwnego zachowania?



    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod




    Dodam, że układ kilka dni temu działał, a teraz nagle nie wiem czego zaczęło się tak dziać, nie jest to wina niełączących kabli bo każdy sprawdzałem, poza tym próbowałem ominąć switche i "ręcznie" podłączać do zasilania, działa tak samo jak ze switchem, czyli gdy jest wciśnięty switch odpowiedzialny za gaszenie dioda gaśnie, po czym po 1-2 sekundach zapala się z powrotem i tak nieregularnie mruga, pulsuje, a gdy nacisnę switch odpowiedzialny za włączanie diody, zaczyna świecić równo, bez pulsowania lub zaczyna świecić trochę mocniej.
    Z zaprogramowaniem nie ma żadnych problemów, na nózkach od zasilania jest niemal idealnie równe 5V, Dodaje kilka zdjęć, przepraszam za jakość.


    Atmega - dziwne mruganie diody. Atmega - dziwne mruganie diody.

    0 17
  • #2 15 Lut 2012 15:03
    sp3ots
    Poziom 35  

    Witam !
    Zamiast:
    Portb = &B0000000
    daj:
    Portb.1 = 1
    albo
    Portb = &B11111111 ,eśli w przyszłości chcesz ustawić wszystkie piny Portu B jako wejścia.
    Pozdrawiam. Stefan

    Pozdrawiam. Stefan

    0
  • #3 15 Lut 2012 15:07
    pawel_mr
    Poziom 14  

    Nie widzę rezystorów podciągających przyciski, jeśli wewnętrzne też nie są włączone to wejścia wiszą w powietrzu jeśli przycisk nie jest wciśnięty a co za tym idzie stan wejść jest "przypadkowy", czyli "samo się naciska i samo zwalnia".

    0
  • #4 15 Lut 2012 15:15
    Manadrake
    Poziom 11  

    Dzięki za odpowiedź, mógłbyś trochę rozwinąć o co chodzi? Bo pierwsze słyszę o jakichś rezystorach podciągających przyciski.. Właśnie tak to wygląda, jakby przypadkowo wszystko działało, ale samo zaprogramowanie i działanie programu jest prawidłowe. Tylko ta dioda raz świeci, raz mruga..

    0
  • #5 15 Lut 2012 15:33
    pawel_mr
    Poziom 14  

    Jeśli ustawiasz jakieś piny procesora jako wejścia to wchodzą one w stan wysokiej impedancji, wtedy są bardzo wrażliwe na zakłócenia, zmianę stanu może spowodować wiele czynników, nie tylko przycisk (np. zakłócenia indukujące się w kablach idących od przycisków). Żeby to wyeliminować musisz ustalić stan spoczynkowy podciągając rezystorami np. do plusa zasilania. Możesz też to zrobić rezystorami wewnętrznymi, które atmega posiada, tak jak napisał kolega wcześniej ustawiając odpowiednio porty. Niestety te rezystory mają dużą wartość więc w środowisku o dużych zakłóceniach warto dodać rezystory zewnętrzne.

    0
  • #6 15 Lut 2012 15:45
    Manadrake
    Poziom 11  

    Config Portb = Input 'port b jako wejścia
    Portb = &B0000000 'wszędzie stan spoczynkowy-0
    Config Portd = Output 'pprt d jako wyjścia
    portd=&B0000000 'wszędzie stan spoczynkowy-0


    Czy to nie jest to, o czym mówisz? Stan spoczynkowy?
    Wydaje mi się, że nie w tym leży problem, skoro układ wcześniej działał. Wgrałem tylko inny program, i się to zaczęło, wróciłem do poprzedniego który działał jednak problem pozostał ten sam..

    0
  • #7 15 Lut 2012 16:15
    dondu
    Moderator Mikrokontrolery Projektowanie

    pawel_mr napisał:
    Niestety te rezystory mają dużą wartość więc w środowisku o dużych zakłóceniach warto dodać rezystory zewnętrzne.

    W tym przypadku wystarczy włączyć wewnętrzne, ponieważ projekt autora nie zwiera źródeł dużych zakłóceń.

    Poszukaj jak włączyć rezystory pull up za pomocą BASCOM
    Może tak:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    lub tak
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    ... BASCOM mnie nie lubi :)

    0
  • #8 15 Lut 2012 16:26
    sp3ots
    Poziom 35  

    To nie działa:
    Portb.0=1
    bo kol. Manadrake
    zwiera wejścia do +5V
    Manadrake !
    Zmień schemat i program, zwieraj do GND a ta część kodu:
    Portb.0 =1 zadziała

    0
  • #9 15 Lut 2012 16:38
    Manadrake
    Poziom 11  

    Zaraz, nie rozumiem.. Switche zwierają do masy, zielony kabelek to GND a brązowy VCC.

    0
  • #13 15 Lut 2012 17:29
    Manadrake
    Poziom 11  

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod




    Zrobiłem w ten sposób, jednak program nie działa tak jak chciałem (wczesniej też nie) dioda świeci się cały czas, po naciśnięciu powinna zgasnąć, tymczasem gaśnie tylko jeśli trzymam przycisk..

    0
  • #14 15 Lut 2012 17:35
    dondu
    Moderator Mikrokontrolery Projektowanie

    Jak juz wspomniałem BASCOM to nie moja specjalność, ale spróbuję uporządkować Twój kod.
    Gdy przycisk jest naciśnięty, to zwiera do masy, czyli masz 0 na wejściu, a nie 1 (warunki w IF-ach):

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #15 15 Lut 2012 17:44
    Manadrake
    Poziom 11  

    To wygląda tak, jakby w mojej atmedze stan spoczynkowy wynosił 2,5V, i dlatego na nóżce diody jest 1V~ a nie 0 wtedy gdy powinno być. Poza tym całość dziwnie się zachowuje, gdy nacisne przycisk który powinien gasić diodę, zamiast zgasnąć przygasa na chwilkę i wraca spowrotem do tego swojego pół świecenia. Już sam nie wiem co to jest nie tak

    0
  • Pomocny post
    #16 15 Lut 2012 17:47
    dondu
    Moderator Mikrokontrolery Projektowanie

    Manadrake napisał:
    ... i wraca spowrotem do tego swojego pół świecenia.

    Bo masz za duży rezystor - daj 220-330Ω.

    Manadrake napisał:
    To wygląda tak, jakby w mojej atmedze stan spoczynkowy wynosił 2,5V, i dlatego na nóżce diody jest 1V~ a nie 0 wtedy gdy powinno być.

    Zmierz napięcie na pinach zasilających Atmegę.

    Manadrake napisał:
    Już sam nie wiem co to jest nie tak

    Pokaż program po poprawkach.

    0
  • #17 15 Lut 2012 18:03
    Manadrake
    Poziom 11  

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod




    Po zmianie atmegi, program działa! Dzięki! Mam jeszcze pytanie, dlaczego jest tak, że gdy przycisk jest naciśnięty jest 0, a gdy zwolniony jest 1? Gdybym podpiął do VCC byłoby na odwrót? Nie do końca rozumiem też ten fragment, Portb.0 = 1, co on dokładniej oznacza? Bo przy wyjściu sprawa jest jasna - 0=0V 1=5v, tu nie bardzo wiem dlaczego tak jest. Jeszcze raz dzięki.

    0
  • #18 15 Lut 2012 18:08
    dondu
    Moderator Mikrokontrolery Projektowanie

    Manadrake napisał:
    Mam jeszcze pytanie, dlaczego jest tak, że gdy przycisk jest naciśnięty jest 0, a gdy zwolniony jest 1?

    Ponieważ włączony wewnętrzny rezystor pull-up (podciągnij w górę) podłącza ten pin do Vcc.
    Zatem jeżeli nie naciskasz przycisku masz na wejściu jedynkę.
    Jeżeli naciśniesz przycisk zwierasz do GND, czyli masz na wejściu zero.


    Manadrake napisał:
    Gdybym podpiął do VCC byłoby na odwrót?

    Tak, ale wtedy zamiast wewnętrznego rezystora pull-up, musiałbyś zastosować zewnętrzny rezystor pull-down (podciągnij w dół) który wymuszałby stan niski (zero) na wejściu, gdy przycisk nie jest przyciśnięty. Dlatego łatwiej jest zrobić tak jak masz w tej chwili.


    Manadrake napisał:
    Nie do końca rozumiem też ten fragment, Portb.0 = 1, co on dokładniej oznacza? Bo przy wyjściu sprawa jest jasna - 0=0V 1=5v, tu nie bardzo wiem dlaczego tak jest.

    Jeżeli pin PB0 ustawiłeś jako wejście, to ten rozkaz włącza pull up na tym pinie.

    0