Hallo,
ein AVR (tiny13) mit internen 4.8MHz soll ein 38kHz IR Signal erzeugen,
und das 560µs lang.
D.h. es muss mit 76kHz entspr. alle 13.15789µs der pin getoggelt werden.
Also alle 63,15789 Takte.
Um die Routine möglichst unabhängig von Timern verwenden zu können, kann
das ruhig blockierend passieren.
Eine IR Routine für RC5 macht die Modulation so:
1 | #define DELAY_36kHz (uint8_t)(21.4*(F_CPU/8.0e6)+0.499)
|
2 |
|
3 |
|
4 |
|
5 | for(i = 0; i < 64; i++)
|
6 | {
|
7 | IR_LED_PORT ^= IR_LED_BIT;
|
8 | for(counter = 0; counter < DELAY_36kHz; counter++)
|
9 | asm volatile("nop" ::);
|
10 | }
|
Wie kann ich da die Takte für die Schleifen und das Toggeln ermitteln?
NOP braucht wohl einen Takt!?
Ich vermute, dass eine Rückwärtsrechnung dann den Faktor zum Bezug auf
F_CPU ergibt - wozu die Addition von 0.499 ?
Vielen Dank