logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMEGA 8] Problem z rezystorem podciągającym do masy

:miko: 23 Maj 2011 00:59 3336 11
REKLAMA
  • #1 9534751
    :miko:
    Poziom 2  
    Zrobiłem taki układ (to jego fragment):
    [ATMEGA 8] Problem z rezystorem podciągającym do masy

    Jeśli mam w nim rezystor R21 łączący całość z masą to po wystawieniu na PD2 stanu wysokiego procesor nie rozpoznaje stanu wysokiego na PC3, pomimo tego, że jest tam zmierzone napięcie 5V. Po odpięciu tego rezystora da się rozpoznać stan wysoki, no ale wtedy nigdy nie ma tam stanu niskiego. Próbowałem różne rezystory od 1kΩ do 200kΩ. Próbowałem tez usunąć kondensator, ale nic to nie zmienia.

    Dlaczego tak się dzieje?

    Wiem, że najprościej było by wykrywać stan niski, ale tak jak napisałem wcześniej jest to fragment całości i potrzebuję właśnie czegoś takiego.
  • REKLAMA
  • #2 9534821
    McMonster
    Poziom 32  
    Po pierwsze, to powiedz chociaż, że podłączyłeś odpowiednio wszystkie piny zasilania, bo przyjdą bardziej doświadczeni elektronicy z tego forum, zobaczą ten schemat i cię zjedzą już za samo to, a jest więcej rzeczy do przyczepienia się. :)

    Czy wiesz, że przy drobnej pomyłce możesz doprowadzić do efektu specjalnego w postaci eksplozji mikrokontrolera? O ile jeszcze nie uszkodziłeś portu, to wystarczy, że jeden z pinów ustawisz jako wyjście z włączonym pull-upem, a drugi jako wejście i naciśniesz przycisk. Tak się w ogóle nie robi, jak chcesz obsługiwać przycisk, to podłącz go do przycisku zwierającego z masą zasilania, ustaw pin jako wejście i włącz rezystor podciągający (ustaw stan wysoki na tym pinie).
  • REKLAMA
  • #3 9534823
    GSM
    Poziom 25  
    Witam,

    wskazane jest jednak abyś pokazał pełen schemat, bo z tego wyrywka, który zaprezentowałeś nie wynika czemu ci tak bardzo zależy na takim (bezsensownym nota bene) połączeniu...

    Pozdrawiam,
    GSM
  • #4 9534859
    maxiu25
    Poziom 16  
    Ja wykrywam stany na portach bez problemu. Pod port podpinam drabinkę rezystancyjną 4k7 lub 10k pod VCC. W avrach trzeba zmieniać port raz na wyjściowy raz na wejściowy w zależności czy wystawiamy stan czy sczytujemy. Bo może problem jest w programie.
  • #5 9534918
    dondu
    Moderator na urlopie...
    McMonster napisał:
    Po pierwsze, to powiedz chociaż, że podłączyłeś odpowiednio wszystkie piny zasilania, bo przyjdą bardziej doświadczeni elektronicy z tego forum, zobaczą ten schemat i cię zjedzą już za samo to, a jest więcej rzeczy do przyczepienia się. :)

    Oj, tam zaraz zjadą :)
    Ale Twój apel do autora jak najbardziej zasadny.

    GSM napisał:
    ... bo z tego wyrywka, który zaprezentowałeś nie wynika czemu ci tak bardzo zależy na takim (bezsensownym nota bene) połączeniu...

    Faktycznie, trudno dostrzec sens, ale masz rację, że trzeba pytać o intencje by zrozumieć autora i podpowiedzieć prawidłowe rozwiązanie. Stąd pytanie do autora tematu:
    Co takim sposobem podłączenia chcesz osiągnąć?

    maxiu25 napisał:
    Pod port podpinam drabinkę rezystancyjną 4k7 lub 10k pod VCC.

    A nie wystarczą wewnętrzne pull-upy?


    maxiu25 napisał:
    W avrach trzeba zmieniać port raz na wyjściowy raz na wejściowy w zależności czy wystawiamy stan czy sczytujemy. Bo może problem jest w programie.

    Woow! Ale oczywiście to prawda, więc program przydałby się także.

    No i ostatnie pytanie: Jaki język programowania?
    Jeśli odpowiedź będzie taka jaką, oczekuje to dostaniesz ode mnie 20 pkt boś biedny strasznie (1,19pkt) :)
  • #6 9534961
    :miko:
    Poziom 2  
    Wczoraj siedząc po nocy doszedłem do jeszcze innej dziwnej rzeczy związanej z tym, ale sprawdzę to jeszcze raz dzisiaj, i wieczorem wszystko opiszę tak jak trzeba.

    Co do celu zastosowania tego, to chce tym osiągnąć klawiaturę matrycową gdzie na 4 pinach mam 6 przycisków.
  • REKLAMA
  • #7 9534965
    dondu
    Moderator na urlopie...
    :miko: napisał:
    Co do celu zastosowania tego, to chce tym osiągnąć klawiaturę matrycową gdzie na 4 pinach mam 6 przycisków.

    Przeczucie mnie nie zawiodło, że masz jakiś specyficzny cel.
    Rozrysuj całość tej klawiatury bo z tego fragmentu niewiele wynika.
  • #8 9534999
    SylwekK
    Poziom 32  
    Nie wiem jaki tam rezystor ściągający zastosowałeś ale ja w swoich projektach daje zazwyczaj 3,3k (max do 4,7k) i bez problemu wykrywam stan wysoki. Wg mnie coś przekombinowałeś z programem - błędna konfiguracja portów albo odczyt z pinów...
  • #9 9535393
    GSM
    Poziom 25  
    To już nie lepiej zrobić klawiaturkę na 1 pinie ADC? Mniej kombinacji, prościej, i oszczędzasz jeszcze więcej pinów :wink:

    Pozdrawiam,
    GSM
  • REKLAMA
  • #10 9535456
    SylwekK
    Poziom 32  
    @GSM - pomysł z klawiaturą na ADC jest w pewnych sytuacjach genialny i niezastąpiony ale ma jednak tę wadę, że komplikuje nieco fakt wciśnięcia np. dwóch klawiszy i samo badanie jest ciut wolniejsze. W każdym razie autor projektu powinien rozważyć też i taką możliwość aczkolwiek nauka oprogramowania matrycy na pewno zaowocuje w przyszłości...
  • #11 9535502
    McMonster
    Poziom 32  
    Ale po co się męczyć, skoro Atmel napisał notę aplikacyjną na ten temat, gdzie jest matrycowa klawiatura, działanie na przerwaniach i niski pobór prądu.
  • #12 9559045
    :miko:
    Poziom 2  
    W końcu zabrałem się za to przez weekend i okazało się, że przyczyna jest oczywiście najprostsza i najbardziej oczywista z możliwych, aż głupio pisać, że winne było drganie styków. Niestety to co działało (albo mi się wydawało, że działało) na płytce stykowej, po zlutowaniu zupełnie nie zdało egzaminu i powodowało takie a nie inne zachowanie programu.


    Skoro już temat zacząłem to opisze jaki był tego zamysł:

    [ATMEGA 8] Problem z rezystorem podciągającym do masy

    INT0 i INT1 jako wejścia z podciągnięciem do Vcc, na porcie C (PC2 i PC3) stany niskie, po naciśnięciu przycisku wywoływane jest przerwanie, pin na którym zostanie wywoływane przerwanie przełącza się w stan wysoki, następnie zczytywana jest wartość portu C, wyodrębniane są stany odpowiednich pinów (PC2 i PC3). Jeśli wciśnie się lewy przycisk to odczytywana jest 1, jeśli prawy 2, a jeśli środkowy 3, bo diody puszczają stan wysoki na obydwa używane piny portu C.

    Problem drgania styków rozwiązałem w taki sposób:
    [ATMEGA 8] Problem z rezystorem podciągającym do masy
    Niestety nie jest on do końca prawidłowy, mniej więcej przy co 20 - 40 naciśnięciu (a w zasadzie przy puszczeniu) pojawia się drganie wywołujące powtórne przerwanie.

    Dawałem również kondensator między styki przełącznika a masę, ale wtedy pojawiał się problem przy zmianie stanu z niskiego na wysoki, napięcie za wolno narastało i procedura przerwania za bardzo by się wydłużyła. Być może kondensator jest za duży, jeszcze spróbuje z mniejszym.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA