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

Cuda na kiju czyli odczyt z portu

lukeuk 24 Sty 2009 02:06 1119 5
REKLAMA
  • #1 6045513
    lukeuk
    Poziom 10  
    Witam serdecznie,

    Zabawę z AVRem zaczołem dopiero kilka dni temu więc może nie rozumiem jakiegoś oczywistego faktu ale dnia dzisiejszego oszalałem :D
    Podłączyłem sobię LCD HD44870 aby mieć lepszy wgląd w to co dzieje się w kontrolerze i postanowiłem pobawić się z portem A ustawionym na odczyt (DDRA = 0x0). W pętli ustawiłem aby wyswietlał mi 8 bitow na LCD co się okazało 0/1 zmieniały się bez mojej ingerencji same z siebie. Czasem potrafily działac dobrze w sensie uspokoic się i nie szaleć ale niestety tylko na krótką chwilę. Jeśli dany pin z portu A zostal uziemiony wtedy LCD reagowal bezblednie i wyswietlal 0 na dany PIN. Jak tylko odłączylem go od uziemienia znów zaczynał wariować... Pomyslalem sobie, pewnie źle napisałem sterownik do LCD czy coś źle podłączylem itd wiec przeszedłem do klasycznego przykładu z diodami przełącznikami i kodem:

    
    DDRA = 0xFF;
    DDRB = 0x0;
    		
    while(1)
    {
    	PORTA = PINB;
    }
    


    Co sie okazalo czasami diody, które powinny świecić nie świeciły. Przez przypadek zauważyłem, że jak trzymam rękę nad układem (nie dotykając go) wszystko zaczyna działać jak nalęzy WTF? jeśli to nie pomagało wystarczyło trzymać palec na mikrokontrolerze. Sytuacja ma się tak samo na wszystkich portach :D

    Wie ktoś o co chodzi ??

    Dodano po 3 [minuty]:

    (uzywam ATMega8515)
  • REKLAMA
  • #2 6045519
    elektryk
    Poziom 42  
    Mnie to wygląda na prawidłowe działanie przy wyłączonym pull-up. Linie znajdują się w stanie wysokiej impedancji, w przypadku układów CMOS oznacza to bardzo dużą czułość na zewnętrzne zakłócenia (pole elektrostatyczne i pole elektromagnetyczne).
  • REKLAMA
  • #3 6045523
    lukeuk
    Poziom 10  
    a tak cos czytalem o tym pullupie i zakluceniach - to co mowisz ma absolutnie sens. Da sie to jakos ustawic aby nie bylo takie czule?
  • REKLAMA
  • #4 6045547
    d3zerter
    Poziom 12  
    PORTx włącza rezystory podciągające, gdzie x to port A, B,C lub D. Wtedy gdy zewrzesz dany pin (y) do masy to PINxy da 0. Trzeba pamiętać żeby DDRx był ustawiony jako wejście (0), w przeciwnym wypadku poplynie prąd zwarciowy.
  • REKLAMA
  • #5 6045558
    lukeuk
    Poziom 10  
    Ustawilem PORTx na 1 i zaklucenia uciekly uff.. swoja droga do czego potrzebna jest tak wysoka czulosc?
  • #6 6045608
    mreq
    Poziom 21  
    Nie wysoka czułość tylko wysoka impedancja - chodzi o to, że możesz mieć połączone kilka wyjść i jak inne jest aktywne to nieaktywne dajesz w stan trzeci żeby nie kolidowało.
REKLAMA