Witam,
Nie mogę sobie poradzić z konfiguracją licznika 16b (timer1) w procesorze atmega32. Potrzebuję sobie wygenerować impuls o zadanej długości, próbuje użyć do tego celu licznika w trybie CTC z ustawieniem "Clear OC1A/OC1B on compare match (Set output to low level)" a więc zawartość OCR1A będzie regulować długość impulsu.
Kod testowy:
Niestety, za cholerę nie chce to działać.
Wyjście OC1A jest ustawione na stan niski zaraz po inicjalizacji licznika, a nie dopiero po doliczeniu do OCR1A, jak głosi dokumentacja (wcześniejsze ręczne ustawienie OC1A (czy tez PD5) na stan wysoki nie pomaga i tak jest resetowane przy inicjalizacji licznika)
Co ciekawe inne tryby CTC jak:
*Toggle OC1A/OC1B on compare match (Set
output to low level)
*Set OC1A/OC1B on compare match (Set
output to high level)
działają idealnie, więc albo źle rozumiem dokumentacje, albo o czymś zapominam.
pzdr.
Nie mogę sobie poradzić z konfiguracją licznika 16b (timer1) w procesorze atmega32. Potrzebuję sobie wygenerować impuls o zadanej długości, próbuje użyć do tego celu licznika w trybie CTC z ustawieniem "Clear OC1A/OC1B on compare match (Set output to low level)" a więc zawartość OCR1A będzie regulować długość impulsu.
Kod testowy:
DDRD |= _BV(5); //OC1A (PD5) na wy
TCCR1A |= _BV(COM1A1) ; //nastawa "Clear OC1A/OC1B on compare match (Set
output to low level)"
TCCR1B |= _BV(WGM12); //wybor trybu CTC
TCCR1B |= _BV(CS10) | _BV(CS12); //int clock z prescalerem 1024
OCR1A = 2000; //na tych ustawieniach powinien doliczyc do 2000 po kilku sek
while(1);
}
Niestety, za cholerę nie chce to działać.
Wyjście OC1A jest ustawione na stan niski zaraz po inicjalizacji licznika, a nie dopiero po doliczeniu do OCR1A, jak głosi dokumentacja (wcześniejsze ręczne ustawienie OC1A (czy tez PD5) na stan wysoki nie pomaga i tak jest resetowane przy inicjalizacji licznika)
Co ciekawe inne tryby CTC jak:
*Toggle OC1A/OC1B on compare match (Set
output to low level)
*Set OC1A/OC1B on compare match (Set
output to high level)
działają idealnie, więc albo źle rozumiem dokumentacje, albo o czymś zapominam.
pzdr.
