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.

Wykrywanie zbocza narastającego bez przerwania

05 Cze 2010 19:56 7186 30
  • Poziom 43  
    Tak, co za problem z funkcją?
  • Poziom 33  
    Musisz próbkować stan pinu, najlepiej w przerwaniu z timera. Jeśli z 0 zmieni się na 1 to ustawiasz flagę i w głównej pętli wywołujesz funkcję;)
  • Poziom 43  
    No ale pytasz o funkcję czy o jej wywoływanie? Bo myślałem że o funkcję :D
    No to jak bez przerwań to musisz to sprawdzać w programie głównym. Co jest bez sensu.
  • Poziom 28  
    A czemu nie chcesz wykonywac przerwan? To jedyny sensowny sposob zatrudnic do tego przerwanie. W przeciwnym razi procesor nic innego nie bedzie robil tylko sprawdzal czy sie zbocze zmienilo... I cala para w gwizdek...
  • Poziom 33  
    To tak jak pisze atom, musisz w mainie sprawdzać stan pinu, tyle że nazwanie tego reakcją na zbocze to byłoby mocno przesadzone;)
  • Poziom 24  
    Nie napisałeś nic o tym, ile będzie trwał stan wysoki (czas minimalny jeśli dany pin jest podciągany pod VCC), czy są jakieś czasy krytyczne. Co ile może pojawić się zbocze ?

    Generalnie ja to widzę tak: potrzebujesz zmienną. Jej wartość odpowiada wartości danego pinu, na którym masz wykrywać zbocze. Załóżmy wartość początkową 0. Gdy zmienna=0 i odczytany stan portu = 1, to znaczy, że wystąpiło zbocze narastające. wykonujesz co chcesz i zapisujesz do zmiennej jedynkę. jak znów sprawdzasz pin i jest jedynka, ale zmienna też jedynka to nic nie robisz. zmiana stanu pinu na zero to do zmiennej też zero. Naturalnie nic nie robisz bo zbocze opadające Cię nie interesuje. Tak z grubsza można to rozwiązać. Od ciebie zależy, gdzie to będziesz sprawdzał.

    Pytanie tylko, dlaczego masz takie ograniczenie i czy jest sens coś takiego robić.
  • Poziom 43  
    A Timer w tym urządzeniu też już jest nieużywalny?
  • Poziom 20  
    Tak się podepnę pod temat: jak strome musi być zbocze, żeby było wykryte? Dowolna zmiana 0/1 w sumie chyba wystarczy w avr? I wtedy zmiana przy minimalnym poziomie dla 1? Bo "zbocze" to dumnie brzmi ;) ...

    Jak nie masz przerwania na pinie to jakiś kablek górą pociągnij, skoro musisz ;) . Albo zmień kontroler na mający pcint - na pewno nie masz?

    Albo jeszcze inaczej, do czego Ci to zbocze? Co robisz i jak krytyczne czasowo to jest?
  • Poziom 24  
    Przecież kolega @_Robak_ wypowiedział się już, że nazywanie tego reakcją na zbocze jest mocno przesadzone. Realnie więc jest to reakcja na zmianę stanu pinu.

    Teraz wypadałoby, aby autor tematu odpowiedział na zadane już pytania:
    Z jaką częstotliwością jest sygnał, na którego zbocze ma reagować ?
    Czy czasy trwania stanu wysokiego i niskiego są identyczne ?
  • Poziom 20  
    Ja pytam ogólnie jak się zachowuje avr ;) .

    A do autora było, jak ważne jest wykrycie zmiany czasowo (co wykrywa i po co) - znaczy jak nie w przerwaniu to jaki może być poślizg.
  • Poziom 38  
    dokładne dane, progi przełączeń, szybkość narastania itd sa w dataszicie
  • Moderator Mikrokontrolery Projektowanie
    PO. napisał:
    Tak się podepnę pod temat: jak strome musi być zbocze, żeby było wykryte? Dowolna zmiana 0/1 w sumie chyba wystarczy w avr? I wtedy zmiana przy minimalnym poziomie dla 1? Bo "zbocze" to dumnie brzmi ;) ...


    Jak przedmówca napisał maksymalne czasy narastania/opadania na pinach są podane w nocie procesora. Nie mogą być dowolnie duże, bo poziomy 0 i 1 logiczne są ściśle zdefiniowane. Pomiędzy nimi jest obszar zabroniony, w którym sygnał cyfrowy nie może być. Rodzi to różne problemy, od nadmiernego poboru prądu (przewodzą dwa tranzystory a nie jeden) do problemów niezdefiniowanych - nie wiadomo jak się zachowają wewnętrzne układy detekcji po pojawieniu się stanu nieustalonego na wejściu. Dlatego jeśli sygnał zmienia się wolno trzeba dodać bramkę Schmitta, wykorzystać wbudowany komparator, ADC itd.
  • Poziom 24  
    Przepraszam, że nieśmiało zapytam, ale na co tu komu progi narastania z noty procesora ?
  • Poziom 43  
    tmf napisał:
    PO. napisał:
    Tak się podepnę pod temat: jak strome musi być zbocze, żeby było wykryte? Dowolna zmiana 0/1 w sumie chyba wystarczy w avr? I wtedy zmiana przy minimalnym poziomie dla 1? Bo "zbocze" to dumnie brzmi ;) ...


    Jak przedmówca napisał maksymalne czasy narastania/opadania na pinach są podane w nocie procesora. Nie mogą być dowolnie duże, bo poziomy 0 i 1 logiczne są ściśle zdefiniowane. Pomiędzy nimi jest obszar zabroniony, w którym sygnał cyfrowy nie może być. Rodzi to różne problemy, od nadmiernego poboru prądu (przewodzą dwa tranzystory a nie jeden) do problemów niezdefiniowanych - nie wiadomo jak się zachowają wewnętrzne układy detekcji po pojawieniu się stanu nieustalonego na wejściu. Dlatego jeśli sygnał zmienia się wolno trzeba dodać bramkę Schmitta, wykorzystać wbudowany komparator, ADC itd.


    AVRy mają wbudowane bramki Schmitta na wejściach i napięcia z przedziału napięć zabronionych są w pełni akceptowalne.
  • Moderator Mikrokontrolery Projektowanie
    Możesz podać źródło do tej informacji? Ze schematu portu IO w DS bynajmniej to nie wynika, a biorąc pod uwagę, że dla innych interfejsów na pinach maksymalne czasy narastania/opadania są podane to nie spodziewał bym się poprawnej pracy dla stanów przejściowych.
  • Poziom 43  
    A jak myślisz, co jest źródłem tej informacji? No wiadomo że datasheet.
    No choćby z dopuszczalnego napięcia na pinie (-0.3...VCC+0.3V).
    Albo z tego że na pinach są też wejścia ADC i działa to.
    Tu mam na myśli ogólne działanie.
    A teraz działanie "cyfrowe" mimo niespecjalnie cyfrowego sygnału na wejściu: też zadziała bo na wejściach jest histereza.
    A tak po za tym: ze schematu w datasheecie owszem, wynika to (to że to zadziała).
    A po za tym to nie rozumiem jaki to ma związek z tematem. Co za różnica jaki jest przebieg? Tak samo by to działało/niedziałało niezależnie od tego czy wykorzysta się sprzętowe INTx czy programowe wykrywanie zbocza.
  • Poziom 24  
    Koledzy rozmawiają o niczym. Nie ważne jest ile V będzie na porcie. Istotne jest jedynie, czy wartość ta zostanie potraktowana jako logiczne zero, czy jako logiczna jedynka przez mikrokontroler.
  • Poziom 38  
    sulfur napisał:
    Nie ważne jest ile V będzie na porcie. Istotne jest jedynie, czy wartość ta zostanie potraktowana jako logiczne zero, czy jako logiczna jedynka przez mikrokontroler.


    zeby bylo wiadomo czy zostanie to potraktowane jako 0 czy 1, należy zerknąć do datasheet'a i sprawdzić czy podana ilość woltów - zalicza się do 0 czy 1. Sam sobie zaprzeczyłeś, nie wiadomo czy dla zadeklarowanych poziomów logicznych 0 - GND, 1 - 5V po przyłożeniu 2,5V będzie 0 czy 1? :)
  • Poziom 33  
    Przemo_2014 napisał:
    Mam gotowe urządzenie i pin na którym miało by zachodzić sprawdzanie nie jest pinem od przerwania

    Bicie piany przez 2 dni.
    Może podasz jaki pin w jakim procesorze i co przy nim pisze w opisie.
    Szklana kula dziś ma wolne.
    Wstępnie powiem ze nie zrobisz nic na pinach masy i zasilania.

    N.
  • Poziom 24  
    gaskoin napisał:
    zeby bylo wiadomo czy zostanie to potraktowane jako 0 czy 1, należy zerknąć do datasheet'a i sprawdzić czy podana ilość woltów - zalicza się do 0 czy 1. Sam sobie zaprzeczyłeś, nie wiadomo czy dla zadeklarowanych poziomów logicznych 0 - GND, 1 - 5V po przyłożeniu 2,5V będzie 0 czy 1? :)


    Tzn gdzie konkretnie sam sobie zaprzeczyłem? I co to kogo obchodzi, czy 2,5V to jest "0" czy "1" ? Istotą tematu jest jak zaprogramować wykrywanie zmiany STANU LOGICZNEGO na nóżce mikrokontrolera, co już zresztą z grubsza opisałem.
  • Poziom 38  
    dobra zakonczmy ta bezsensowna dyskusje, nie chce sie klocic o glupoty. Tym bardziej, że podejrzewam, iż w tym projekcie zastanawianie się nad rzeczami typu szybkość przełączenia nie ma w ogóle znaczenia

    Jeżeli wyeliminowane są drgania ze styków (o ile na styku się to opiera) i nie będa występowały żadne przeszkadzające stany nieustalone to wystarczy pamiętać dwa stany - bieżący i poprzedni i je ze soba porównywać, z resztą to gdzies wyzej juz zostalo napisane
  • Poziom 24  
    No właśnie i to jest konkretna odpowiedź na zadane pytanie. Nad drganiami zestyków, czasami trwania stanów logicznych (a co za tym idzie częstotliwością) i tym podobnymi rzeczami póki co nie ma sensu się zajmować, jako że Autor tematu podał za mało danych, żeby takie rzeczy rozpatrywać, a jak słusznie zauważył kolega @Nawigator szklana kula ma dziś wolne.
  • Poziom 20  
    I jak ciekawie się wątek rozwinął :) ...
    A pytanie zadawałem bo mi tak luźno przyszło do głowy robienie klawiatury na PCINT albo fototranzystora podłączenie i wykrywanie 0/1.
    Dopóki autor nie wróci to możemy offtopować :P .
  • Moderator Mikrokontrolery Projektowanie
    atom1477 napisał:
    A jak myślisz, co jest źródłem tej informacji? No wiadomo że datasheet.
    No choćby z dopuszczalnego napięcia na pinie (-0.3...VCC+0.3V).
    Albo z tego że na pinach są też wejścia ADC i działa to.
    Tu mam na myśli ogólne działanie.
    A teraz działanie "cyfrowe" mimo niespecjalnie cyfrowego sygnału na wejściu: też zadziała bo na wejściach jest histereza.
    A tak po za tym: ze schematu w datasheecie owszem, wynika to (to że to zadziała).
    A po za tym to nie rozumiem jaki to ma związek z tematem. Co za różnica jaki jest przebieg? Tak samo by to działało/niedziałało niezależnie od tego czy wykorzysta się sprzętowe INTx czy programowe wykrywanie zbocza.


    No właśnie pytam bo nigdzie w DS nie natrafiłem na info, że AVRy mają wejście Schmitta. Dlatego proszę o ukierunkowanie.
    A z tematem ma dużo wspólnego - jeśli chcesz wykorzystać przerwanie od pin change wyzwalane zboczem a nie poziomem to może być problem. Jeśli napięcie utrzymuje się w stanie pomiędzy 0 i 1 to jak zareaguje procesor i przerzutnik odpowiedzialny za detekcję zbocza? Zauważ, że dla np. interfejsu XMem, SPI, TWI itd. te czasy są podane. Gdyby to było bez znaczenia to przecież by ich nie podawali.
  • Poziom 20  
    Jest bardzo niejasno wspomniane że coś jest gdzieś do schmitta podłączone - właśnie przetrzepałem pdfa szukajką i wyskoczyło całe trzy razy (w tym raz od i2c).
  • Poziom 33  
    Zobacz na obrazek p.t. General Digital I/O i znajdziesz trójkącik przed Synchronizerem. Są też obrazki na końcu pdf-a Pin Treshold and Histeresis.

    N.