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

[Atmega32][C] Obrotomierz cyfrowy, symulator obrotów silnika..

djmdp 07 Maj 2011 20:00 1645 1
  • #1 9481937
    djmdp
    Poziom 16  
    Witam, zacząłem sobie dziś robić mały projekcik, są to 2 płytki z procesorami atmega32, jedna ma za zadanie naśladować silnik(prowizorycznie) jest generatorem impulsów prostokąt. z wykorzystaniem timera 16bit CTC, jeden kanał to częstotliwość a drugi to szerokość impulsu. Do przeliczania obrotów na minutę wykorzystałem wzorek:
    x=(F_CPU/(T1_PRESCALER*((float)obroty)/60))+1;
    Jak widać przelicza zmiennoprzecinkowo, żeby uniknąć pominięć w dzieleniu, na rozmiarze kodu narazie mi nie zależy, ale wartości OCR1A zgadzają się z liczonymi na palcach;). Tym urządzonkiem zadaje obroty drugiemu urządzeniu, które jest identyczne, z tym, że timer 16bit jest w trybie INPUT CAPTURE, moje pytanie jest, dlaczego zliczane czasy różnią się między sobą kwadratowo? tzn. nie ma stałego przesunięcia czasów tylko zmienne, gzie może być błąd w rozumowaniu/liczeniu? Jakie mogą być inne rozwiązania tego mini projektu niż input capture? Pozdrawiam.
  • #2 9487797
    kaczart
    Poziom 14  
    co do innego rozwiązania, na drugim uC daj wejście na któreś z zewnętrznych przerwań INTx, ustaw wyzwalanie przerwania na rosnace zbocze

    jak przyjdzie rosnace zbocze, zmien w przerwaniu wyzwalanie tego przerwania na opadajace zbocze

    jak przyjdzie opadajace zbocze, zmien w przerwaniu wyzwalanie tego przerwania na rosnace zbocze

    i tak w koło... w przerwaniu dajesz krótkie procedury co chcesz robić/zliczać itp.. rozwiązanie sprawdzone i działa.

    możesz również zrobić na dwóch INTx
REKLAMA