Forum: Mikrocontroller und Digitale Elektronik AVR NET IO + 433Mhz Sender Signallängen stimmen nicht


von prinzmi (Gast)


Angehängte Dateien:

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?

von dunno.. (Gast)


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.

von ddd (Gast)


Lesenswert?

Und das hier sieht sehr hässlich aus, obwohl es nicht falsch ist:
1
if ('1'==send_code[i]) {

Der Rest der Welt schreibt das andersrum:
1
if (send_code[i]=='1') {

Gruß Jonas

von prinzmi (Gast)


Lesenswert?

@dunno
Kleine Ursache - große Wirkung. Das Entfernen der Displayausgabe hat 
tatsächlich das Problem gelöst!! Vielen Dank!

@ddd
Ich habe es geändert. :-)

von TB (Gast)


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.

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.