RC Summensignal auswerten - seltsame Sprünge und Rückkopplungen bei bestimmten Werten

Persönliche Seite #2231486
Lesenswert?

Hi

ich analysiere mit einem ATtiny45 ein Summensignal aus einem R700 
Modellbauempfänger. Die Werte werden von einem anderen Controller später 
über I2C ausgelesen.

Das klappt soweit eigentlich ganz gut.

Aber: aus irgendeinem Grund habe ich etwas, was aussieht wie ein 
Wertüberlauf, und eine Art Rückkopplung von einzelnen Kanälen auf 
andere, und das nur bei bestimmten Werten. (reproduzierbar)

Hier ist der Code auf dem ATtiny45: http://pastebin.com/TCHdQs7Z
Hier ein log der Servowerte, vom anderen Controller nach dem Auslesen 
via I2C ausgegeben (Kanal 1-8, Syncpause, Impulspaket-Gesamtzeit): 
http://pastebin.com/TKi4Rjc4
Im Anhang das ganze noch mal geplottet (LibreOffice Calc ;)).

was dort passiert ist folgendes: Kanal 1 ist auf Minimum, Kanal 2-7 auf 
Mitte. Ich bewege den Hebel von Kanal 2 an der Fernsteuerung aus der 
Mitte bis Maximum und zurück (zweimal).

Man sieht, dass bei der 101. Zeile der Wert von Kanal 1 (1700µs) um etwa 
100µs fällt und danach weiter ansteigt (ich bewege den Hebel 
kontinuierlich), bis er bei etwa 1900µs nocheinmal fällt und dabei Kanal 
3 (gelb) beeinflusst. Naja, usw...

Ich vermute, dass der Fehler im Code des ATtiny 45 steckt. Der andere 
Controller liest wirklich nur alle 25ms die Bytes über I2C aus, fügt sie 
zu 16Bit-Datenworten zusammen (wenn das DataReady-Flag in Byte 1 ok ist) 
und gibt sie anschließend über die Serielle Schnittstelle an den PC aus.


Wer kann mir helfen? :/

lg
Angehängte Dateien:
#2231500
Lesenswert?

Hi,

hab mal so was ähnliches... ne... eigentlich genau das gleiche gemacht 
:D
Im Anhang ist mal mein Plot, sieht so ähnlich aus wie Deiner ;) 
Zusätzlich ist noch der Code für einen Attiny24 an gehangen. Dieser ist 
aus einer I2C Slave Lib zusammen gebastellt.

Vielleicht hilft es Dir ja! :)

Gruß,
Patrick
Angehängte Dateien:
Persönliche Seite #2231511
Lesenswert?

Hey Patrick,

ja, deine Kurve sieht doch etwas schöner aus als meine ;)
Aber für mich siehts jetzt so aus, als ob du die Kanäle einzeln aus dem 
Empfänger an verschiedene Pins des Tiny24 gehängt hast? Ich benutze ja 
das Summensignal, direkt aus dem Empfängerinneren abgegriffen. Also alle 
Kanäle übereinandergelegt auf einem Kabel.

Sieht dann so aus: (unteres Signal, ganz normaler TTL-Pegel) 
http://de.wikipedia.org/w/index.php?title=Datei:Fernsteuerungsmodulation.gif&filetimestamp=20110104212546

lg
Persönliche Seite #2234391
Lesenswert?

pastebin geht wieder.
Timer läuft. Sonst würde ich ja für die Kanäle immer Pulslänge 0 
bekommen. Aber wie Du im Log/den Graphen siehst, funtioniert das ja 
soweit im Prinzip ganz anständig.
Nur warum bestimmte Werte von einem Kanal andere Kanäle beeinflussen, 
ist mir nicht klar. zB im angehängten Graphen. Spannend bei diesem auch: 
Es wird bei veränderung von Kanal 4 offenbar nur Kanal 1 beeinflusst - 
bei dem Graphen, den als letztes angehängt hatte, war das anders.

Weitere Tips/Ideen?
lg (:
Angehängte Dateien:
Persönliche Seite #2573351
Lesenswert?

Weil ich gerade per Mail darauf angesprochen wurde: Ich habe das Problem 
damals gelöst:
Es war gut, die Interrupt Routinen auf je nur zwei Zeilen zu 
beschränken, und außerdem, wichtigster Punkt:
1
uint16_t pulseTimerFraction = 5 * TCNT1 / 4;
2
uint16_t pulseTime = pulseTimer * 200 + pulseTimerFraction;
muss verbessert werden zu:
1
uint16_t pulseTime = pulseTimer*200 + TCNT1 * 4 / 5;

Damit lief dann alles. I²C war nur ein bisschen langsam für meine 
Bedürfnisse ;)

Gruß

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