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
Sieh dir mal Zeile 42 deines Programms genauer an. Da solltest du ansetzen.
Daniel H. schrieb: > Danke @Eumel, dumm kommen kann ich mir alleine. Aber du kannst nicht mit mehr Informationen kommen.
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.
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.
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.
was heist Zeile 42 ? Und warum funktioniert das dann mit dem einen und mit dem Neuen nicht?
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!
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?
Könnt ihr nicht offen reden und nicht in Rätseln, macht ihr das immer so? Sagt doch einfach was ihr wollt.?
Magnus M. schrieb: > Kein Geier weiß bis jetzt wie dein Code aussieht. Dieser Satz ist dir ein Rätsel?
sorry aber diesen Satz habe ich irgendwie immer überlesen. Ich entschuldige mich bei allen für meine Augen. Hier der Code.
T1CON muss so T1CON = 0b00110001; Ach ja da Oszi sagt bei beiden Empfängern das gleiche. min 18ms pause dann 2 bis 1ms signal.
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.
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.?
Der eine Empänger bringt ein Summensignal, der Andere nicht...
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.
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).
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?
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?
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
Ich habe auch schon gesucht im Datenblatt habe aber nichts gefunden. Wo könnte man das finden?
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
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.
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.
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.
@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.
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.
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
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.
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.
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.
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.
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
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.
Den Pull-Up am Ausgabe des LM339 hattest Du schon verwendet? Laut einer Webseite 3 bis 15 KByte in Richtung VDD deines PICs.
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
Daniel H. schrieb: > Hier der Code. > INTCON.GIE = 1; // Enables global interupts Darf man das beim PIC innerhalb eines Interrupts? Peter
>> 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
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
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
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
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.
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
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.
@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
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.
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
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.
@Klaus nein ich habe nichts der gleichen gemacht. Bis jetzt läuft alles ohne Probleme.
Das wollte ich noch sagen. Das Summensignal funktioniert seit gestern auch ohne Probleme perfekt. Danke nochmal an Klaus, dein Code hat mir Zeit gespart.
[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
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?
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?
Ich habe nur von H_L messen auf L_L messen umgestellt, weil die Zeiten nicht gestimmt haben, wie Blackbird schrieb.
@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.
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.
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);
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.