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][C] Wejście bez podciągnięcia

smolar758 03 Lip 2009 23:09 1269 3
REKLAMA
  • #1 6736626
    smolar758
    Poziom 10  
    Zaczynam przygodę z AVR i już na początku natknąłem się na problem :(
    Wymyśliłem sobie układ, który w uproszczeniu ma działać w ten sposób:
    uC Atmega8 z wewnętrznym oscylatorem 1MHz - na PC0 podłączony jest LED przez opornik do masy. Dioda ma się świecić, gdy na PB4 pojawi się napięcie 5V załączane włącznikiem z obwodu zasilania uC.
    napisałem taki kod w C:
    
    #include <avr/io.h>
    
    int main ()
    {
    DDRC|=((1<<0)); //PC0 jako wyjście - LED
    DDRC&=~(1<<4);  //PC4 jako wejście bez podciagnięcia
    PORTC&=~(1<<4); //
    while(1)
    { 
    if (PINC & (1<<4))
    
    {
    PORTC|=((1<<0)); //jeśli na PC4 podane jest 5V to LED zapalony
    }
    
    else
    {
    PORTC&=~((1<<0)); //jeśli na PC4 nie ma 5V to LED zgaszony
    }
    
    } //end while
    } //end main
    

    Niestety układ mój i programik nie działa tak jak tego oczekuję, gdyż dioda mimo braku napięcia na PC4 świeci się powiedzmy połową swojej jasności a powinna być zgaszona. Po podaniu napięcia na PC4 rozświetla się do pełnej jasności :|
    W symulatorze program działa prawidłowo.
    Nie wiem gdzie popełniłem błąd :(
    Przy ustawieniu wejścia z podciągnięciem napięcia i zwieraniu PC4 do masy układ zachowuje się książkowo.
    Czy może mi ktoś wyjaśnić dlaczego tak się dzieje?
    Jak rozwiązać ten problem?
    Pozdrawiam
    SMolar

    Poprawiłem tytuł.
    [zumek]
  • REKLAMA
  • #2 6736711
    kuuczoo
    Poziom 26  
    Jeśli pin ustawisz jako wejście i go nie podciągniesz to pin jest w stanie wysokiej impedancji. Jeśli nic z nim nie robisz (wisi, tak jak w twoim wypadku gdy nie jest wysterowany) to mega nie wie do końca jaki ma stan i waha się między stanem 1 i 0, dlatego dioda ci lekko świeci (po prostu bardzo szybko mruga. Gdy zrobisz pullup to mega nie ma kłopotu z interpretacją i robi co jej każesz.
    Jeśli koniecznie chcesz robić układ bez wewnętrznego pullup to powinieneś dać na zewnątrz pulldown do masy, a najprostszym rozwiązaniem jest zrobienie tego tak jak robią wszyscy, czyli pullup wewnętrzny i przycisk do masy.
  • REKLAMA
  • #3 6736735
    Brutus_gsm
    Poziom 25  
    A tak w ogóle, to lepszym sposobem sterowania diody jest podłączenie jej anody przez rezystor do plusa zasilania a katody do mikrokontrolera. Wtedy steruje się nią odwrotnie, przy stanie wysokim na nóżce mikrokontrolera dioda nie świeci, a przy stanie niskim tak.

    No i lepiej jest zwierać wejścia do masy i ustawiać programowego pull-up'a wejścia. No chyba, że musisz z jakiegoś względu zwierać do plusa, wtedy robisz hardwarowego pull-down'a, czyli rezystor do masy i wtedy możesz już bez zmartwień zwierać do plusa ;)
  • #4 6736844
    smolar758
    Poziom 10  
    Mega dzięki!!!
    10kOhm do masy i wszystko jest OK :)
    Zamykam temat
REKLAMA