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

Zbocze narastające w ATmega8 w C - dioda nie reaguje na przycisk

ienecode 18 Lut 2015 19:03 1230 12
REKLAMA
  • #1 14452491
    ienecode
    Poziom 21  
    Witam. Zrobiłem zbocze narastające podczas włączenia przycisku.

    Przycisk 2-pinowy który zwieram do masy. Jednak coś jest nie tak... Po wciśnięciu przycisku wyjście (dioda) powinna mrygnąć jednak nic się nie dzieje... Mój kod to:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Wydaje się wszystko w porządku....
  • REKLAMA
  • #2 14452553
    Pi0trek121
    Poziom 23  
    Na samym początku p_mem = 0 tak więc jak przyciśniesz przycisk wejdzie w if-a czyli poda na port 0 następnie jak będziesz trzymał przycisk do p_mem = 1 a jak puścisz p_mem = 0 dla mnie trochę bez sensu cały kod :P napisz co chciałeś uzyskać
  • #3 14452629
    ienecode
    Poziom 21  
    Bo to nie cały kod. Chodzi o to że jak mam pętlę nieskończoną a w niej ifa:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    to po spełnieniu warunku w if'ie instrukcje w nim mają się wykonać tylko raz i w całości . Dlatego stwierdziłem że po wykryciu zbocza narastającego klawisza PB0 załatwiło by sprawę.

    Bo jeśli wezmę w ifie coś takiego if((!(PINB & (1<<0))) to dłuższe wciśnięcie klawisza spowoduję wykonanie się kilkakrotnie instrukcji w if'ie.
  • REKLAMA
  • #4 14452698
    Pi0trek121
    Poziom 23  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    To jest tak po mojemu, jak wciśniesz przycisk, to warunek tylko raz się wykona co prawda w tm wypadku to bez różnicy, bo nie da się bardziej włączyć włączoną diode :P
  • REKLAMA
  • #5 14452760
    ienecode
    Poziom 21  
    I w tym przypadku wyjście - dioda - PC4 powinna chociaż mignąć a nic się nie dzieje...

    Dodano po 3 [minuty]:

    A dioda tylko mrugnie jak wrzucę program , a potem już cisza , nie reaguje na klawisz -- tak jak by cały czas był w else
  • #6 14452821
    Pi0trek121
    Poziom 23  
    pokaż schemat, jak masz możliwość włącz debugowanie i zobacz gdzie program krąży.
  • #7 14452843
    ienecode
    Poziom 21  
    Chyba znalazłem błąd.

    Zaraz po :

    blokada = 1;
    PORTC &= ~(1<<4);

    wrzuciłem _delay_ms(10) i działa....

    Dodano po 3 [minuty]:

    I mój przykład w pierwszym poście też działa tak jak twój, po tym jak dodałem opóźnienie...
  • REKLAMA
  • #8 14452867
    Pi0trek121
    Poziom 23  
    Ale to nie jest rozwiązanie, tylko półśrodek, pisałeś że to tylko część kodu, może w reszcie programu leży problem? Gdy będziesz robił jakąś komunikacje typu SPI lub I2C (mowie o rozwiązaniu software - owym) to niestety ale strasznie spowolni Ci ten delay wręcz uniemożliwi przesył danych
  • #9 14452887
    ienecode
    Poziom 21  
    Wiesz narazie uruchamiam tylko to co wrzuciłem na forum , wydawało mi się że bez tego opóźnienia powinno być w porządku ... Nie mam więcej pomysłów w czym tkwi problem... Oczywiście nie zostawię tego opóźnienia...
  • #10 14452901
    Pi0trek121
    Poziom 23  
    Pokaż swój schemat
  • #11 14453007
    ienecode
    Poziom 21  
    To tylko klawisz i dioda, no ale jak chcesz... Robione na szybko :
    Zbocze narastające w ATmega8 w C - dioda nie reaguje na przycisk
  • #13 14453614
    ienecode
    Poziom 21  
    Temat uważam za zamknięty.
REKLAMA