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

ATmega128, [c] , Obsługa przycisku

pmc 28 Gru 2010 17:24 1656 7
REKLAMA
  • #1 8924793
    pmc
    Poziom 2  
    Witam! Bardzo proszę o pomoc w zrealizowaniu takiego zadania: kupiłem zestaw uruchomieniowy MMEVAL1 firmy MikroMania żeby nauczyć się programowania mikrokontrolerów, zestaw działa w oparciu o ATmegę128. Udało mi się opanować obsługę diody i wyświetlacza ale mam problem z obsługą przycisku - chciałbym, żeby po naciśnięciu zapalała się dioda a po puszczeniu przycisku gasiła, niestety po przeszukaniu forum i innych stron udało mi się znaleźć tylko kod w stylu:

    
    DDRE = 1<<_BV(6);
    
    while(1)
    {
    if(PINE&_BV(6)!=0)
      //zapal diode
    else
      //zgaś diodę
    }
    


    ten kod niestety nie działa. Zamieszczam poniżej schemat układu aby nie było wątpliwości co jest jak podłączone. Bardzo proszę o pomoc.

    płyta główna
    płytka z procesorem

    Pozdrawiam
  • REKLAMA
  • #2 8924938
    krdln
    Poziom 13  
    pmc napisał:

    
    DDRE = 1<<_BV(6);
    
    while(1)
    {
    if(PINE&_BV(6)!=0)
      //zapal diode
    else
      //zgaś diodę
    }
    


    Jeśli przycisk jest zrobiony tak, że zwiera pin z masą to ten kod nie zadziała, bo, gdy przycisk jest wciśnięty, to PINE&_BV(6)==0, nie !=. Po drugie,
    to bzdura, samo _BV(6) to odpowiednik 1<<6. Po trzecie, dla przycisku DDR musi być zerowy, inaczej może być zwarcie.

    spróbuj tak:
    
    PORTE = _BV(6); //włączenie podciągania, nieobowiązkowe na twojej płytce
    DDRD = _BV(4);
    
    while(1)
    {
    if(PINE&_BV(6)==0)
      PORTD |= _BV(4); //zapal
    else
      PORTD &= ~_BV(4); //zgas
    }
    


    Poza tym, na Twojej płytce nie musisz robić wew. podciągania, bo jest już zewnętrzne, ale nie zaszkodzi.

    Pozdrawiam
  • REKLAMA
  • #3 8925148
    pmc
    Poziom 2  
    Wielkie dzięki, wszystko działa! :-)

    Mam jeszcze prośbę o wytłumaczenie na czym polega to "podciąganie" bo już w kilku miejscach spotkałem się z tym określeniem?
  • #4 8925356
    krdln
    Poziom 13  
    Heh, za takie pytania to powinno się odsyłać do szukarki :P Ale akurat pamiętam, że jak kiedyś nie wiedziałem co to, to szukałem i znajdowałem same posty z tekstami typu „włącz podciąganie” „nie ma podciągania”. A przykładu jak to zrobić w c to nie było.

    A więc, podciągnięcie A do B (w tym wypadku do VCC) to wstawienie dużego opornika od A do B (duży przeważnie oznacza kilka–kilkadziesiąt kilo). U Ciebie na schemacie jest tam 10kΩ do VCC. Napisanie PORTX |= _BV(Y) jeśli ten pin jest ustawiony jako wejście, włącza wewnętrzny rezystor, który ma kilkadziesiąt kilo, a może i więcej.

    Stosuje się to, gdyż bez pociągania mielibyśmy taki efekt:
    — przycisk wciśnięty: na pinie mamy napięcie masy, czyli logiczne zero
    — przycisk niewciśnięty: pin jest do niczego nie podłączony → zbieramy szumy
    Podciąganie do VCC powoduje, że dla niewciśniętego przycisku mamy napięcie VCC, czyli logiczną jedynkę
  • REKLAMA
  • #5 8925382
    pmc
    Poziom 2  
    Jeszcze raz wielkie dzięki :)
  • REKLAMA
  • Pomocny post
    #6 8925398
    krdln
    Poziom 13  
    Skoro tak dziękujesz, to jest taki przycisk „pomógł” :P Nie, żebym się narzucał, tak tylko mówię :P
  • #7 8927666
    mgiro
    Poziom 22  
    Poczytaj kurs programowania w C z EdW, może Ci się przyda. Mi sie przydal.
  • #8 8929731
    honestly
    Poziom 10  
    Na tej stronce tez jest wszystko ladnie wytłumaczone:

    hobby.abxyz.bplaced.net
REKLAMA