Witam Szanownych Forumowiczów,
w aktualnym projekcie muszę wygenerować trzy interwały czasowe z regulowaną długością. Poglądowy rysunek dołączony jest jako załącznik. T1ON powinien mieć regulację 1-100us, T2OFF (możliwie krótko - 5us), T3ON (możliwie krótko - 5us). Wykorzystywana przeze mnie Atmega taktowana jest zewnętrznym zegarem 20MHz. Wynika z tego, iż możliwa regulacja powinna wynosić 50ns. Oczywiście należy uwzględnić tu minimalny czas zmiany wartości w rejestrach ICR1 i OCR1B. Wykorzystuje Timer 1 (16bitowy) w trybie 14 (FastPWM z wartością TOP jako ICR1).
Pomysł na ten program dodany jest jako załącznik.
A to kod:
gdy wpiszę w zmienne interwałów czasowych np wartości 20 20 20 program przestaje działać poprawnie. Wydaje mi się, że 20 cykli zegara to dużo, by zmienić wartość rejestru. Zbocza są +1 w stosunku do rysunku, bo inaczej generuje tylko jeden puls/
Start jest wywoływany przyciskiem (czekam następnie chwilę by nie było drgań) i wywołuję kolejno metody InitTimer1() oraz Timer1ON_dwupulsowy().
Proszę o pomoc, gdyż siedzę na tym już kilka dni i nie wiem gdzie może być błąd.
w aktualnym projekcie muszę wygenerować trzy interwały czasowe z regulowaną długością. Poglądowy rysunek dołączony jest jako załącznik. T1ON powinien mieć regulację 1-100us, T2OFF (możliwie krótko - 5us), T3ON (możliwie krótko - 5us). Wykorzystywana przeze mnie Atmega taktowana jest zewnętrznym zegarem 20MHz. Wynika z tego, iż możliwa regulacja powinna wynosić 50ns. Oczywiście należy uwzględnić tu minimalny czas zmiany wartości w rejestrach ICR1 i OCR1B. Wykorzystuje Timer 1 (16bitowy) w trybie 14 (FastPWM z wartością TOP jako ICR1).
Pomysł na ten program dodany jest jako załącznik.
A to kod:
Kod: C / C++
gdy wpiszę w zmienne interwałów czasowych np wartości 20 20 20 program przestaje działać poprawnie. Wydaje mi się, że 20 cykli zegara to dużo, by zmienić wartość rejestru. Zbocza są +1 w stosunku do rysunku, bo inaczej generuje tylko jeden puls/
Start jest wywoływany przyciskiem (czekam następnie chwilę by nie było drgań) i wywołuję kolejno metody InitTimer1() oraz Timer1ON_dwupulsowy().
Proszę o pomoc, gdyż siedzę na tym już kilka dni i nie wiem gdzie może być błąd.