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

[ATMEGA32][C] - Timer1 - licznik impulsów. Pytanie.

krazin 16 Lut 2013 14:55 1638 10
  • #1 16 Lut 2013 14:55
    krazin
    Poziom 10  

    Witam.

    Potrzebuje zliczać impulsy z dwóch transoptorów szczelinowych.
    Problem polega na tym że jeżeli ustawię: np. Timer0 - obsługa przerwań, Timer2 - Generator PWM, to zostaje mi tylko Timer1 do zliczania impulsów.

    Dlatego też chciałbym spytać jak rozwiązać ten problem aby zliczać impulsy z dwóch transoptorów(potrzebne 2 timery w trybie liczników).
    Może da się to zrealizować za pomocą wejść OC1A/OC1B używając tylko Timer1.

    Proszę o naprowadzenie mnie na właściwy tok rozumowania.

    Z góry dziękuję za odpowiedz i pozdrawiam.

    0 10
  • CControls
  • #2 16 Lut 2013 15:05
    BlueDraco
    Specjalista - Mikrokontrolery

    Zliczaj programowo. O jakiej częstotliwości impulsów z transoptorów mówimy?

    0
  • Pomocny post
    #3 16 Lut 2013 15:18
    piotrva
    Moderator na urlopie...

    OCnX to wyjścia, nie wejścia.
    Skoro nie możesz odblokować timera0 (bo T0 i T1 można taktować z zewnątrz) to są opcje takie:
    1. Zastosowanie przerwań INT0 i INT1 z detekcją odpowiednich zbocz i zliczanie imp. w przerwaniach
    2. Polling pinów z odpowiednią częstotliwością
    Poza tym jaka częstotliwość impulsów?

    0
  • #4 16 Lut 2013 15:41
    krazin
    Poziom 10  

    Częstotliwość impulsów wynosi około 6kHz.

    Dwa timery są zarezerwowane dla PWM i przerwań.
    Chcę zastosować 2 transoptory w celu zwiększenia dokładności pomiaru prędkości obrotowej.
    Do pełni szczęścia potrzebował bym 4 Timerów , ale na pewno da się to inaczej rozwiązać.

    Pozdrawiam.

    0
  • CControls
  • Pomocny post
    #5 16 Lut 2013 15:46
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przy 6 kHz to można się pokusić o zliczanie programowe - czyli podajesz sygnał na wejścia mogące generować przerwania.
    Z drugiej strony, skoro stosujesz ATMega32, to może prościej wykorzystać ATXMEGA32, gdzie w zależności od wersji liczników masz nawet 8 (albo 16 8-bitowych) i sobie to ładnie sprzętowo rozwiążesz.

    1
  • #6 17 Lut 2013 12:45
    krazin
    Poziom 10  

    Dziękuje za odpowiedzi, spróbuję z wejściami generującymi przerwania. (Spróbuję wykorzystać dwa wejścia dla 2 transoptorów)
    ATXMEGA odpada z powodu braku programatora.
    Znalazłem też Atmega1284p w DIP40 (smd odpada) tylko nie jestem pewny czy programator USBasp poradzi sobie z zaprogramowaniem tego mikrokontrolera.

    Pozdrawiam.

    0
  • #8 17 Lut 2013 13:33
    piotrva
    Moderator na urlopie...

    krazin napisał:
    (smd odpada)

    tmf napisał:
    To kup XMEGA

    To raczej sprzeczność - Xmegi są tylko w SMD, ogólnie chyba wszystkie AVR z USB są w SMD.

    Co do atmegi1284 - po co Ci aż taki procesor? Nie wystarczy łatwiej dostępna 644A/PA - w środku wszystko ma takie samo jak 1284, tylko mniej pamięci, nawet DS ten sam ;)
    http://www.atmel.com/Images/8272S.pdf

    0
  • #10 17 Lut 2013 18:54
    krazin
    Poziom 10  

    Atmega644PA posiada 2 timery 8 bitowe i 1 16 bitowy, natomiast Atmega1284p posiada dwa timery 16 bitowe.
    Najpierw spróbuję rozwiązania z wykorzystaniem wejść generujących przerwania jak sugeruje użytkownik "tmf", chyba że wciąż będzie brakowało timerów to będę musiał pokusić się o AVR z 4 timerami.

    Pozdrawiam

    0