IR Signal senden - Carrier?

OP #6568785
Lesenswert?

Moin!

Ich habe mit einem VS183B / TS1838 ein IR-Signal aufgefangen, dass zu 
einer Fernbedienung gehört. Es handelt sich um keins der üblichen 
verdächtigen Protokolle, sondern es werden ganz einfach Bits nach einer 
Startsequenz übertragen.

Soweit ich das verstehe, hat der VS183B ein Träger-Signal (?) 
wegmoduliert (???), das ich jetzt wieder aufmodulieren müsste, um quasi 
das selbe "aus der IR-LED zu senden". Wie kann ich das lösen? Derzeit 
purzelt aus meinem digitalausgang das raus, was der VS183B auch nach 
seiner Bearbeitung ausgegeben hat. Wie bekomme ich das jetzt in Hardware 
oder Software moduliert?

Kann mich jemand aufklären? bin neu in dem Thema.

Gruß Pascal
#6568791
Lesenswert?

Pascal T. schrieb:
> Soweit ich das verstehe, hat der VS183B ein Träger-Signal (?)
> wegmoduliert (???),

demoduliert

> das ich jetzt wieder aufmodulieren müsste, um quasi
> das selbe "aus der IR-LED zu senden".

Du musst einen Träger mit den empfangenen Daten modulieren.

> Wie kann ich das lösen?

Mit einem Timer und der Output Compare Funktion. Diese erzeugt das 
Trägersignal von 38kHz. Im dazugehörigen Interrupt kann man dann eine 
Statemachine laufen lassen, welche den Ausgang im Takt der Daten 
ein- und aus schaltet.
#6568809
Lesenswert?

Falk B. schrieb:
> Mit einem Timer und der Output Compare Funktion. Diese erzeugt das
> Trägersignal von 38kHz. Im dazugehörigen Interrupt kann man dann eine
> Statemachine laufen lassen, welche den Ausgang im Takt der Daten
> ein- und aus schaltet.

Man muss da IO-Pin gar nicht schalten, es reicht, wenn man den PWM Wert 
ändert.

50% = Träger aktiv
0% = Träger aus

Wobei viele IR System eher mit 20% Tastverhältnis arbeiten, um Strom zu 
sparen.
OP #6569106
Lesenswert?

Okay, also es kommt jetzt in etwa das beim Receiver an, was da ankommen 
soll. Leider (erwartungsgemäß) unsauber (vergleich "soll.png" zu 
"ist.png").

Man merkt halt, dass der ESP immer mal auch was anderes zu tun hat :-D 
Auffällig ist, dass nur "delayMicroseconds(t_break);" zu lang wartet, 
nie aber
1
if (data[i]) {
2
            delayMicroseconds(t_true);
3
        }
4
        else {
5
            delayMicroseconds(t_false);
6
        }
 (siehe unten).

Jetzt würde ich es gern ordentlich machen - wie gehe ich da am besten 
vor? Ich nutze einen ESP8266 (ESP-012) mit der Arduino IDE.  Die 
Software-PWM funktioniert gut:
1
analogWriteFreq(38000);
2
analogWrite(512);
...bewirkt ein überraschend exaktes 38kHz Signal. Leider weiß ich nicht, 
welcher timer dafür im Hintergrund verwendet wird. Bisher habe ich das 
ganz stumpf so gelöst:
1
void myTelegram::sendTelegramSoftPWM() {
2

3
    //Set PWM Frequency
4
    analogWriteFreq(38000);
5

6
    //Initialisierungssequenz
7
    analogWrite(_pin, 512);
8
    delayMicroseconds(long_starter);
9
    analogWrite(_pin, 0);
10
    delayMicroseconds(short_starter);
11

12
    //Bits senden
13
    for (int i = 0; i < 72; i++) {
14
        analogWrite(_pin, 512);
15
        delayMicroseconds(t_break);
16
        analogWrite(_pin, 0);
17
        if (data[i]) {
18
            delayMicroseconds(t_true);
19
        }
20
        else {
21
            delayMicroseconds(t_false);
22
        }
23
    }
24

25
    //Abschluss
26
    analogWrite(_pin, 512);
27
    delayMicroseconds(t_break);
28
    analogWrite(_pin, 0);
29
}

in "bool data[72]" sind meine 72 zu sendenden Bits drin. Leider bin ich 
mit timern überhaupt nicht fit, um etwas nicht-blockierend zu machen, 
habe ich bisher immer "elapsedMillis" benutzt...

Könnt ihr mir einen Tipp geben?

Grüße Pascal
Angehängte Dateien:
OP #6569113
Lesenswert?

c-hater schrieb:
> Lies' die verdammten sources! Da steht das drin.

RTFM, schon klar. Es schein timer1 zu sein, zumindest wenn 
https://github.com/esp8266/Arduino/blob/f2d83ba43df9f1c2ef1ff8ad5748ade6e3353de6/cores/esp8266/core_esp8266_wiring_pwm.cpp 
stimmt. Nur schein timer2 bereits für das WLAN belegt zu sein...

Und wie sieht es mit den anderen Problemen aus?

//EDIt: Wenn ich das WLAn deaktiviere bekomme ich ein sauberes Signal. 
Soweit so gut, nur brauche ich WLAN.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren