Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega128, [c] , Obsługa przycisku

pmc 28 Gru 2010 17:24 1419 7
  • #1 28 Gru 2010 17:24
    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:

    Code:

    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

    0 7
  • #2 28 Gru 2010 17:51
    krdln
    Poziom 12  

    pmc napisał:

    Code:

    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,
    Code:
    1<<_BV(6)
    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:
    Code:

    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

    0
  • #3 28 Gru 2010 18:28
    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?

    0
  • #4 28 Gru 2010 18:59
    krdln
    Poziom 12  

    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ę

    0
  • #5 28 Gru 2010 19:04
    pmc
    Poziom 2  

    Jeszcze raz wielkie dzięki :)

    0
  • Pomocny post
    #6 28 Gru 2010 19:07
    krdln
    Poziom 12  

    Skoro tak dziękujesz, to jest taki przycisk „pomógł” :P Nie, żebym się narzucał, tak tylko mówię :P

    0
  • #7 29 Gru 2010 08:21
    mgiro
    Poziom 22  

    Poczytaj kurs programowania w C z EdW, może Ci się przyda. Mi sie przydal.

    0
  • #8 29 Gru 2010 16:41
    honestly
    Poziom 10  

    Na tej stronce tez jest wszystko ladnie wytłumaczone:

    hobby.abxyz.bplaced.net

    0