PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR LED mit 38 khz pulsen



MartinFunk
27.02.2007, 18:02
Hi,
ich möchte IR LED wie beim asuro mit dem timer 2 pulsen.
Also IR über widerstand zwischen OC2 und TXD angeschlossen.

Timer initialiesierung wie bei ASURO:

void init_timer2 (void)
{
cli(); // Interrupts sperren!
TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
OCR2 = 0x91; // duty cycle for 36kHz
TIMSK |= (1 << TOIE2);
sei(); // Interrrupts freigeben!
}

Und hier der interuppt.

SIGNAL (SIG_OVERFLOW2)
{
TCNT2 += 0x25; //was bezweckt dieser befehl?
count36kHz ++;
if (!count36kHz) timebase ++;
}

nun möchte ich die IR LED mit 38 anstatt 36 khz pulsen wie mach ich das?

MfG Martin

bL1nK
27.02.2007, 18:06
willst ne trägerfrequenz oder wie soll ich mir das vorstellen?

MartinFunk
27.02.2007, 18:09
ja genau das will ich ne tragerfrequnz

bL1nK
27.02.2007, 18:12
was willstn genau machen?

MartinFunk
27.02.2007, 18:24
ich will daten von meinem Bot per IR zum PC senden da ich nur 38 khz dekoder zur verfügung habe brauche ich eine trägerfrequenz mit 38 khz anstat wie beim ASURO 36 khz jetzt will ich wissen wie ich das machen kann?

izaseba
27.02.2007, 18:41
Wenn Du mit "dekoder" den TSOP meinst, sollte er auch mit 36 kHz funktionieren, ist bei mir auch so, sonst änderst Du Zeile :


TCNT2 += 0x25;

in


TCNT2 += 0x2E;

um.

Warum, darfst Du im Dattenblatt selber nachgucken...

Gruß Sebastian

bL1nK
27.02.2007, 18:41
mir sagt leider ASURO nix ;)

mh, also wie du die trägerfrequenz raus kriegst hät ich dir sagen können, hab letztens von ner IR fernbedienung den träger mit nem C und 2 open-collector NPN rausgefiltert ;)

aber mit ganz schnell ON/OFF sollte es auch gehn :P

wie sieht denn das signal aus bzw. soll es aussehn? steh da nämlich echt grad aufm schlauch.

MartinFunk
27.02.2007, 18:47
Ein ganz normales rechtecksingnal mit 38 khz

kanst du mir das bitte erklären hab schon im datenblatt nachgeschaut und nachgerechnet!

robocat
27.02.2007, 18:51
blink, dir ist klar, dass der threadstarter etwas gefragt hat, und für eine antwort sicher dankbarer ist, als über 3 gegenfragen, oder? :P

ohne garantie:
wenn der timer überläuft, wird er auf 0x25 (37 dez) bzw 0x2E (46 dez) gesetzt. bei 8MHz quarz ergibt sich damit ohne prescaler 36kHz bzw. 38kHz. ich weiß aber gar nicht welchen quarztakt du verwendest.

izaseba
27.02.2007, 19:02
was gibt es hier groß zu erklären ?
Der M8 im Asuro läuft mit 8 Mhz....
der Timer 2 läuft mit Systemtakt, ohne Prescaller, wenn man einen Overlow Interrupt bei 36 kHz haben möchte, muß der Timer mit 8MHz/36kHz -> 222 Takte laufen.
Da der Überlauf bei 255 + 1 stattfindet muß der Timer halt mit 256 - 222 geladen werden.
Das macht TCNT2 += 0x25;
0x22 wäre da rechnerisch korekter gewesen :-k

Jetzt weißt Du hoffentlich, wie ich auf 0x2E gekommen bin, aber wie gesagt, versuch es zuerst mit ganz normall 36 kHz.

Gruß Sebastian

bL1nK
27.02.2007, 19:29
@CAT: naja schau für mich is eine trägerfrequenz mit 38khz ganz was anderes wie ein rechteckt mit 38khz.
sowas is für mich ein träger:
http://pl.physik.tu-berlin.de/groups/pg242/pg242ii/prot3/pl34.gif

zurück zum thema:
TCNT2 += würd ich nicht machen, da du ja immer in den aktuellen wert vom zähler den 'offset' bzw. startzählwert dazu addierst. ich würd ganz normal in der TOV2-ISR 'TCNT2 = 0x2E' machen.

izaseba
27.02.2007, 19:43
@bL1nK,
es geht sich hier um die Erzeugung einer Frequenz für RC5 Infrarot Empfänger, deswegen Rechteck mit 36/38 kHz...

Zu += muß ich Dir recht geben, es gibt da offset vor allem, wenn der Prescaller 1 ist und längeren Code wegen in,adi,out.
Ich würde das auch nicht durchlaufen lassen, es gibt ziemlich große Interrupt Last, ich habe auch nicht verstanden, warum diese 36 kHz Erzeugung beim Asuro immer aktiv ist, auch wenn man nichts senden möchte.

Gruß Sebastian

MartinFunk
27.02.2007, 20:10
danke für die erklärungen, jetzt was ich endlich mal was das bedeutet
und werd es dann morgen mal ausprobieren.

MfG Martin