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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.