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.

Zakłocenia w pracy tact switchów

Mars06 08 Maj 2012 13:49 1197 14
  • #1 08 Maj 2012 13:49
    Mars06
    Poziom 7  

    Witam!
    Zaprojektowałem układ posiadający multipleksowaną klawiaturę 3x5 tact switchów.
    Ten fragment wygląda tak na płytce:
    Zakłocenia w pracy tact switchów

    Multipleksowanie działa w ten sposób, że ustawiam na linii wiersza logiczną jedynkę z atmegi i sprawdzam czy na linii którejś z kolumny również pojawi się stan wysoki. Problem w tym, że po włączeniu zasilania przyciski będące z lewej strony są zawsze widziane jako włączone. Jedynie ostatnia prawa kolumna działa jak należy - pewnie dlatego, że ścieżki od niej są krótkie.
    Układ działa jak należy wtedy, kiedy dotykam palcem wszystkie ścieżki sygnałowe z kolumn.

    Zastanawiam się, czy jak przylutuję pomiędzy wszystkimi ścieżkami (albo od każdej ścieżki do masy) rezystory >100/200k to klawiatura zacznie działać. Próbowałem już z rezystorem 33k (największy jaki mam obecnie) pomiędzy kolumną 2 a 3 i działało tak, że po wciśnięciu przycisku z tej kolumny uaktywniały się obie - oczywiście 33k to trochę za mało, ale chciałem sprawdzić czy to cokolwiek zmieni.

    P.S. Ten scalak po prawej to 4075 bramka OR z trzema wyjściami. Potrzebna mi do uruchamiania przerwania w atmedze podczas wciśnięcia przycisku.

    0 14
  • #2 08 Maj 2012 13:57
    atom1477
    Poziom 43  

    A czy cokolwiek ściąga kolumny do masy? Bo chyba nie.
    Szczególnie że piszesz coś o jakichś rezystorach pomiędzy ścieżkami.

    0
  • #3 08 Maj 2012 14:02
    Mars06
    Poziom 7  

    Te rezystory montowałem na próbę, żeby zobaczyć czy to cokolwiek zmieni. Już ich nie ma. Wydaje mi się, że kolumna jest ściągana do masy w atmedze. Nawet jeżeli tak jest, to wychodzi na to, że to i tak za mało. Wystarczy, że dołączę do każdej linii kolumny rezystor np 100k do masy?

    Edit:
    Chodzi o to, że linie kolumn ustawione jako wejście działają jak antena, kiedy przycisk nie jest zwarty?

    0
  • Pomocny post
    #5 08 Maj 2012 14:08
    piotrva
    Moderator Mikrokontrolery

    Jeśli korzystasz z architektury AVR to rób inaczej:
    1. Na wyjściach wierszy ustaw 0 (skonfigurowane jako wyjście) tylko na aktualnie wybranym wierszu, pozostałe wiersze ustawiasz jaki wejścia z podciąganiem do vcc (taka mała ochrona przed zwarciem w wypadku wciśnięcia kilku klawiszy)
    2. Wejścia kolumn ustawiasz wszystkie jako wejścia z podciąganiem do vcc i odczytujesz, gdzie pojawia Ci się 0.
    Takie rozwiązanie jest moim zdaniem najlepsze przy architekturze AVR, gdyż nie wymaga żadnych dodatkowych elementów poza procesorem i klawiaturą.
    Dodatkowo jeśli podepniesz sobie wejścia kolumn do wejść procesora typu PCINT to masz od razu przerwanie (w stanie spoczynku na wszystkie wiersze wystawiasz 0 jako wyjście). Względnie zamiast bramki lub PCINT można zastosować po prostu zwykłe diody 1N4148 podpięte do dowolnego wejścia INT procesora.

    0
  • #6 08 Maj 2012 14:10
    Mars06
    Poziom 7  

    68R, spełniają rolę przelotek nad ścieżką i ograniczają płynący prąd. Nie ma na nich żadnego napięcia.

    0
  • #7 08 Maj 2012 14:13
    dondu
    Moderator Mikrokontrolery Projektowanie

    To:

    Mars06 napisał:
    68R, spełniają rolę przelotek nad ścieżką

    jest do przyjęcia, ale to zastosowanie:

    Mars06 napisał:
    68R ... ograniczają płynący prąd.

    jest zbędne.

    Innymi słowy wystarczyło dać 0R.

    0
  • #10 08 Maj 2012 14:18
    Mars06
    Poziom 7  

    Dzięki wszystkim za pomoc. Dziś już nie zdąże, więc jutro zastosuję się do rady piotrva i mam nadzieję, że zadziała :D

    0
  • #11 08 Maj 2012 14:20
    dondu
    Moderator Mikrokontrolery Projektowanie

    Mars06 napisał:
    Dzięki wszystkim za pomoc. Dziś już nie zdąże, więc jutro zastosuję się do rady piotrva i mam nadzieję, że zadziała :D

    Na pewno zadziała, a Twój problem polegał na braku wymuszenia stanu niskiego na odpowiednich pinach.
    Gdybyś miał nadal problemy dorzuć jeszcze fragment programu.

    0
  • #12 08 Maj 2012 14:44
    piotrva
    Moderator Mikrokontrolery

    dondu napisał:
    piotrva napisał:
    Niekoniecznie, jeśli doszłoby do wciśnięcia 2 przycisków to teoretycznie może dojść do zwarcia.

    Przy zastosowaniu metody, którą zaproponowałeś nie ma takiego zagrożenia.

    Ale nie wiadomo jaką metodę stosował Kolega wcześniej - jeśli byśmy na pinach nieaktywnych wierszy podawali jedynki zamiast włączać tylko podciąganie to wtedy takie rezystory to najprostszy sposób zabezpieczenia pinów uC.

    0
  • #13 08 Maj 2012 14:47
    dondu
    Moderator Mikrokontrolery Projektowanie

    piotrva napisał:
    Ale nie wiadomo jaką metodę stosował Kolega wcześniej - jeśli byśmy na pinach nieaktywnych wierszy podawali jedynki zamiast włączać tylko podciąganie to wtedy takie rezystory to najprostszy sposób zabezpieczenia pinów uC.

    Tak, oczywiście, ale ponieważ metoda autora tematu jest zła (brak wymuszania zera) odniosłem się do tej zaproponowanej przez Ciebie, która tych rezystorów w funkcji ograniczania prądu nie wymaga. Powinienem był dodać od razu, że odnoszę się do Twojej metody.

    0
  • #14 08 Maj 2012 17:16
    Nawigator
    Poziom 33  

    -> Mars06 poszukaj była nota aplikacyjna na stronie Atmela o klawiaturze matrycowej i tam wszystkie szczegóły.

    N.

    0
  • #15 08 Maj 2012 19:15
    Mars06
    Poziom 7  

    piotrva napisał:
    Jeśli korzystasz z architektury AVR to rób inaczej:
    1. Na wyjściach wierszy ustaw 0 (skonfigurowane jako wyjście) tylko na aktualnie wybranym wierszu, pozostałe wiersze ustawiasz jaki wejścia z podciąganiem do vcc (taka mała ochrona przed zwarciem w wypadku wciśnięcia kilku klawiszy)
    2. Wejścia kolumn ustawiasz wszystkie jako wejścia z podciąganiem do vcc i odczytujesz, gdzie pojawia Ci się 0.
    Takie rozwiązanie jest moim zdaniem najlepsze przy architekturze AVR, gdyż nie wymaga żadnych dodatkowych elementów poza procesorem i klawiaturą.
    Dodatkowo jeśli podepniesz sobie wejścia kolumn do wejść procesora typu PCINT to masz od razu przerwanie (w stanie spoczynku na wszystkie wiersze wystawiasz 0 jako wyjście). Względnie zamiast bramki lub PCINT można zastosować po prostu zwykłe diody 1N4148 podpięte do dowolnego wejścia INT procesora.


    Pomogło :D Wielkie dzięki, teraz mogę ruszyć dalej z projektem.
    Jeżeli chodzi o rezystory 68R to użyłem je właśnie dlatego, żeby przy wciśnięciu kilku przycisków nie było za dużego prądu.

    0