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

[ATmega8] [ATmega8][C] - Wrażliwość wejścia PD6 na zakłócenia przy dotyku kabla

Vister26 08 Cze 2014 22:29 1587 8
REKLAMA
  • #1 13690936
    Vister26
    Poziom 8  
    Napisałem taki oto prosty program.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Z założenia wynika, że po zwarciu PD6 do GND powinien zmieniać się stan na PD2. Rzeczywiście tu jest OK. Ale problem jest w tym, że aby przełączyć stan diody wystarczy, że dotknę aluminiową końcówką kabelka(połączeniowego) do PD6. Wtedy dioda również zmienia stan. Co ciekawe kiedy dotykam palcem to procesor nie reaguje. W czym może być problem?
  • REKLAMA
  • #2 13690993
    Fredy
    Poziom 27  
    Musisz włączyć podciągnięcie wejścia.
    No i dodatkowo zrób jakiś debouncing, albo daj opóźnienia bo ta pętla pędzi ci kilka milionów razy na sekundę.
    Ogólnie aby zadziałało dodaj rezystor zewnętrzny na wejście np 10k, albo użyj wewnętrznego przez wpisanie jedynki na PIN czyli PIND|= KEY.
  • REKLAMA
  • #3 13691011
    Kuzyn
    Poziom 17  
    Nie ustaliłeś kierunku pinu KEY
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Oraz określ jakiś stan początkowy na pinie LED. Np.:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Fredy napisał:

    Ogólnie aby zadziałało dodaj rezystor zewnętrzny na wejście np 10k, albo użyj wewnętrznego przez wpisanie jedynki na PIN czyli PIND|= KEY.

    Jesteś pewien, że czegoś nie pokręciłeś? Zamiast PIND powinno być PORTD i to już kolega ma.
  • #4 13691096
    BlueDraco
    Specjalista - Mikrokontrolery
    Kuzyn napisał:
    Nie ustaliłeś kierunku pinu KEY
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Więc linia ta jest ustawiona jako wejście - POPRAWNIE - nie ma potrzeby nic zmieniać, ta instrukcja jest zbędna.

    Kuzyn napisał:
    Oraz określ jakiś stan początkowy na pinie LED. Np.:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Stan jest określony i nie ma potrzeby określać go powtórnie - jest to 0 i jeśli tak ma być - instrukcja jest zbędna.
  • #5 13691111
    Vister26
    Poziom 8  
    Fredy napisał:
    Musisz włączyć podciągnięcie wejścia.

    Nic z tego nie rozumiem. Jest jakaś dokumentacja do tego całego avr-gcc? Bo przeszukuje i czytam te wszystkie "kursy", a nawet testowe programy w nich zawarte nie działają.

    @Edit
    Czyli w końcu co trzeba zmienić, żeby zadziałało?
  • REKLAMA
  • #6 13691537
    dziechu
    Poziom 27  
    Poczytaj nie kursy C, ale dokumentację procesora.

    Dodano po 2 [minuty]:

    Rezystancja podciągania jest dość duża i zakłócenia podczas dotykania pinu metalowymi przedmiotami może wymuszać przypadkowe stany. Dolutuj opornik, np. 1k miedzy pin KEY a + zasilania procesora.
  • REKLAMA
  • #8 13692693
    Vister26
    Poziom 8  
    @dziechu Ja to robię na płytce stykowej. Dodałem tam gdzie mówisz rezystor 10k. Dodatkowo dodałem kondensator 100nF między GND i pin KEY (ma zmniejszać ilość błędów i rzekome drgania styków). Teraz działa jak marzenie. Cała filozofia: schemat by mirekk36
    Teraz tylko ciekawi mnie jak wewnętrznie podciągać linię do VCC. Bo te sposoby z neta mimo wszystko wymagają dodania zewnętrznie tych dwóch elementów.
  • #9 13692831
    dondu
    Moderator na urlopie...
    Fredy napisał:
    Ogólnie aby zadziałało dodaj rezystor zewnętrzny na wejście np 10k, albo użyj wewnętrznego przez wpisanie jedynki na PIN czyli PIND|= KEY.

    Po pierwsze nie PIND tylko PORTD, po drugie autor już to zrobił, czyli włączył wewnętrzny rezystor pull-up:

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


    ... o czym autor nie ma pojęcia:

    Vister26 napisał:
    Teraz tylko ciekawi mnie jak wewnętrznie podciągać linię do VCC. Bo te sposoby z neta mimo wszystko wymagają dodania zewnętrznie tych dwóch elementów.

    bo zamiast skorzystać ze wskazanego linku i zawartego tam kursu AVR, woli pytać na forum.

    Vister26 napisał:
    Dodałem tam gdzie mówisz rezystor 10k. Dodatkowo dodałem kondensator 100nF między GND i pin KEY (ma zmniejszać ilość błędów i rzekome drgania styków). Teraz działa jak marzenie. Cała filozofia: schemat by mirekk36

    a ta filozofia, to rzeczywiście "filozofia" człowieka nie posiadającego wykształcenia elektronicznego i świadomie narażającego początkujących na problemy:





    Zacznij więc czytać materiały, które Ci wskazałem - poświęć na to czas, a zaczniesz iść do przodu szybciej i skuteczniej, a zrozumiesz nie tylko programowanie, ale także zjawiska fizyczne i elektronikę.
REKLAMA