-
        

Ergebnis 1 bis 6 von 6

Thema: cmps03 mit pwm auslesen am avr16

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    cmps03 mit pwm auslesen am avr16

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    33
    Beiträge
    614
    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.
    it works best if you plug it (aus leidvoller Erfahrung)

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    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

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    33
    Beiträge
    614
    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/6.
    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.
    it works best if you plug it (aus leidvoller Erfahrung)

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    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

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •