Witam, robię sterowanie czasowe pewnym układem i próbuję wykorzystać do tego tryb CTC.
Ustawiam tak rejestry:
Tccr1a = 00110000 / COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10
Tccr1b = 00001100 / ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10
Ocr1a = 65530 / liczy długo, dużo więcej jak okres czasu który potrzebuje
Ocr1b = 200 / okresy czasu ustawiane w programie
Wg tabelki i ustawionych wyżej rejestrów oraz to jak ja rozumiem tą tabelkę to:
Timer1 liczy do OCR1A i się automatycznie zeruje. Nie powinien wtedy zmienić stanu portu OCR1A (PORTB.1), bo COM1A1=0 i COM1A0=0.
Timer1 gdy wcześniej doliczy do OCR1B powinien ustawić port z OCR1B (PORTB.2) w stan wysoki, bo COM1B1=1 i COM1B0=1
Czy dobrze rozumiem działanie tego truby z wykorzystaniem OCR1B? Czy poza rejestrami Tccr1a i Tccr1b muszę coś jeszcze ustawiać aby PORTB.2 został ustawiony gdy Timer1 doliczy do OCR1B? Czy może ustawienie COM1B1=1 i COM1B0=1 powosuje że PORTB.2 jest ciągle w stanie wysokim?
Pytam bo jestem w trakcie testowania i wygląda to tak, że PORTB.2 jest u mnie ciągle w stanie wysokim, niezależnie od stanu licznika. Nie więc czy robię jakiś czeski błąd czy o czymś zapomniałem w konfiguracji. Oczywiście PORTB.2 ustawiony jako wyjście.
Chciałbym aby w momencie gdy timer doliczy do OC1B, to PORTB.2=1 i najlepiej zrobić to bez wykorzystania obsługi wektorów przerwań.
Ustawiam tak rejestry:
Tccr1a = 00110000 / COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10
Tccr1b = 00001100 / ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10
Ocr1a = 65530 / liczy długo, dużo więcej jak okres czasu który potrzebuje
Ocr1b = 200 / okresy czasu ustawiane w programie
Wg tabelki i ustawionych wyżej rejestrów oraz to jak ja rozumiem tą tabelkę to:
Timer1 liczy do OCR1A i się automatycznie zeruje. Nie powinien wtedy zmienić stanu portu OCR1A (PORTB.1), bo COM1A1=0 i COM1A0=0.
Timer1 gdy wcześniej doliczy do OCR1B powinien ustawić port z OCR1B (PORTB.2) w stan wysoki, bo COM1B1=1 i COM1B0=1
Czy dobrze rozumiem działanie tego truby z wykorzystaniem OCR1B? Czy poza rejestrami Tccr1a i Tccr1b muszę coś jeszcze ustawiać aby PORTB.2 został ustawiony gdy Timer1 doliczy do OCR1B? Czy może ustawienie COM1B1=1 i COM1B0=1 powosuje że PORTB.2 jest ciągle w stanie wysokim?
Pytam bo jestem w trakcie testowania i wygląda to tak, że PORTB.2 jest u mnie ciągle w stanie wysokim, niezależnie od stanu licznika. Nie więc czy robię jakiś czeski błąd czy o czymś zapomniałem w konfiguracji. Oczywiście PORTB.2 ustawiony jako wyjście.
Chciałbym aby w momencie gdy timer doliczy do OC1B, to PORTB.2=1 i najlepiej zrobić to bez wykorzystania obsługi wektorów przerwań.
