Forum: Mikrocontroller und Digitale Elektronik Probleme beim Empfängersignal auswerten


von Daniel H. (picprogger)


Lesenswert?

Hallo,

ich habe ein kleine Programm geschrieben was mir das Servosignal eines 
RC Empfängers anzeigt(die Zeit meine ich 1-2ms).

Das funktioniert auch ohne Probleme mit einer alte Robbe Futaba 2-Kanal 
Fernbedienung(T2DR)40MHz.

Nun habe ich mir ein Graupner Set MX-16 HOTT zugelegt, das ist ein 
8-Kanal Empfänger, bei dem ich ebenfalls die Zeit messen wollte.

Doch das System funktioniert nicht mit meinem Programm!!
Soll das daran liegen dass, das Signal höher aufgelöst ist, und wenn ja 
wie kann man das beheben?

Danke für eure Hilfe!

System auf Pic18F4520 8MHz.

Gruß Daniel

von Eumel (Gast)


Lesenswert?

Sieh dir mal Zeile 42 deines Programms genauer an. Da solltest du 
ansetzen.

von Daniel H. (picprogger)


Lesenswert?

Danke @Eumel, dumm kommen kann ich mir alleine.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> Danke @Eumel, dumm kommen kann ich mir alleine.

Aber du kannst nicht mit mehr Informationen kommen.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Ein wenig deutlicher:

Daniel H. schrieb:
> Doch das System funktioniert nicht mit meinem Programm!!

Dann wird es wohl an deinem Programm liegen.

> Soll das daran liegen dass, das Signal höher aufgelöst ist,

Nein.

> und wenn ja wie kann man das beheben?

Durch das korrigieren deines Programmes.

von Daniel H. (picprogger)


Lesenswert?

Ich werte das Signal an einem Kanal des Empfängers aus, um zu wissen wo 
der Knüppel der Fernbedienung steht.

Ich lese das Signal per Capture in einer Interrupt Routine ein, INT wird 
bei steigender Flanke ausgelöst und der Timer1 auf 0 gesetzt und gezählt 
bis ein neuer INT ausgelöst wird bei fallender Flanke, dann werde alle 
INT's gestoppt und der Zähler des CCP's ausgelesen, dann INT's wieder an 
und Zeit wird ausgegeben. fertig.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> Ich lese das Signal per Capture in einer Interrupt Routine ein, INT wird
> bei steigender Flanke ausgelöst und der Timer1 auf 0 gesetzt und gezählt
> bis ein neuer INT ausgelöst wird bei fallender Flanke, dann werde alle
> INT's gestoppt und der Zähler des CCP's ausgelesen, dann INT's wieder an
> und Zeit wird ausgegeben. fertig.

Danke für dein ausführliches Listing.

Eumel hatte schon recht mit Zeile 42.

von Daniel H. (picprogger)


Lesenswert?

was heist Zeile 42 ?

Und warum funktioniert das dann mit dem einen und mit dem Neuen nicht?

von Eumel (Gast)


Lesenswert?

Daniel H. schrieb:
> was heist Zeile 42 ?
>
> Und warum funktioniert das dann mit dem einen und mit dem Neuen nicht?

Die Lösung liegt in Zeile 42. Jetzt sie halt mal genauer hin!

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> was heist Zeile 42 ?

http://de.wikipedia.org/wiki/42_(Antwort)

Kein Geier weiß bis jetzt wie dein Code aussieht.

> Und warum funktioniert das dann mit dem einen und mit dem Neuen nicht?

Weil dein Programm für den neuen wohl nicht geeignet ist.


Hast du dir das PPM Signal des alten und des neuen Empfängers mal auf 
nem Oszi angesehen?

von Eumel (Gast)


Lesenswert?

Oh, mein h klemmt. Wie peinlich.

von Daniel H. (picprogger)


Lesenswert?

Könnt ihr nicht offen reden und nicht in Rätseln, macht ihr das immer 
so?

Sagt doch einfach was ihr wollt.?

von Magnus M. (magnetus) Benutzerseite


Lesenswert?


von Eumel (Gast)


Lesenswert?

Magnus M. schrieb:
> Kein Geier weiß bis jetzt wie dein Code aussieht.

Dieser Satz ist dir ein Rätsel?

von Daniel H. (picprogger)


Angehängte Dateien:

Lesenswert?

sorry aber diesen Satz habe ich irgendwie immer überlesen.
Ich entschuldige mich bei allen für meine Augen.

Hier der Code.

von Daniel H. (picprogger)


Lesenswert?

T1CON muss so T1CON   = 0b00110001;

Ach ja da Oszi sagt bei beiden Empfängern das gleiche. min 18ms pause 
dann 2 bis 1ms signal.

von Karl H. (kbuchegg)


Lesenswert?

Daniel H. schrieb:
> T1CON muss so T1CON   = 0b00110001;
>
> Ach ja da Oszi sagt bei beiden Empfängern das gleiche. min 18ms pause
> dann 2 bis 1ms signal.


Irgendwo muss es aber Unterschiede geben. Dein PIC kann ja die 
Aufschrift am Empfänger nicht lesen und so Robbe von Graupner 
unterscheiden.
Schau dir zb mal die Pegel der Signale an.

von Daniel H. (picprogger)


Lesenswert?

wenn das Signal bei beiden Empfängern gleich ist, laut Oszi, warum dann 
unterscheiden und wenn ich wüste wo der Unterschied ist, würde ich es ja 
auch machen, nur finde ich keinen an den Signalen.

Deshalb habe ich auch hier gefragt, vielleicht hatte jemand dieses 
problem schon mal.?

von Alex w... (Gast)


Lesenswert?

Der eine Empänger bringt ein Summensignal, der Andere nicht...

von Daniel H. (picprogger)


Lesenswert?

Guten Morgen, nein der Empfänger bringt kein Summensignal, ich lese die 
Kanäle 1-4 aus, wenn dass Summensignal eingestellt ist dann kommt das 
nur auf dem 8.Kanal raus, das passt auch mit dem Oszi.

von Daniel H. (picprogger)


Lesenswert?

Wenn ich den neuen Empfänger mit meinem Programm auslese dann kommen 
immer unterschiedliche Werte von klein 170 immer größer werdend wie eine 
art Treppe bis ca.900, dann wieder runter.

Mit dem alten Empfänger steht das Signal konstant bei 375(1,5ms), und 
wenn ich den Knüppel bewege dann ändert sich der Wert zwischen 270(1ms) 
und 480(2ms).

von Michael A. (Gast)


Lesenswert?

Daniel H. schrieb:
> und wenn ich wüste wo der Unterschied ist, würde ich es ja
> auch machen, nur finde ich keinen an den Signalen.

Gib ein Echo von dem von deiner Routine erkannten Signal auf einen 
freien Pin aus und vergleich das mit dem Originalsignal. Irdendetwas 
wird da schon sein.

Abgesehen davon: Warum läßt du den Timer nicht durchlaufen, liest immer 
nur die Werte ab und bildest die Differenz?

von Daniel H. (picprogger)


Lesenswert?

mir scheint so als würde mein Programm das signal nicht richtig 
erkennen, also steigende und fallende Flanke.

Der alte Empfänger bringt 5Volt als High und der neue 2,5Volt kann das 
daran liegen?

von Bernhard R. (barnyhh)


Lesenswert?

Daniel H. schrieb:
> mir scheint so als würde mein Programm das signal nicht richtig
> erkennen, also steigende und fallende Flanke.
>
> Der alte Empfänger bringt 5Volt als High und der neue 2,5Volt kann das
> daran liegen?

Was sagt das Datenblatt des Prozessors zu den erforderlichen 
Spannungspegeln?

Bernhard

von Daniel H. (picprogger)


Lesenswert?

Ich habe auch schon gesucht im Datenblatt habe aber nichts gefunden.
Wo könnte man das finden?

von Spess53 (Gast)


Lesenswert?

Hi

>Wo könnte man das finden?

Im Datenblatt! Obwohl ich nichts mit PICs am Hut habe hat es keine 
Minute gedauert:

S.335

26.3 DC Characteristics: PIC18F2420/2520/4420/4520 (Industrial)
                         PIC18LF2420/2520/4420/4520 (Industrial)

MfG Spess

von Michael (Gast)


Lesenswert?

Daniel H. schrieb:
> Ach ja da Oszi sagt bei beiden Empfängern das gleiche.

Daniel H. schrieb:
> Der alte Empfänger bringt 5Volt als High und der neue 2,5Volt

Na denn. Jetzt sag nur noch, dass dein Pic mit 5V arbeitet.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> Der alte Empfänger bringt 5Volt als High und der neue 2,5Volt kann das
> daran liegen?

Yepp, dürfte daran liegen.

Du kannst das Signal aber durch den internen Komparator jagen. Den 
Ausgang des Komparators verbindest du mit deinem ursprünglich genutzten 
Eingang.

von Daniel H. (picprogger)


Lesenswert?

an dem H_L Pegel liegt es nicht, den kann mann mit HLDVCON einstellen 
jedoch ändert sich nichts. egal was ich einstelle.

Ich bin immer noch der Meinung das es an der hohen Auflösung(4096 mal 
pro Signal laut Graupner) liegt, jedoch weis ich nicht wie man damit 
umgehen soll?

Ich habe dann den Pic mit 32 MHz laufen lassen damit findet er schon 
viel mehr signale aber das reicht scheinbar nicht.

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

@Daniel H

Ich kenn mich mit dem Pic nicht aus aber hab das gleiche Problem gehabt.
Ich hab mir verschiedene Programmbeispiele für den Atmega32 angeschaut 
und getestet. Allerdings wurde das Array immer wieder falsch beschrieben 
und so wurde Kanal 6 zu Kanal 3 usw.
Deshalb hab ich mich nochmal intensiv dahinter geklemmt.
Raus kam das was im Anhang zu sehen ist. Also eine Mischung aus allen 
Beispielen die ich mir angeschaut hatte.

Ist zwar für Atmega32 geschrieben aber vllt. kannst du es ja trotzdem 
adaptieren.
Also das ganze funktioniert nur wenn du die Fernsteuerung
MX-16 den Empfänger den Kanal 8 auf PPM einstellst.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> an dem H_L Pegel liegt es nicht, den kann mann mit HLDVCON einstellen
> jedoch ändert sich nichts. egal was ich einstelle.

Was bitte ist HLDVCON? Ich kann weder im Datenblatt des PICs noch in der 
BDA der Fernsteuerung etwas darüber finden.

> Ich bin immer noch der Meinung das es an der hohen Auflösung(4096 mal
> pro Signal laut Graupner) liegt, jedoch weis ich nicht wie man damit
> umgehen soll?

Was dürfen wir uns unter einer "Auflösung von 4096 mal pro Signal" 
vorstellen?

Daniel H. schrieb:
> Ach ja da Oszi sagt bei beiden Empfängern das gleiche. min 18ms pause
> dann 2 bis 1ms signal.

Hast du ein Digitaloszi? Stell mal nen Screenshot von beiden Signalen 
(alter und neuer Empfänger) ein.

von Ulli B. (ulli-b)


Lesenswert?

Daniel H. schrieb:
> Der alte Empfänger bringt 5Volt als High und der neue 2,5Volt kann das
> daran liegen?

Weiter oben schreibst Du, das Signal der beiden Empfänger wäre auf dem 
Oszi gleich. Jetzt ist es auf einmal anders. Was stimmt jetzt?

Die "Auflösung mit 4096" hat nichts mit dem Servoimpuls zu tun. Das ist 
die Auflösung, mit welcher das Knüppelpoti vom Sender digitalisiert (und 
gesendet) wird.
Liest Du die Kanäle 1-4 gleichzeitig aus (über den selben Pin am PIC)?

mfG
Ulli

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Natürlich hat uns der TO nicht die ganze Wahrheit gesagt und beim 
Vergleich der Oszi-Signale einfach mal gelogen.

Der 2,5V-Pegel reicht nicht, um einen 5V-uC ein sauberes Signal zu 
geben. Das muß mit einem Komperator verstärkt werden, evtl. hilft etwas 
Pull-Up-Widerstand.

von Daniel H. (picprogger)


Lesenswert?

Magnus M. schrieb
> Was bitte ist HLDVCON? Ich kann weder im Datenblatt des PICs noch in der
> BDA der Fernsteuerung etwas darüber finden.

Ja, ist klar, es muss heisen HLVDCON, da kann man das High Low Level 
einstellen.

Magnus M. schrieb
> Was dürfen wir uns unter einer "Auflösung von 4096 mal pro Signal"
> vorstellen?

Ich glaube das habe ich dann falsch verstanden wie Ulli B. schrieb
> Die "Auflösung mit 4096" hat nichts mit dem Servoimpuls zu tun. Das ist
> die Auflösung, mit welcher das Knüppelpoti vom Sender digitalisiert (und
> gesendet) wird.

Ich probiere gerade Klaus seinen Ansatz.

von Daniel H. (picprogger)


Lesenswert?

@Ulli B.
ich hatte vor jeden Kanal einzeln einzulesen.

von Ulli B. (ulli-b)


Lesenswert?

Daniel H. schrieb:
> @Ulli B.
> ich hatte vor jeden Kanal einzeln einzulesen.

Ich habe deshalb gefragt, weil bei vielen "modernen" Empfängern die 
Impulse an den einzelnen Servosteckplätzen gleichzeitig ausgegeben 
werden (also gleichzeitig nach High schalten und dann ihrer Länge 
entsprechen wieder nach Low). Es geht also nicht so einfach, mehrere 
Servoimpulse mit einem einzigen Timer zu erfassen.

Früher (TM) wurden die Impulse nacheinander ausgegeben. Da konnte man 
mit Dioden einfach alle Ausgänge zusammenfassen und hatte damit ein 
Summensignal.

Das Summensignal liegt bei Deinem Empf. ja an Kanal 8 an. Wenn ich recht 
verstanden habe, dann ist das Beispiel von Klaus auf das Summensignal 
hin ausgerichtet.
Das ist der einzig richtige Ansatz. Du musst aber sicher sein, dass die 
Spannungspegel hoch genug sind!

mfG
Ulli

Nachtrag:
Oder möchtest Du jeden Kanal mit einem separaten PIC einlesen?
Dann nutzt Dir das Summensignal natürlich nichts.

von Daniel H. (picprogger)


Lesenswert?

Ulli B. schrieb:
> Daniel H. schrieb:
>> @Ulli B.
>> ich hatte vor jeden Kanal einzeln einzulesen.
>
> Ich habe deshalb gefragt, weil bei vielen "modernen" Empfängern die
> Impulse an den einzelnen Servosteckplätzen gleichzeitig ausgegeben
> werden (also gleichzeitig nach High schalten und dann ihrer Länge
> entsprechen wieder nach Low). Es geht also nicht so einfach, mehrere
> Servoimpulse mit einem einzigen Timer zu erfassen.

Ja das ist mir bekannt das kann man mit der Fernbedienung individuell 
umstellen

> Das Summensignal liegt bei Deinem Empf. ja an Kanal 8 an. Wenn ich recht
> verstanden habe, dann ist das Beispiel von Klaus auf das Summensignal
> hin ausgerichtet.

Ja das wäre mir auch recht, wenn ich nur ein Signal messen würde, aber 
leider kann mein Programm da auch nichts empfangen.

> Das ist der einzig richtige Ansatz. Du musst aber sicher sein, dass die
> Spannungspegel hoch genug sind!

Wofür ist dann HLVDCON in meinem PIC, wenns doch nichts bringt?


> Oder möchtest Du jeden Kanal mit einem separaten PIC einlesen?
> Dann nutzt Dir das Summensignal natürlich nichts.

Nein es soll nur ein PIC sein.

von Ulli B. (ulli-b)


Lesenswert?

Daniel H. schrieb:

>> Das ist der einzig richtige Ansatz. Du musst aber sicher sein, dass die
>> Spannungspegel hoch genug sind!
>
> Wofür ist dann HLVDCON in meinem PIC, wenns doch nichts bringt?
>

Ich kenne die PICs nicht so gut.
Google hat mir gesagt, dass das HLVDCON zur "Messung" der 
Versorgungsspannung dient.
Es bedeutet nicht, dass damit der High/Low - Pegel der I/Os verstellt 
werden kann.

Gefunden bei Fernando-Heitor.de:

... besitzt ein High/Low-Voltage Detect Modul (HLVD). Durch dieses 
erweiterte Modul kann auch erkannt werden, ob die Versorgungsspannung 
oberhalb einer eingestellten Grenze ist. Das HLVD-Modul ist aktiviert, 
sobald das HLVDEN-Bit im HLVDCON-Register gesetzt ist. Wenn das 
HLVD-Modul aktiviert wurde, benötigt die Schaltung eine bestimmte Zeit, 
um sich zu stabilisieren. Mit dem IRVST-Bit kann erkannt werden, ob die 
Schaltung stabil ist oder nicht. Ist die Schaltung stabil wird dieses 
Bit automatisch vom Modul gesetzt und bei einer Instabilität gelöscht.

Der Pegel von dem Empfängersignal muss also entweder angehoben, oder die 
Betriebsspannung vom PIC abgesenkt werden (wenn das geht, das weiss ich 
nicht).
Ich persöhnlich würde einen Transistor verwenden um den Pegel an zu 
heben.

mfG
Ulli

von Daniel H. (picprogger)


Lesenswert?

Ulli B. schrieb:
> Ich persöhnlich würde einen Transistor verwenden um den Pegel an zu
> heben.

Danke für deine Bemühungen aber, mit einem Transistor habe ich es auch 
schon probiert den Pegel anzuheben und mit eine LM339 Comparator gerade 
eben und es geht beides nicht. Beim LM339 zeigt mir das Oszi ein minus 
Signal am Ausgang von -400mV an aber auch kein Rechtecksignal und wenn 
ich den Knübbel der FB bewege dann ändert sich auch die Zeit.
Irgend etwas ist da Faul.

von Helfender (Gast)


Lesenswert?

Den Pull-Up am Ausgabe des LM339 hattest Du schon verwendet?
Laut einer Webseite 3 bis 15 KByte in Richtung VDD deines PICs.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> eben und es geht beides nicht. Beim LM339 zeigt mir das Oszi ein minus
> Signal am Ausgang von -400mV

Versehentlich AC-Kopplung ausgewählt?

> an aber auch kein Rechtecksignal

Sondern?

> Irgend etwas ist da Faul.

Ja, nämlich Du! Liefer endlich mal richtige Informationen!

- Bild vom Aufbau

- Screenshot des Empfängersignals

- Screenshot des Signals nach dem Komparator

von Peter D. (peda)


Lesenswert?

Daniel H. schrieb:
> Hier der Code.
>  INTCON.GIE  = 1;    // Enables global interupts

Darf man das beim PIC innerhalb eines Interrupts?


Peter

von Blackbird (Gast)


Lesenswert?

>> Früher (TM) wurden die Impulse nacheinander ausgegeben. Da konnte man
>> mit Dioden einfach alle Ausgänge zusammenfassen und hatte damit ein
>> Summensignal.

Das ergibt aber nur ein einziges durchgehendes H-Signal.

Im Summensignal ist pro Impuls immer eine Austastlücke, 0,2ms meistens 
lang. Früher mal 0,4ms (hat was mit der Sendebandbreite zu tun).

Also einfach auf steigende und fallende Flanke zu programmieren bringt 
falsche Zeiten.


Blackbird

von Ulli B. (ulli-b)


Lesenswert?

Blackbird schrieb:
>>> Früher (TM) wurden die Impulse nacheinander ausgegeben. Da konnte man
>>> mit Dioden einfach alle Ausgänge zusammenfassen und hatte damit ein
>>> Summensignal.
>
> Das ergibt aber nur ein einziges durchgehendes H-Signal.

Das ergab kein durchgehendes Signal sondern es hatte zwischen zwei 
Kanälen immer eine Austastlücke. Wie hätte der rein analoge Empfänger 
denn sonst wissen sollen, wann der nächste Kanal dran kommt?

> Im Summensignal ist pro Impuls immer eine Austastlücke, 0,2ms meistens
> lang. Früher mal 0,4ms (hat was mit der Sendebandbreite zu tun).

Das hat nichts mit der Bandbreite zu tun, sondern mit der sicheren 
Erkennung der Lücke. Die Empfänger waren rein analog aufgebaut und 
mussten sowohl bei -20°C als auch bei +40°C funktionieren. Da wurden die 
Zeiten etwas grosszügiger ausgelegt.
Man durfte sie aber nicht zu gross machen, damit die Übertragung 
insgesamt nicht zu lange wird. Die Frames sollten mindestens 50 mal pro 
Sekunde kommen.


> Also einfach auf steigende und fallende Flanke zu programmieren bringt
> falsche Zeiten.

Einzig und allein dies bringt die richtigen Zeiten. Wie soll es denn 
sonst funktionieren?
Natürlich muss man auch noch die Pausenlängen messen. Wenn die Pause 
länger ist als die Impulslänge, so kann man davon ausgehen, dass ein 
Kanalwechsel statt findet. Man kann auch einen festen Wert nehmen (zB. 
länger als 0,5ms).

Wohlgemerkt, ich spreche von den alten analogen Anlagen.
Das Summensignal der heutigen digitalen Anlagen bekommt extra künstliche 
Austastlücken. Die einzelnen Kanäle werden digital als Zahlenwert 
übertragen. Dazu werden keine Lücken benötigt. Die werden erst im 
Empfänger generiert.

mfG
Ulli

von Daniel H. (picprogger)


Lesenswert?

Hallo Jungs, ich danke für eure tatkräftige mithilfe bei meinem Problem.

Letzten Endes war das Problem auf dem Entwicklungsboard ein DIP-Schalter 
für die LED´s des PortC, der hat nämlich den Pin nach Masse gezogen und 
so konnten keine Signale gemessen werden.

Der Spannungspegel der aus dem Empfänger kommt reicht dem PIC und das 
Signal ist extrem fein, deshalb habe ich einen LM393 davor geschaltet 
dann ist das Signal ruhiger, und das bei Kanal 1, also kein Summensignal 
aber das werde ich jetzt auch probieren.

Wenn noch Fragen sind ich antworte.

Danke an alle die geholfen haben.

Gruß Daniel

von Peter D. (peda)


Lesenswert?

Daniel H. schrieb:
> Letzten Endes war das Problem auf dem Entwicklungsboard ein DIP-Schalter
> für die LED´s des PortC, der hat nämlich den Pin nach Masse gezogen und
> so konnten keine Signale gemessen werden.

Das hätte man auf dem Oszi aber sehen müssen.
Bzw. das Oszibild ist sinnlos, wenn man beim Messen nicht auch die 
Schaltung anschließt.


Peter

von Daniel H. (picprogger)


Lesenswert?

Nein das Oszi bringt das gleiche Signal der Spannungspegel ist 
vielleicht 0,2V geringer wenn der Schalter an ist, und das fällt ja 
nicht auf wenn man nicht weis dass das Signal nach Masse gezogen wird.

Und die Schaltung war immer angeschlossen.

von Peter D. (peda)


Lesenswert?

Daniel H. schrieb:
> vielleicht 0,2V geringer wenn der Schalter an ist

Das glaub ich Dir jetzt nicht, daß 0,2V der Unterschied zwischen 
Funktion und Nichtfunktion ist. Falls doch, ist die Funktion eher 
zufällig.

Ist der Eingang des PIC TTL-kompatibel, muß high >2,4V und low <0,4V 
sein.


Peter

von Daniel H. (picprogger)


Lesenswert?

Peter Dannegger schrieb:
> Ist der Eingang des PIC TTL-kompatibel, muß high >2,4V und low <0,4V
> sein.

Ja der Eingang ist TTL-kompatibel.
Und ja das sind wirklich 0,2V Unterschied, mit LM393 sind es dann ca. 
2V.

von Blackbird (Gast)


Lesenswert?

@Ulli B. (ulli-b)

Das Summensignal des Empfängers gibt das nicht dekodierte Sendersignal 
aus. Das ist die Aneinanderreihung aller Kanäle. Damit man die Kanäle im 
Dekoder trennen kann, gibt es die Austastlücke. Sie ist Teil des 
jeweiligen Kanalimpulses.

Das war das Resultat der damaligen "Enkoder" im Sender, die nichts 
weiter waren als eine als Ring verschaltete Kette von 
RC-Rerzögerungsgliedern.
Die Kanal-Potis waren Teil des RC-Gliedes.

Da ja auf das Ende des einen Impulses immer gleich der Anfang des 
nächsten Impulses fiel, war die Austastlücke zur Trennung notwendig.
Im Dekoder (meist mit CD4015, CD4022) wurde dann wieder die ganze Länge 
des Kanalimpulses gewonnen.

Deshalb sind die einzelnen Kanalimpulse an den Dekoderausgängen nicht 
per Diodengatter summierbar. Den Beginn der Austastlücke hat nämlich der 
Dekoder zum Weiterschalten benutzt.

0,2ms hat man zuerst verwendet, das hatte aber zur Folge, dass die 
Kanaltrennung größer als 10kHz war und damit nur 12 Kanäle im (damals) 
27MHz-Band belegt werden konnten. Mit 0,4ms Austastlücke kam man dann 
auf 10kHz-Bandbreite und man konnte alle 30 Kanäle störungsfrei 
verwenden.

Gilt für die alten "analogen" RC-Anlagen und wurde aus 
Kompatibilitätsgründen bis zum Schluß verwendet.


Blackbird

von Karl H. (kbuchegg)


Lesenswert?

Daniel H. schrieb:
> Nein das Oszi bringt das gleiche Signal der Spannungspegel ist
> vielleicht 0,2V geringer wenn der Schalter an ist, und das fällt ja
> nicht auf wenn man nicht weis dass das Signal nach Masse gezogen wird.

Wenn diese 0.2V den Unterschied ausmachen, dann hast du sowieso ein 
Problem.
Denn in der Digitaltechnik sind 0.2V de facto nichts. Entweder es ist 
High oder es ist Low. Und 0.2V unter einem sauberen High ist nichts, was 
eine Digitalschaltung aus dem Tritt bringen darf. Da ist man immer noch 
weit weg vom undefinierten Bereich.

von Michael R. (mexman) Benutzerseite


Lesenswert?

Daniel H. schrieb:
> Nein das Oszi bringt das gleiche Signal der Spannungspegel ist
> vielleicht 0,2V geringer wenn der Schalter an ist,

Also, wenn jemand hier mit so miesen Informationen um Hilfe bittet und 
dann noch stur behauptet, das Oszisignal sei gleich, weil es ja nur um 
0.2V geringer sei, der sollte zuerst lernen zu

RECHNEN und zu
MESSEN und ein Datenbuch zu
LESEN

und erst danach wieder einen Loetkolben in die Hand nehmen.

Gruss

Michael

von Klaus (Gast)


Lesenswert?

Daniel H

Hast du fällig an deinem ICP - Eingang einen Kondensator gegen GND
angeschlossen?
Falls Ja mach ihn schnell wieder weg.

Oder vllt. mal ausversehen mehr Spannung als max. Spannung des µC
auf den Eingang gegeben?
Falls Ja! könnte evtl. ein Transistor am Porteingang defekt sein
und dir das Signal herunter ziehen.

von Daniel H. (picprogger)


Lesenswert?

@Klaus

nein ich habe nichts der gleichen gemacht.
Bis jetzt läuft alles ohne Probleme.

von Daniel H. (picprogger)


Lesenswert?

Das wollte ich noch sagen.
Das Summensignal funktioniert seit gestern auch ohne Probleme perfekt.
Danke nochmal an Klaus, dein Code hat mir Zeit gespart.

von Blackbird (Gast)


Lesenswert?

[c]
// Die Messung pro Impuls beginnt mit steigender Flanke und wird 
gestoppt bei fallender Flanke.
[\c]

Nein, die Messung (im Summensignal) pro Impuls beginnt mit steigender 
Flanke und endet an der nächsten steigenden Flanke (oder: beginnt mit 
der fallenden Flanke und endet an der nächsten fallenden Flanke).

Blackbird

von Daniel H. (picprogger)


Lesenswert?

Blackbird schrieb
> Nein, die Messung (im Summensignal) pro Impuls beginnt mit steigender
> Flanke und endet an der nächsten steigenden Flanke (oder: beginnt mit
> der fallenden Flanke und endet an der nächsten fallenden Flanke).

ja, das macht Sinn, da kommen auch die richtigen Zeiten.

Aber jetzt sind die Kanäle vertauscht das war vorher nicht so, wie kommt 
das, oder muss ich da noch was in der FB einstellen?

von Klaus (Gast)


Lesenswert?

Daniel H. schrieb:
> Das wollte ich noch sagen.
> Das Summensignal funktioniert seit gestern auch ohne Probleme perfekt.
> Danke nochmal an Klaus, dein Code hat mir Zeit gespart.

Wenn das funktioniert hat seit 15.01.2013 14:16 bis 15.01.2013 22:19.

Dann ist die Frage was du seit her an dem von mir geposteten Code 
herumgefummelt hast?

von Daniel H. (picprogger)


Lesenswert?

Ich habe nur von H_L messen auf L_L messen umgestellt, weil die Zeiten 
nicht gestimmt haben, wie Blackbird schrieb.

von Klaus (Gast)


Lesenswert?

@Daniel

Blackbird schrieb:
> Nein, die Messung (im Summensignal) pro Impuls beginnt mit steigender
> Flanke und endet an der nächsten steigenden Flanke (oder: beginnt mit
> der fallenden Flanke und endet an der nächsten fallenden Flanke).

Das was Blackbird meint ist die Messung einer Periode aber der Code
von mir misst die Impulsbreite pro Kanal und legt diese Werte ins Array 
ab.

Jetzt kommt es darauf an was man sehen und haben will.
Blackbird  Vorschlag die Periode zu messen hatte immer zu folge,
dass das Array immer wieder falschen werten gefüllt wurde.
Du musst wissen das beim PPM - Signal die Kanäle von 1ms bis 2ms
die Impulsbreite variiert. Somit der Startframe mal gedehnt oder
gestauch wird. Kannst dir mal am Oszi angucken.

Ich hab locker mal drei Wochen gebraucht bis dann getan hat wie ich 
wollte.

von Daniel H. (picprogger)


Lesenswert?

dein Code ist ja auch ok, aber die Zeit die gemessen wird entspricht den 
Zeiten zwischen 500ms und 1500 und bei Blackbird's Methode 1000 bis 2000 
nur das die Kanäle so vetauscht sind und bei deiner eben nicht.

von Klaus (Gast)


Lesenswert?

Daniel H. schrieb:
> dein Code ist ja auch ok, aber die Zeit die gemessen wird entspricht den
> Zeiten zwischen 500ms und 1500 und bei Blackbird's Methode 1000 bis 2000
> nur das die Kanäle so vetauscht sind und bei deiner eben nicht.

AAh! Nun das könnte daran liegen das ich das bei mir mit einem
Atmega 32  mit 16Mhz laufen habe.
Vllt. den prescaler ander einstellen.
So ist es bei mir:

//ICP-Störfilter aktiv. ICP-PIN fallende Flanke. Prescaler clk/8 
eingestellt.

TCCR1B = (1<<ICNC1) | (1<<ICES1)  | (1<<CS11) | (0<<CS10);

von Klaus (Gast)


Lesenswert?

Daniel H. schrieb:
> 1000 bis 2000
> nur das die Kanäle so vetauscht sind und bei deiner eben nicht.

Wenn das mit meinem Code einliest ist das ja klar, weil das Periodisch 
eingelesen wird und somit das Array anderst gefüllt wird.

von Daniel H. (picprogger)


Lesenswert?

Ist ok ich nutze jetzt deine Methode und addiere dann 128 beim schreiben 
in das Array, dann stimmen auch die Zeiten in den Kanälen.

von Klaus (Gast)


Lesenswert?

Daniel H. schrieb:
> Ist ok ich nutze jetzt deine Methode und addiere dann 128 beim schreiben
> in das Array, dann stimmen auch die Zeiten in den Kanälen.

Das darfst du machen wie es dir beliebt.

Diese zeile:
if(((impulszeit >= 990)) & (impulszeit < 3000))

Soll eine Impulsbreite zwischen kleiner 1ms und etwas größer als 2ms 
erfassen. Die 3000 als Vergleichswert kann man auch runtersetzen auf 
2200.

Wenn Du mal mit dem Oszi das PPM-Signal messen tust wirst du feststellen
das sich die Kanäle nicht absolut genau zwischen 1ms und 2ms bewegen.
Schau es dir einfach mal an.

von Blackbird (Gast)


Lesenswert?

Die Impulszeiten liegen je nach Hersteller zwischen ca. 0,9ms bis ca. 
2,2ms. Die Mitte muß auch nicht 1,5ms sein.
Die Pause (ist auch nur ein großer Impuls) kann entweder der Rest einer 
festen Frame-Zeit (z.B. 22ms oder 40ms) sein oder eine feste Länge 
haben.
Wie gesagt, je nach Hersteller ist das unterschiedlich.

z.B.: Futaba: 1,520ms +- 0,760ms

Blackbird

von Blackbird (Gast)


Lesenswert?

Korrektur. 1,52ms +-0,42ms

Blackbird

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.