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

Jak odebrać impuls sygnału z silnika w PIC16F84A (C)?

11 Sie 2007 14:32 786 4
  • Poziom 10  
    Juz kiedys pisałam na ten temat --> https://www.elektroda.pl/rtvforum/topic793932.html

    Zrobiłam wszystko tak jak podpowiedziano mi wtedy:
    int temp;

    while (1) {
    temp = RA4; // zapisuje wartosc portu do temp-a
    while(1) { // nieskonczona petla
    if(RA4==1 && temp==0) { // wykrywam zbocze narastajace
    ...jakis kod...; // w tym miejscu rusza zapalanie diód :)
    break; // wychodze z petli while
    }
    }
    }

    Jednak nie wyłapuje mi sygnału, a napewno jest bo układ był wielokrotnie sprawdzany :/. Czy to wejście RA4 trzeba wcześniej jakoś zainicjalizowac?? A może coś źle w kodzie wpisałam.
  • Poziom 25  
    Jesli przed wejsciem do petli tej wewnetrznej temp bedzie zdefiniowany jako 1 to nigdy nie dojdzie do wyjscia z petli przez break.

    ->warunek (RA4==1 && temp==0) nigdy nie bedzie spelniony gdy temp==1 - wszystko bedzie krecilo sie w kolko

    Przeczytaj dokladnie listing w linku, ktory podalas - tam jest wiecej kodu i jest poprawny:)

    BF

    PS. Uzywaj [code] do zalaczania listingow.
  • Poziom 10  
    A już wiem :) Nie miałam tego drugiego ifa, bo nie potrzebna mi była reakcja na opadajace zbocze, a teraz widze, ze jest potrzebny przynajmniej po to, żeby wyjsc z while'a :D. Dzieki.

    Dodano po 1 [godziny] 4 [minuty]:

    Ehh... Dałam tego ifa z break, ale to w sumie nie rozwiazuje problemu RA4==1 i temp==1. Jak narazie tylko raz mi wykrywa ten sygnał, a potem juz sie zapetla...

    Kod wyglada tak:

    Code:

    while(1) {
       temp = RA4; 
       while(1) { 
             if(RA4==1 && temp==0) { 
               godzina();     //funkcja zapalajaca odpowiednie diody
               break;
             }
             else if(RA4==0 && temp==1) break; 
        }
    }
  • Poziom 25  
    No Madzienko, zapetla sie bo wszystko masz w jeszcze jednym glownym while(1). Ustaw wiec sobie jakas flage gdy sygnal zostanie wykryty i wtedy zrob break z glownego while(1).

    BF
  • Poziom 10  
    Ale on mi sie nie zapętla w tym zewnetrznym while tylko w tym wewnętrznym. Pozatym w tym zewnętrznym powninien byc zapętlony, żeby non stop sprawdzac sygnał. Cos nie tak sie dzieje w tej wewnetrznej petli, bo raz wykrywa ten sygnal wchodzi do pierwszego ifa, swieci sie godzinka, przerywa wewnetrznego while break'iem, na nowo pobiera wartosc RA4 do tempa w zewnetrznej petli, a potem już się zapętla w tej wewnętrznej petli (nie wchodzi do zadnego z ifów), mimo tego, że sygnał z czujnika jest.