mikrocontroller.net

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


Autor: Jürgen Sachs (jsachs)
Datum:

Bewertung
0 lesenswert
nicht 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:
// Wertet ein RC Summen Signal aus

#include <avr/interrupt.h>
#include <avr/io.h>
#include "usart.h"
//#include "rc.h"

uint16_t temp[20];
uint8_t pos=0;
uint8_t lastval=0;
uint8_t nowval=0;

void printval()
{
  usart_write("pos=%i:",pos);
  for(uint8_t i=0;i<pos;i++)
  {
    usart_write("%i:",(temp[i]));
    temp[i]=0;
  }
  usart_write("\r\n");
  pos=0;
  
  // Auf die Null warten, die Ausgabe braucht zuviel Zeit
  while(PIND&_BV(PD3))
    lastval=nowval;
  
}

int main (void) 
{
  usart_init(9600); // Serielle Schnittstelle initialisieren

  usart_write("RC_SUM_ENCODE_V0.1\r\n");
  rc_sum_init();
  //sei();
  DDRD=0x00|_BV(PD6);
  
  while(1)
  { 
    nowval = PIND&_BV(PD3);
    if (nowval>0)
    {
      temp[pos]++;
      lastval=nowval;
    }
    else
    {
      if (lastval>0)  // bei fallender flanke nächster Kanal
      {
  pos++;
  lastval=0;
      }
      if (temp[(pos-1)]>250)   // In früherem Test war die 620 eine gute Schwelle zwischen anderen Impulsen
      {
  printval();
      }
      if (pos>15)      // Notanker falls Sync nicht erkannt
  printval();
    }
    //PORTD=PORTD^_BV(PD6);
  }
}


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:

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jürgen Sachs (jsachs)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/forumu...

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

Autor: Alexxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Barny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jürgen Sachs (jsachs)
Datum:
Angehängte Dateien:

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

Autor: Jürgen Sachs (jsachs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Jürgen Sachs (jsachs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Jürgen Sachs (jsachs)
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Oliver

Autor: Jürgen Sachs (jsachs)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.