AVR NET IO + 433Mhz Sender Signallängen stimmen nicht

Gast #3904750
Lesenswert?

Hallo,

ich habe an meinen AVR NET IO ein 433Mhz Sendemodul FS1000A 
angeschlossen. Ich will einfach nur eine Funksteckdose ein- und 
ausschalten. Den Sendecode kenn ich (siehe Bild). Eine "1" besteht aus 
545us HIGH und 182us LOW, eine "0" aus 182us HIGH und 545us LOW, und zum 
Schluss noch 5215us LOW. (ich habe die Samples in Audacity gemessen und 
dann durch die Samplerate dividiert)

So nun zum Problem. Bei meinem Programmcode habe ich diese Zeiten 
verwendet, aber das selber gesendete Signal hat, wie auf dem Bild 
ersichtlich, viel zu lange LOW Zeiten.

Mein Code sieht so aus:
1
//***************433mhz senden***********************
2
char send_code[] = { "1111111111010100010100012" };
3
void senden(void) {
4

5
lcd_clear();
6
lcd_print(0,0,0, "Sende Code:");
7
for (x=0; x<6; x++) {
8
for (i=0; i<25 ; i++) {
9
    lcd_print(1,i,0, "%i", send_code[i]);
10
  if ('1'==send_code[i]) {
11
    PORTC |= (1<< PC6); //ein
12
    _delay_us(545);
13
    PORTC &= ~(1<< PC6); //aus
14
    _delay_us(182);
15
  }
16
  
17
  if ('0'==send_code[i]) {
18
    PORTC |= (1<< PC6); //ein
19
    _delay_us(182);
20
    PORTC &= ~(1<< PC6); //aus
21
    _delay_us(545);
22
  }
23
  
24
  if ('2'==send_code[i]) {
25
    PORTC |= (1<< PC6); //ein
26
    _delay_us(182);
27
    PORTC &= ~(1<< PC6); //aus
28
    _delay_us(5215);
29
  }
30
}
31
}
32
PORTC &= ~(1<< PC6); //aus
33
lcd_print(1,0,1, "Code gesendet.");
34
_delay_ms(5000);
35
lcd_clear();
36
}

Auf meinem Raspberry Pi habe ich dies in Python geschrieben und es 
klappte einwandfrei.

Kann mir vielleicht jemand einen Tipp geben?
Angehängte Dateien:
Gast #3904919
Lesenswert?

Du gehst davon aus, dass dein code in null-zeit ausgeführt wird.. Dem 
ist nicht so, schon gar nicht auf nen  uC.

Nimm die displayausgaben aus deiner senderoutine. Das sollte massiv 
helfen. Danach feintuning durch verkürzen der Wartezeiten.
Gast #3905702
Lesenswert?

ddd schrieb:
> Und das hier sieht sehr hässlich aus, obwohl es nicht falsch ist:
> if ('1'==send_code[i]) {
>
> Der Rest der Welt schreibt das andersrum:
> if (send_code[i]=='1') {
>
> Gruß Jonas

Nicht unbedingt. Fehleranfälliger ist die zweite Version, weil das 
unbeabsichtigte Weglassen eines '=' nur eine Compiler Warnung erzeugt. 
Ersteres hingegen erzeugt garantiert einen Fehler. Gibt deshalb auch 
Normen welche die erste Variante vorschreiben.

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