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

AVR - Reżim czasowy a przerwanie - wykrywacz metalu

PiotrKostek 31 Paź 2013 23:46 1110 4
  • #1 31 Paź 2013 23:46
    PiotrKostek
    Poziom 2  

    Witajcie !

    Wracam po latach do elektroniki - kiedyś zrobiłem wykrywacz metali Stuart2 na PICu, teraz chciałbym zrobić sobie ten projekt całkowicie po swojemu, od nowa i na AVR. Czytam o programowaniu AVRa i o przerwaniach - że w przerwaniu nie powinno się umieszczać opóźnień. PRogram musi działać w dużym reżimie czasowym - jest to wykrywacz PI. Wymyśliłem sobie to tak, że pętla główna będzie sprawdzać przyciski, obsługiwać menu, wyświetlacz, generować dźwięk i próbkować napięcie.
    W przerwaniu generowanym timerem z częstotliwością kilkuset Hz planowałem umieścić obsługę impulsu - według takiego algorytmu - impuls - kilkadziesiąt us, czekaj kilkadziesiąt us, otwórz cd4066, czekaj kilkanaście us, zamknij cd4066. wyjdź z przerwania. poszczególne czasy mogą być ustawiane w niewielkim zakresie - zmiana parametrów wykrywania.
    Jeśli nie jest dobrym pomysłem umieszczanie tych opóźnień w przerwaniu, to jak to zrobić, żeby było poprawnie ?
    Dopiero zaczynam programowanie AVRów, ale nie oczekuję gotowego rozwiązania - raczej wskazania zasad na jakich się poprawnie obsługuje takie sytuacje.

    Piotrek

    0 4
  • #2 01 Lis 2013 01:36
    excray
    Poziom 39  

    Możesz umieścić zmienną pomocniczą w przerwaniu na podstawie której będziesz wykonywać kolejne etapy:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 01 Lis 2013 09:35
    tmf
    Moderator Mikrokontrolery Projektowanie

    Ja bym się zastanowił jak do tego wykorzystać timer i jak zrobić, żeby potrzebne sygnały generować sprzętowo, a jeśli nie całkowicie sprzętowo, to chociaż, żeby maksymalnie sprzęt wykorzystać.

    0
  • #4 01 Lis 2013 11:18
    PiotrKostek
    Poziom 2  

    Pierwszy sposób nie bardzo pasuje - ze względu na fakt, że obostrzenia czasowe są tutaj bardzo duże i w zasadzie krytyczne, a nie wiadomo w którym miejscu będzie program w pętli głównej po ustawieniu flagi zanim zacznie wykonywać część impulsową.
    Drugi sposób jest chyba bardziej odpowiedni - masz na myśli ładowanie timera kolejną wartością opóźnienia ? tylko jak wtedy zidentyfikować którą część impulsu wykonywać w danym momencie ? podmieniać adres procedury przerwania?

    0
  • Pomocny post
    #5 01 Lis 2013 21:57
    BlueDraco
    Specjalista - Mikrokontrolery

    Zrób to w konwencji automatu - zmienna określające stan i duży switch (stan) w obsłudze przerwania z odpowiednim zachowaniem w każdym stanie.

    Na ogół wygodnie jest to zrobić przy stałej częstotliwości przerwań timera, odpowiadającej najkrótszemu odcinkowi czasu, który trzeba odmierzać lub takiemu, który jest podwielokrotnością wszystkich odmierzanych czasów.

    0