Forum: Mikrocontroller und Digitale Elektronik 38kHz vom Compiler berechnen lassen


von Jan (Gast)


Lesenswert?

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

von Walter (Gast)


Lesenswert?

>wozu die Addition von 0.499
zum Runden?!

von Jan (Gast)


Lesenswert?

So, ich wollte mein mit gcc gebauten code mit avr-studio mal simulieren.
Früher wurde da u.U. zwischen den Zeilen auch der C code angezeigt - 
macht die aktuelle version das noch, und wenn ja, welche datei enthält 
die daten? (.elf, .lss) ich finde da nämlich nix!

von Jan (Gast)


Lesenswert?

ah, ich habe nochmal make clean, make all ausgeführt und dann im 
avr-studio die .elf datei geladen.

von Jan (Gast)


Lesenswert?

also: nop kostet 1 takt

 for(counter = 0; counter < DELAY_36kHz; counter++) kostet 4

zusammen 5

Mit DELAY_36kHz = 11 liegen zwischen dem umschalten 63 takte bzw. 
13.13µs

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.