Summensignal von 2.4GHz Empfänger mit ATMega16 auswerten

OP #2113710
Lesenswert?

Hallo,

laut suche haben das ja schon einige hin bekommen.
Ich habe mir auch schon den Code von U. Radig angesehen und ausprobiert. 
Leider ohne Erfolg. Mal ein paar Eckdaten:
Ich habe hier einen 2.4GHz Empfänger "Carson Reflex 6CH", an dem ich an 
einem Pin das Summensignal abgreifen kann. Zumindest denke ich das es 
das Summensignal ist.
An dem Pin im Receiver kommt vom Funkmodul die Daten die auf einen 
Prozessor geht, der daraus die einzelnen Servodaten erzeugt.
Schalte ich den Sender aus, fällt auch dieses Signal aus.

Allerdings passen die Zeiten so gar nicht mit meinen Erwartungen:
1: 0,2ms bis 0,95ms
0: der Rest bis zur nächsten 1. = 18ms
Über eine längere Zeit betrachtet am Scope ist auch keine Syncpause zu 
erkennen.

Auch wenn ich etwas ansteuere, kann ich keinen Unterschied erkennen, 
falls die Anlage nur Veränderungen überträgt. Ich sehe nur einen starken 
"Jitter" bei den Einsen.

Im Moment teste ich das ganze mit einem Polin Eval Board V2 und einem 
ATMega16 mit 8MHz.

Ich hab versucht die Länge der Einsen in einer Schleife zu zählen und 
gelegentlich über UART auszugeben. Ein vernünftiges Muster sehe ich hier 
leider auch nicht.

Im Moment bin ich etwas ratlos.

Mein Testcode sieht im Moment so aus, ich hoffe U.R. verzeiht mir den 
Missbrauch. Ich bin hier schon am verzweifeln:
1
// Wertet ein RC Summen Signal aus
2

3
#include <avr/interrupt.h>
4
#include <avr/io.h>
5
#include "usart.h"
6
//#include "rc.h"
7

8
uint16_t temp[20];
9
uint8_t pos=0;
10
uint8_t lastval=0;
11
uint8_t nowval=0;
12

13
void printval()
14
{
15
  usart_write("pos=%i:",pos);
16
  for(uint8_t i=0;i<pos;i++)
17
  {
18
    usart_write("%i:",(temp[i]));
19
    temp[i]=0;
20
  }
21
  usart_write("\r\n");
22
  pos=0;
23
  
24
  // Auf die Null warten, die Ausgabe braucht zuviel Zeit
25
  while(PIND&_BV(PD3))
26
    lastval=nowval;
27
  
28
}
29

30
int main (void) 
31
{
32
  usart_init(9600); // Serielle Schnittstelle initialisieren
33

34
  usart_write("RC_SUM_ENCODE_V0.1\r\n");
35
  rc_sum_init();
36
  //sei();
37
  DDRD=0x00|_BV(PD6);
38
  
39
  while(1)
40
  { 
41
    nowval = PIND&_BV(PD3);
42
    if (nowval>0)
43
    {
44
      temp[pos]++;
45
      lastval=nowval;
46
    }
47
    else
48
    {
49
      if (lastval>0)  // bei fallender flanke nächster Kanal
50
      {
51
  pos++;
52
  lastval=0;
53
      }
54
      if (temp[(pos-1)]>250)   // In früherem Test war die 620 eine gute Schwelle zwischen anderen Impulsen
55
      {
56
  printval();
57
      }
58
      if (pos>15)      // Notanker falls Sync nicht erkannt
59
  printval();
60
    }
61
    //PORTD=PORTD^_BV(PD6);
62
  }
63
}

Der Code ist nicht optimal und diente nur um mal ein paar Daten zu 
bekommen, wie folgt. Vielleicht hat ja jemand eine Idee:

pos=14:137:192:248:98:155:210:68:124:181:236:87:143:199:268:
pos=4:76:136:192:256:
pos=3:159:220:275:
pos=6:183:241:92:147:205:265:
pos=6:174:235:82:138:198:255:
pos=10:168:224:74:130:187:243:93:157:212:273:
pos=5:236:83:142:201:258:
pos=16:165:221:74:134:190:247:97:152:208:65:122:178:234:84:141:197:
pos=4:73:134:190:253:
pos=3:156:216:273:
pos=6:180:238:88:144:200:261:
pos=16:170:230:76:133:193:249:95:162:219:69:126:181:239:88:152:209:
pos=4:78:136:197:253:
pos=16:159:215:68:128:185:241:92:148:205:62:119:175:231:81:138:193:
pos=8:70:129:185:250:96:151:212:269:
pos=5:234:84:141:197:257:
pos=16:167:227:73:130:190:246:92:160:215:65:122:178:235:84:147:203:
pos=15:73:131:192:249:95:155:211:64:124:180:236:87:144:200:262:
pos=4:76:131:188:256:
pos=10:162:219:65:124:181:244:90:146:206:263:
pos=5:229:79:135:192:253:
pos=10:162:222:68:124:185:242:87:155:212:267:
pos=5:230:81:144:200:260:
pos=10:164:223:69:127:188:244:91:151:206:268:
pos=5:232:83:139:195:259:
Gast #2113760
Lesenswert?

Jürgen Sachs schrieb:
> Allerdings passen die Zeiten so gar nicht mit meinen Erwartungen:
> 1: 0,2ms bis 0,95ms
> 0: der Rest bis zur nächsten 1. = 18ms

Wenn das so ist, ist das kein Summensignal. ~20ms Gesamtzyklus mit nur 
einem high ist ein einzelnes Servosignal, allerdings sind die 
high-Zeiten kürzer als der Standard.

Jitter bei den Einsen ist normal, die Servoposition steckt ja in der 
Länge des High-Pulses.

Oliver
OP #2113797
Lesenswert?

sven schrieb:
> Hast Du kein Oszi um dir das Signal anzugucken ?
> Ich dachte die 2,4GHz Anlagen würden digital (z.B. 8 Bit/Kanal) senden
> und nicht analog (Pulslänge wie beim Servo).
Die Infos oben sind mit dem Oszi ermittelt.
Alle anderen Signal auf dem Empfänger würde ich nur als "Takt" und 
Quarzsignale interpretieren. Die kann ich mit meinem 20MHz Oszi fast 
nicht mehr "Darstellen".

Die "1" was Empfangen werden, sehen im "Singleshot" sehr nach 
Servosignale aus, oder sind eindeutig Spannungsversorgung.

2 Signale könnten auch eine Art SPI sein. Aber eine permanente 
Kommunikation mit dem Funkmodul (Das ist ein Huckepack Modul). Aber die 
Daten sind Konstant an.
Wäre es Möglich, das das obige Signal das "Sync" des SPI sind und nur 
ausbleibt wenn der Sender ausfällt ?

Ich kann Heute Abend ja mal alle Signale ausmessen und Bilder 
einstellen.
Gast #2113810
Lesenswert?

Das Summensignal für einen 6-Kanal-Empfänger hat 6 high-Pulse innerhalb 
des 20ms-Frames, jeder davon ist zwischen 1 und 2ms lang.

guggst du hier:
http://www.modellflug-online.at/php5/images/forumuploadpics/197_20100915120503317.jpg

Alles, was nicht so aussieht, ist auch kein Summensignal. Zwischen dem 
Funkmodul und dem Prozessor wird mit Sicherheit kein Summensignal 
übertragen. Da gibt es eine digitale Schnittstelle. Die Servosignale 
werden erst im Prozessor erzeugt. Und wenn da kein Summensignal erzeugt 
wird, gibt es auch keins. Das müsstest du dir dann aus den einzelnen 
Servosignalen wieder zusammenbasteln.

Oliver
Gast #2114053
Lesenswert?

Hallo, was du beschreibst, sieht für mich wie ein (analoges) 
Servo-Signal aus!
Der Wert entspricht der Länge des 1-Pulses (zwischen 0,5 und 1,5ms).
Und wenn nur ein Puls pro 20ms ist, dann ist es nur ein Kanal!
Gast #2114129
Lesenswert?

Es gibt mehrere Arten von Empfängern.

Es gibt 2 Hauptgruppen:
Empfänger: Die Teile, an denen die Servos / Motorregler angeschlossen 
werden
Sateliten: Erweiterungen für Empfänger.

Es gibt bei diesen Sateliten hauptsächlich 2 Arten die Daten an den 
Empfänger zu übermitteln.
Zum Einen als Summensignal (invertiert / nicht invertiert) und zum 
Anderen als UART-Signal.

Mach doch einmal ein Oszi-Bild damit man sicher sein kann, dass man 
brauchbare Daten erhält.

Alexxx schrieb:
> Der Wert entspricht der Länge des 1-Pulses (zwischen 0,5 und 1,5ms).
Das "normale" Signal ist zwischen 1 und 2ms lang.
Es gibt aber inzwischen Anlagen die andere Intervallzeiten verwenden.
OP #2114950
Lesenswert?

Anbei ein Bild vom Empfänger Unterseite.
Der Eigentliche Empfänger sitzt Huckepack mit Stiftleisten auf der 
anderen Seite.
Die 6 Pins Rechts außen bei "C11" bis "C15" und links vom IC U4.
Der Fädeldraht kommt von mir um das Signal von Außen zugänglich zu 
machen.

Ich versuche jetzt die anderen Signal nochmals in Ruhe zu messen.
Angehängte Dateien:
OP #2115289
Lesenswert?

Richtig.
Es handelt sich um ein SPI Signal mit IRQ.
Man könnte das nun zwar mithören, dann müsste ich aber den gesamten 
Verkehr mithören um raus zu bekommen was sind Daten und was Kommandos.
Dann kann ich gleich die "Hauptplatine" ersetzen.

Also nochmals alles auf Anfang und den Weg nehmen den ich Ursprünglich 
nicht wollte, weil er viel Aufwändiger ist und mehr Pins verschwendet.
Alle 6Kanäle Sampeln und Intern weiter verarbeiten...

Aber dieser Thread ist erst mal closed.

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