Cześć,
Mam drobny problem. Chciałem na szybko wykonać sobie tester silników krokowych. Użyłem tego co pod ręką wygodne do szybkiej realizacji testera (a że armata na wróble wyszła to mało istotne).
Na panelu tft jest sobie slider do regulacji prędkości (parametr speed w zakresie 0-500). Dalej wpisuję ten parametr do rejestru OCR3 w taki sposób: OCR3 =504- speed (po to by wartość maksymalna prędkości była ograniczona do OCR3=4
W przerwaniu CTC zmieniam stan sygnału CLK (nie generuję go sprzętowo gdyż w przerwaniu wygodnie mogę odliczać zadaną ilość kroków co właśnie robię).
Problem jest wtedy gdy zwiększam wartość prędkości na sliderze czyli wpisuję mniejszą wartość do rejestru OCRx niż aktualna - wówczas na chwilę przestają być generowane impulsy na wyjściu = powstaje krótka pauza. Czytałem dokumentację i napisane tam jest, że:
Czy właśnie to jest powodem mojego drobnego problemu? Dodawałem już atomowy dostęp do rejestru OCR3A ale to nie o to chodziło więc stąd pytani do Was, o co tu chodzi?
Konfiguracja timera:
A tak wygląda samo przerwanie CTC:
[/code]
Mam drobny problem. Chciałem na szybko wykonać sobie tester silników krokowych. Użyłem tego co pod ręką wygodne do szybkiej realizacji testera (a że armata na wróble wyszła to mało istotne).
Na panelu tft jest sobie slider do regulacji prędkości (parametr speed w zakresie 0-500). Dalej wpisuję ten parametr do rejestru OCR3 w taki sposób: OCR3 =504- speed (po to by wartość maksymalna prędkości była ograniczona do OCR3=4
W przerwaniu CTC zmieniam stan sygnału CLK (nie generuję go sprzętowo gdyż w przerwaniu wygodnie mogę odliczać zadaną ilość kroków co właśnie robię).
Problem jest wtedy gdy zwiększam wartość prędkości na sliderze czyli wpisuję mniejszą wartość do rejestru OCRx niż aktualna - wówczas na chwilę przestają być generowane impulsy na wyjściu = powstaje krótka pauza. Czytałem dokumentację i napisane tam jest, że:
Cytat:there are risks involved when changing TCNTn when using any of the output compare
channels, independent of whether the Timer/Counter is running or not. If the value written to
TCNTn equals the OCRnx value, the compare match will be missed, resulting in incorrect waveform
generation.
Czy właśnie to jest powodem mojego drobnego problemu? Dodawałem już atomowy dostęp do rejestru OCR3A ale to nie o to chodziło więc stąd pytani do Was, o co tu chodzi?
Konfiguracja timera:
Kod: C / C++
A tak wygląda samo przerwanie CTC:
Kod: C / C++
[/code]