johnnny94 napisał: Wybrałem tryb 9 (Phase and Frequency Correct) i napisałem następujący kod:
Nienajlepszy to wybór, bo akurat w tym trybie wartośc TOP jest ustawiana w rejestrze OCR1A, służąca do kontroli częstotliwości pracy timera , tymsamym elinujesz możliwośc generowania fali kanałem A. W tej sytuacji generowanie fali
jest możliwe tylko w kanale B. Patrz ostatni fragment mojej poprzedniej wypowiedzi.
Gdybyś przyjrzał się dokładniej rysunkowi, który tam widnieje, to znalazłbyś wszystkie wartości/parametry ustawcze wyliczone dla twojej fali generowanej zarówno w kanale (A) jak i (B).
Jeżeli chcesz rozwiązac to zagadnienie samodzielnie i nie masz wprawy w konfigurowaniu timerów AVR, to potrzebujesz troche zorganizowac ten process ; - zacznij od przygotowania arkusza roboczego.
1. Przestudiuj albo wyprintuj tabelę 16-4. Waveform Generation Mode Bit Description..
(nie sadzę abyś ja zapamiętał w całości).
2. Wyprintuj także dwie tabelki dla TCCR1A i TCCR1B, które musisz wypełnic wartościami ustawień bitów odczytanych z tabeli16-3 (dla trybu 8 i 9 służy ta sama tabela) oraz tabeli 16-5 z której w zasadzie odczytasz tylko bity ustalające prescaler, co ustalisz po obliczeniu częstotliwości fali wyjściowej, podczas obliczania wartości TOP.
Zwróc szczególną uwagę które bity zawiera wybrany rejestr.
johnnny94 napisał:
Fala wyjściowa ma mieć 96.899225Hz (10ms+0,32ms)
Jak ty to wyliczyłes(?) .. Jeżeli stan niski ma trwac 0.010 sec.+ stan wysoki 0.032sec = 0.042 sec = T (okres).
Z czego; f (pwm) = 1/T - to zdaje się będzie około 23.809 Hz . Skonfrontuj z załączonym wyżej rysunkiem, który jest realnym przebiegiem twojej fali a nie tylko rysunkiem poglądowym.
Mając już znaną częstotliwośc wyjściową to powróc do datasheet i odszukaj podrozdział Timera1 i odpowiedni tryb generowanej fali; tam znajdziesz wzór na zależnosc częstotliwości od ustawienia wartości TOP
Po wykonaniu prostych rachunków otrzymasz; TOP =656 dla prescaler= 256. Możesz oczywiście wybrac inny prescaler, dla którego wyliczysz nowa wartośc dla TOP. (p=8 ; Top =21000)
Pamiętając że w tym trybie (9) wartośc TOP jest ustalana przez OCR1A i tą wartośc przypiszesz temu rejestrowi.
Z tego co ustalono wczesniej fala będzie generowana tylko w kanale (B), więc pozostałe parametry w tabelce TCCR1A wypełnisz tylko dla kanału B zgodnie z wymaganym przebiegiem. (0.01 (L) i (0.04H)
Przecięcia lini obrazującej zawartośc Timera1 (pochyła linia czerwona) z OCR1B wywoła zmiany (2x) wyjścia na pinie OC1B, które musi byc skonfigurowane jako ‘OUTPUT’.
Kierunek tych zmian będzie wskazany parametrami (bitami) z tabeli16-3. (ostatni rząd na dole tabeli)
Oblicz ile kliknięc potrzeba dla odmierzenia tych przedziałów czasu... (zgadnij z podanych wartości na rysunku... lub oblicz dla innego prescalera)
Zielony przebieg dla OCR1B = ?
To byłoby tyle na dzisiaj, z tym....... że powinieneś sam to zrobic!!!!
Jeszcze jedna praktyczna uwaga.
Zamiast sporządzac listę kilku linii dla edytowania rejestrów TCCR1A i TCCR1B z wyszczgólnianiem poszczególnych bitów tak jak to zrobiłeś; możesz skorzystac z wypełnionej tabelki pomocniczej sugerowanej na wstępie i zsumowac wszystkie tam bity w tej kolejności jak przewiduje tabela i wpisac tą wartośc do rejestru. Puste (nie okreslone pola w tabelce( by default) są zero w notacji binary).
Drobna poprawka do rysunku z poprzedniego postu: linie i przebiegi oznaczone OCR0A i OCR0B odnoszą się do analogicznych OCR1A i OCR1B
e marcus