Hallo,
da der Code mangels Debug Möglichkeiten fehlerfrei sitzen sollte wärer
gut, wenn jemand mit viel Ahnung ihn mal schreiben könnte. Die Timer
sind ja nicht so ganz trivial und meine Portierung vom AVR328 auf den
Attiny stellt mich vor einige Fragen, weil ich im Datenblatt auch noch
rumrätsel
Timer 0 ist reserviert für die millis(), die ich auch brauche. Bleibt
Timer 1
Ich brauche für IR eine Freq von 40khz mit DC 50%. Also Compare Register
A (er hat ja 2, also wähle ich A) auf die Hälfte eines Überlaufs setzen
und den Überlauf und ggf Prescaler so, dass 38khz bei 8Mhz entstehen.
Das drehe ich ggf noch später. Aber wie müssen die Register beschrieben
werden?
Könnte das mal jemand, der sich gut auskennt richtig aufschreiben?
Der Code ist noch falsch aber so war es beim ProMini richtig.
1 | __attribute__((always_inline)) inline void Freq40khzEnable()
|
2 | {
|
3 | DDRB |= (1 << PB1); /* Pin B1 (11) auf Output schalten */
|
4 | TCCR1 = (1 << WGM01) | (1 << COM1A1);
|
5 | TCCR1 = (1 << CS10);
|
6 | OCR1A = 99; /* 25us */
|
7 | TCNT1 = 0; /* Reset Timer1 Counter */
|
8 | }
|
9 |
|
10 | __attribute__((always_inline)) inline void Freq40khzDisable()
|
11 | {
|
12 | /* OC2B Pin = INT 1 Pin (PD 3)
|
13 | OC2A Pin = MOSI Pin (PB 3) */
|
14 |
|
15 | TCCR1 = 0; /* Prescaler 1 und Timer stoppen */
|
16 | TCCR1 = 0; /* Normal Port Operation */
|
17 | PORTB &= ~(1 << PB1); /* PB1 Low */
|
18 | }
|