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

[atmega8][C] Prostokątna fala

vViktor 30 Lip 2011 12:41 1179 4
REKLAMA
  • #1 9774533
    vViktor
    Poziom 12  
    Witam. Dopiero któryś dzień bawię się uC i stopniowo stawiam sobie nowe cele do zabawy. Ale do rzeczy:
    Aktualnie chciałbym wygenerować prostokątną falę na jednym z pinów jednocześnie mając do dyspozycji w kodzie łatwą manipulacje jej częstotliwości. Chciałbym zrobić to na timerach żeby czegoś się o nich przy okazji nauczyć. Aha, na razie nie podłączam kwarcu do mojej atmegi8 więc jeśli dobrze gdzieś wyczytałem to domyślnie taktuje ona z częstotliwością 1MHz?

    Przestudiowałem datasheeta i trochę stron z wujka google'a ale dalej nie potrafię zrozumieć jak dokładnie ustawić timery żeby działały tak jak chce. Wypociłem kod który jest zły i tutaj prośba. Czy ktoś mógłby mi wytłumaczyć dlaczego robię źle, bądź jeśli coś jest tu dobrze to wytłumaczyć jak poniższy kod poprawić? Najlepiej uczy mi się na przykładach więc byłoby miło jakby ktoś mi to wytłumaczył na celu który chce uzyskać.

    Pozdrawiam i załączam kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 9775179
    Fredy
    Poziom 27  
    Ten kod nie będzie ci działać. Aby zrobić to co chcesz to najlepiej użyć przerwań. Wtedy timer będzie ci liczył, a jak się przepełni to zgłosi ci przerwanie. W przerwaniu możesz np. zmienić stan któregoś pinu .
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #4 9775277
    LordBlick
    VIP Zasłużony dla elektroda
    Co prawda to co proponuję jest w asm i jest autoreklamą, ale napisane w miarę czytelnie, może załapiesz o co chodzi :
    https://www.elektroda.pl/rtvforum/topic1885957.html
    Powoli się zastanawiam na dopisaniem analoga w C, ale to raczej nie jutro...
    Tak przy okazji:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    To jest zbędne, używaj F_CPU definiowanego w Makefile.
  • #5 9775579
    vViktor
    Poziom 12  
    Dzięki za porady. Problem rozwiązałem stosując tryb CTC. Nie wiem czemu te Fast PWM nie działało ale już trudno. CTC mi aktualnie wystarcza :) Aktualny kod mojej funkcji square_wave jeśli kogoś interesuje:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA