PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cmps03 mit pwm auslesen am avr16



pebisoft
06.09.2005, 16:34
hallo, ich habe das compassmodul cmps03.
ich kann es unter i2c auslesen, ganz korrekt.
nun steht da auch:
ein messwert wird auch an einem pin als pwm-signal geliefert.
1ms sind 0-grad und 35ms sind 359grad. das signal geht dann für 65ms auf low, so das die zykluszeit 65ms plus pulszeit beträgt
wie kann ich jetzt den pwmwert mit basic herausfiltern.
verstehe dieses umwandeln nicht.
mfg pebisoft

Gottfreak
06.09.2005, 18:40
Was genau meinst du mit Umwandeln?
Winkel in Grad = ((Pulsdauer in ms) -1)*359/34
Die Low-Zeit brauchst du ja nicht mitzumessen. Du schließt den PWM-Ausgang am besten an einen Interrupt-Pin(den du auf toggle stellst) an. Wenn der Pin auf High geht, setzt du in der ISR den Timer auf 0 und wenn er wieder auf low fällt, kannst du die Zeit auslesen.

pebisoft
06.09.2005, 19:29
wie wird der interrupt auf toggle gestellt und wie wird der isr auf 0 gestellt.
habe einen avr16. habe fast noch nicht mit interrupt geproggt.
mfg pebisoft

Gottfreak
07.09.2005, 07:44
Auf welche Pegelwechsel der Interrupt reagiert, stellst du im Register MCUCR ein. Bit 0 setzen stellt int0 auf toggle, bit 2 macht das gleiche für int1(Datenblatt vom Mega16 S.66).
Dann musst du noch Interrupts im allgemeinen anmachen. Ich glaub, das heist in Bascom
"enable interrupts"
und den externen Interrupt anmachen(in GICR bit 6/7 setzen - Datenblatt S.67/68).
Wieso stellst du die Frage eigentlich im C-Forum, wenn du Basic verwendest? Es gibt hier sowohl ein allgemeines AVR-Forum als auch ein Bascom-Forum.

ISR steht für "interrupt sercice routine"(oder so ähnlich). Das ist der code, der ausgeführt wird, wenn die Interrupt-Bedingung eintritt.
Da setzt du, wenn der Pegel gerade auf high gegangen ist, den Timer auf 0(je nach gewünschter Genauigkeit suchst du dir halt einen freien 8- oder 16-bit Timer aus.). Wenn der Pegel dann wieder auf low geht, kannst du den Wert des Timers auslesen und weist also, wie lang der Puls war.
Wie die in Bascom aussehen, weis ich jetzt nicht genau(hab' ich aber schonmal gemacht, ist nicht so schwierig, guck' mal in die Hilfe.).

PS: Wenn du das Datenblatt zu deinem AVR nicht hast, lad' es dir 'runter. Viele deiner Fragen werden da ganz schnell beantwortet.

pebisoft
07.09.2005, 21:16
ich progge in fastavr-basic.
die im bascom-forum kennen sich nicht so gut aus mit den registern , weil alles mundgerecht vorgegeben wird, da kommt es nur darauf an, das es funktioniert aber nicht wie. da fastavr in der geschwindigkeit ebenbürtig ist mit winavr-c ,möchte ich auch mit den registern proggen wie in winavr-c, macht halt mehr spass und man bekommt mehr erfahrung.
vielen dank für deien hilfe.
mfg pebisoft

pebisoft
08.09.2005, 08:53
hallo, habe die ersten ergebnisse in fastavr hinbekommen mit deiner hilfe, klasse. da fastavr fast so schnell ist wie winavr-c , ist die zeit mehr als ausreichend um die gradzahl unter einem grad heraus zu bekommen, bis auf 0.5 grad bin ich runtergegangen..
mfg pebisoft