Forum: Compiler & IDEs Summensignal von 2.4GHz Empfänger mit ATMega16 auswerten


von Jürgen S. (jsachs)


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:

von Oliver (Gast)


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

von sven (Gast)


Lesenswert?

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).

Sven

von Jürgen S. (jsachs)


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.

von Oliver (Gast)


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

von Alexxx (Gast)


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!

von Barny (Gast)


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.

von Jürgen S. (jsachs)


Angehängte Dateien:

Lesenswert?

Anbei ist ein Foto vom Oszi Bild das das Signal zeigt.
X=2ms/Div
Y=1V/Div

von Jürgen S. (jsachs)


Angehängte Dateien:

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.

von Jürgen S. (jsachs)


Angehängte Dateien:

Lesenswert?

So, und nochmal ein Bild von 4 Signalen.
Ich habe hier immer das bisher erwähnte Signal als Sync genommen.
X=2ms/Div
Y=1V/Div

Was auffällt, ist das nach jedem "Peak" des Sync alle anderen kurz 
ausfallen.

von Jürgen S. (jsachs)


Lesenswert?

Durch ein Zufallsbild, konnte ich die Schrift auf dem Empfänger IC 
lesen.
CYRF6936
Studiere jetzt mal das Datenblatt :-)

von Oliver (Gast)


Lesenswert?

Dann wirst du ja bald wissen, was das für ein Signal ist. Ein 
PPM-Summensignal ist es auf jeden Fall nicht.

Oliver

von Jürgen S. (jsachs)


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.

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.