PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gemessener PULSEIN-Wert wie umrechnen?



t0bias
02.07.2012, 13:29
Hallo,

ich versuche ein CMPS09 Kompassmodul im PWM-Mode mittels dem PULSEIN-Befehl in Bascom abzufragen.
Gemäss Doku werden Pulslängen von 0,1 bis 36,99 ms übertragen.
Nun bekomme ich aber Werte wie 3837 und ich kriegs nicht hin, die in eine Grad-Angabe umzurechnen... :confused:

Wer kann helfen?

Grüsse Tobi

Klebwax
03.07.2012, 05:29
To aid the more basic controllers we have included a PWM mode of operation. As the compass is rotated a high pulse will be generated that is proportional to the current angle. The pulse width varies from 1mS (0° ) to 36.99mS (359.9° ) – in other words 100uS/° with a +1mS offset. The signal goes low for 65mS between pulses, so the cycle time is 65mS + the pulse width - ie. 66ms-102ms.

MfG Klebwax

t0bias
03.07.2012, 13:43
Danke Klebwax für deine Antwort;
sorry, wenn ich so doof zurückfrage,
bin noch ziemlich neu auf diesem Gebiet,
aber das versteh ich immer noch nicht so ganz,
3837, sind das denn mS? oder uS?
Und wenn doch 100uS einem Grad ° entsprechen,
dann ist doch 38,37 immer noch eine unsinnige
Angabe (dürfte doch max, 36,99 + 1 sein)?

Klebwax
03.07.2012, 17:46
Ich benutze kein Bascom, kenne daher den PULSEIN Befehl nicht. Aber so wie es ein Datenblatt zum CMPS09 gibt (mein Zitat ist aus diesem) wird es auch ein Bascom Handbuch geben, in dem PULSEIN beschrieben ist.

MfG Klebwax

wkrug
03.07.2012, 18:17
Bei RN-Wissen steht:

Bascom verfügt für diesen Zweck über den PULSEIN-Befehl, daher wird ein Programm extrem kurz. Die Messung erfolgt in etwa in 100 Abstufungen, da Pulsein in 10 µSek Schritten die Zeit ermittelt (läßt sich in Libary ändern).
Ich würde dazu einen Timer1 ( 16Bit ) und den Input Capture Interrupt verwenden.
Bei einem 8MHz Quarz und einem Prescaler von 8 bekommst Du die Messwerte in µS raus.

Das Interrupt Sensing wir dazu zuerst auf steigende Flanke gestellt.
Kommt diese wird der Wert des Timers1 ( ICR1 ! ) in einer Variablen abgespeichert und das Sensing auf fallende Flanke umgestellt.
Tritt diese dann auf wird der Timer1 erneut ausgelesen und der vorherige Wert abgezogen.
Das Ergebnis ist die Impulslänge in µs und daraus sollte sich die Ausrichtung des Kompasses errechnen lassen.

MagicWSmoke
03.07.2012, 18:23
Pulsein ist 'ne recht einfach aufgebaute Zählschleife, die pro Durchgang 10 Prozessorzyklen braucht, die Angabe laut Hilfe von 10µS bezieht sich also auf einen Takt von 1MHz.
Somit ist ein Zählwert von 3837 theoretisch 38370 µs = 38,37ms, der Fehler zu 36,99ms resultiert ganz einfach aus der Ungenauigkeit des internen RC-Oszillators.