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.

Atmega8 problem ze switch-ami (zakłócenia)

bartods 18 Mar 2007 16:09 3590 14
  • #1 18 Mar 2007 16:09
    bartods
    Poziom 16  

    Witam od pewnego czasu mam problem z obsługą switch-ów komputerka samochodowego zrobionego przeze mnie.
    Problem leży w obsłudze przycisków, po dołączedniu kabli do wejść mikrokontrolera z przełącznikami.
    Wystarczy że się poruszę a program w mikrokontrolerze zaczyna odbierać sygnały z przełączników jak by ktoś je wciskał.
    Do odczytywania stanu pinów używam instrukcji DEBOUNCE.
    Gdzieś słyszałem że należy dać na zasilaniu dodatkowe filtrowanie i tak zrobiłem (dławik oraz kondensatory 4x100nF) i nadal to samo.
    Używam Atmegi 8 i sprawdzałem już dwa procki , i na obu to samo.
    Lecz gdy dotknę jedną ręką masy program działa normalnie i switch-e też.
    Jak zniwelować te zakłócenia :?:

    Komputerek funkcje:
    -temperaturę w samochodzie
    -obroty silnika na minutę
    -napięcie akumulatora
    -2 włączniki (na przekaźnikach)
    -1 wzmacniacz napięcia regulowany na sygnale PWM
    -zegar

    wszystko na LCD 24*2.

    0 14
  • #2 18 Mar 2007 16:52
    nadmiszcz
    Poziom 16  

    Ja tak miałem, gdy porty były ustawione na wejścia ale bez wewnętrznego podciągania.
    nie wiem jak to zrobić w bascomie, ale normalnie wpisuje się np
    DDRx=0 - wejście
    PORTx =255 - wejście z podciąganiem
    Jesli nie da się tego już zmienić w programie, to do każdego wejścia podłącz rezystor do + zasialnia.
    powinno pomóc.

    0
  • #3 18 Mar 2007 16:59
    szymtro
    Poziom 30  

    Wewnętrzne nie - tylko zewnętrzne i to trzeba dobrać odpowiedni prąd - to zapewni ochronę przed zakłóceniami.
    Czyli podciąganie pinu przez przynajmniej 1k do plusa, od pinu do masy kondensator, obok kondensatora dioda zenera 6.2V, i od tego punktu przez rezystor 470ohm do przycisku - tak powinien wyglądać układ przycisku u ciebie.

    0
  • #4 18 Mar 2007 23:58
    krakusj
    Poziom 11  

    sprawdź też, czy masz takie ustawienie portu na przykładzie pinów d.4 i d.5

    Config Pind.4 = Input '-port wejściowy do klawisza
    Config Pind.5 = Input '-port wejściowy do klawisza


    S1 Alias Pind.4 '-klawisz S1
    S2 Alias Pind.5 '-klawisz S2

    Set Portd.4 '- podpięcie rezystora podciągającego do plusa zasilania
    Set Portd.5 '- podpięcie rezystora podciągającego do plusa zasilania

    Często robiłem błąd : zamiast Set portd.4 pisałem set pind.4 co objawiało się właśnie takimi problemami. Pozdrawiam.

    0
  • #6 19 Mar 2007 11:51
    nadmiszcz
    Poziom 16  

    szymtro: czy chodziło ci o taki układ?
    Atmega8 problem ze switch-ami (zakłócenia)
    tylko czy ten 470 omów to nie za dużo - gdy wciśnięty będzie przycisk, napięcie na porcie będzie równe ok 1,6V - to chyba jeszcze stan wysoki
    no i jaki kondensator -10nF, 100nF ?

    0
  • #7 19 Mar 2007 13:35
    bartods
    Poziom 16  

    A co poradzić jeśli mikrokontroler wariuje nawet przy zbliżeniu ręki do niego.
    Słyszałem że należy ekranować lecz jak dałem ekran to i tek szalał.
    Zauwarzyłem że jeśli nie ma żadnych kabli odchodzących od portów to mikrokontroler zachowuje się ok. lecz gdy dolutuje kabel do wszystko jedno jakiego portu to mikrokontroler zaczyna być czyły na każde zbliżenie sie do niego.
    Jakieś sugestie :?:

    0
  • #8 19 Mar 2007 14:09
    medicb
    Poziom 28  

    Jak pisali poprzednicy jedyna metoda to zewnętrzne oporniki podciagające.

    0
  • #9 19 Mar 2007 14:15
    szymtro
    Poziom 30  

    Z tym 470 rzeczywiście przegiąłem - potrzeba wsadzić mniejszy - jakieś 330 ohm wystarczy.
    Rysunek jak najbardziej po mojej myśli. Zresztą nie odkryłem tu ameryki i coś takiego można znaleźć w gotowych wyrobach - znaczy że inni konstruktorzy już na to wpadli.
    To wszystko ma na celu nie tylko wyeliminować przypadkowe wzbudzenia ale i elektrykę statyczną - która ewidentnie załatwiła by port uC po przeskoczeniu iskry - np podczas podłączania przycisku.

    Także polecam taki układzik - w smd dużo miejsca nie zajmuje.

    Co do zbliżania ręki i resetowania to nie może być tak ze masz nie wykorzystane porty w stanie hi-z (domyślny) do niczego podłączone - muszą być albo podciągnięte do plusa albo zwarte do masy. Lepiej jest podciągać rezystorami - mniej zaboli i jednak polecam zewnętrzne ale o tym napisał już kolega powyżej.

    Jeszcze taki dodatkowy układ na zasilaniu:
    za stabilizatorem ceramika 100nF i jakiś elektrolit 47uF, potem dławik 100uH i znowu 100nF i 47uF i dopiero do zasilania uF - to też jest stosowane w urządzeniach fabrycznych.

    0
  • #10 20 Mar 2007 13:12
    bartods
    Poziom 16  

    Mam jeszcze jedno pytanie....
    Czy do układów podłączanych do uP przez np. 1WIRE (termometr DS1820 lub LMxx) też stosujecie jakieś dodatkowe elementy :?:
    Jak tak to prosiłbym o podpowiedź :?:

    Co do wolnych pinów w uP po podpięciu ich do masy problem zakłóceń zmniejszył się bardzo .... Dzięki.

    0
  • #11 20 Mar 2007 13:20
    medicb
    Poziom 28  

    Ja używam tylko opornika podciągającego 4,7k można też dziabnąć kondensator przy scalaczku do filtrowania napięcia. A w jakiejś gaecie czytałem ostatnio że nawet i dodatkowy tranzystor dają co w odpowiedniej chwili zwiera oporniczek żeby DS mogły dokonać dokładnego pomiaru ... ?

    0
  • #12 20 Mar 2007 13:41
    szymtro
    Poziom 30  

    Do 1wire zwykle daje tak patrząc od układu 1wire:
    rezystor około 100ohm rezystor do plusa (4k7) dioda do masy i dopiero na pin. Działa wyśmienicie. Można też podłączyć jeszcze malutki kondensatorek równolegle z diodą.

    ----------------------------------------------------------------

    Schemat ten co powyżej tylko brak kondensatora i inne wartości elementów.

    0
  • #14 20 Mar 2007 17:13
    Adamelek
    Poziom 13  

    bartods napisał:
    A co poradzić jeśli mikrokontroler wariuje nawet przy zbliżeniu ręki do niego.


    To bardzo charakterystyczny objaw. Niedawno miałem dokładnie to samo. Powód był taki: najpierw ustawiałem kierunek pinu (wpis do rejestru DDRx) a potem włączałem rezystory podciągające (wpis do rejestru PORTx). I przyciski szalały przy zbliżeniu ręki. Gdy tylko zmieniłem kolejność wpisów, wszystko zaczęło działać. Spróbój zamienić te dwie komendy w swoim programie.

    Generalnie wygląda na to, że nie włączyłeś wewnętrznych rezystorów podciągających a podłączone przewody działają jak anteny.

    0