Hallo,
die Namen stehen im Datenblatt dort wo die Pinbezeichnungen ums Gehäuse
dokumentiert ist. Meistens am Anfang des Manuals. Auf Grund des Pin
Routing Features stehen dort aber nicht Bezeichnungen wie OCnA oder
OCnB, sondern alle Routingpins mit TOCCn.
Die Routingtabelle 12-7 steht dort an der Stelle für alle Timer. Jeder
Timer hat seine Spalte. Alle Timer haben demnach 8
Routingeinstellmöglichkeiten. Das heißt weiterhin das man zum Bsp. für
Timer 1 nur das 0.Bit setzen muss für seinen gewünschten Routingpin
TOCCn.
Das 0. Bit wäre TOCCnS0
Das 1. Bit wäre TOCCnS1
Bsp. du möchtest den Hardwaretimerpin OC1A auf den Pin TOCC7 legen, dann
musste das 0. Bit Namens TOCC7S0 setzen. Den Bitnamen suchste in der
Registerübersicht darüber und findest ihn im Register TOCPMSA1 auf Bit
6.
Danach musste diesen noch separat als Ausgang freigeben.
Bsp. inkl. Pinrouting
1 | /*
|
2 | * µC: ATtiny841 mit internen 8MHz Oszillator
|
3 | */
|
4 |
|
5 |
|
6 | #include <avr/io.h>
|
7 | #include <avr/interrupt.h>
|
8 |
|
9 | #define F_CPU 8000000UL // Systemtakt in Hz
|
10 |
|
11 |
|
12 | /* *** Funktion Deklarationen *** */
|
13 | void set_Timer1();
|
14 |
|
15 | int main(void)
|
16 | {
|
17 | DDRA = (1 << PA4); // Timer1-Pin TOCC3 Ausgang
|
18 |
|
19 | set_Timer1();
|
20 | sei(); // Interrupts einschalten
|
21 |
|
22 | while (1)
|
23 | {
|
24 |
|
25 | }
|
26 | }
|
27 |
|
28 |
|
29 | /* *** Funktionen *** */
|
30 |
|
31 | void set_Timer1() // CTC, Mode 4
|
32 | {
|
33 | TCCR1A = 0; // Reset TCCR1A Register
|
34 | TCCR1B = 0; // Reset TCCR1B Register
|
35 | TIMSK1 = 0; // Reset TIMSK1 Register (disable Timer Compare Interrupts)
|
36 | TCNT1 = 0; // Start 0
|
37 | OCR1A = 39; // TOP Wert bestimmt mit Prescaler Takt, 100kHz
|
38 | TOCPMSA0 = (1<<TOCC3S0); // OC1A Select Routing auf TOCC3 Pin
|
39 | TOCPMCOE = (1<<TOCC3OE); // TOCC3 Output enable
|
40 | TCCR1A = (1<<COM1A0); // Toggle OC1A Pin on compare match
|
41 | TCCR1B = (1<<WGM12) | (1<<CS10); // CTC, Prescaler 1
|
42 | }
|
Und für den gewünschten Timermode suchste dir in der Tabelle die
erforderlichen WGM Bits zusammen und schaust in welchen Registern du
diese setzen musst. Das kann sich durchaus auf 2 Register (A/B)
verstreuen.