PWM mit AVR auslesen

Gast #5680432
Moin Leute,
Ich steh vor folgendem Problem,
ich möchte mit einem AT90can128 ein Pwm-Siganl mit fester Frequenz(1kHz) 
auswerten. Kurz gesagt ich möchte die High oder Low-Zeit messen um dann 
den duty-cycle zu bestimmen. Je nach Duty-Cycle möchte ich dann 
verschiedene Aktionen ausführen. Hat da vlt einer einen kleinen 
Beispielcode oder ähnliches? Habe schon Ewigkeiten mit googlen verbracht 
aber nichts gescheites gefunden.
(Programmiere übrigens in c mit Ateml Studio7 )
Danke im Voraus
Gast
Ich habe kein Beispiel. Normalerweise benutzt man dazu die Capture 
Funktion des Timers. Man captured jeden Flankenwechsel und in der ISR 
wird dann die Zeitspanne berechnet.
Gast
Leider funktioniert das Beispielprogramm wohl nicht mit dem at90can. 
Bekomme jedes mal eine Fehlermeldung das icp.h nicht vorhanden ist. Ein 
Beispielprogramm wo vlt je nach duty cycle ein pin auf high gesetzt wird 
o.ä,würde mir echt weiterhelfen.
Danke im voraus.
Peter schrieb:
> Leider funktioniert das Beispielprogramm wohl nicht mit dem at90can.
> Bekomme jedes mal eine Fehlermeldung das icp.h nicht vorhanden ist.

Das klingt nicht so, als würde es am Controller liegen.

Und gegebenenfalls musst du in der device.h noch einen Fall für den 
AT90CAN anlegen und die entsprechenden Registernamen anpassen.
Eigentlich ist das Beispiel funktionierend und sollte leicht 
abstrahierbar sein. Und du solltest einen Timer nehmen, der noch frei 
ist.
Peter schrieb:
> Moin Leute,
> Ich steh vor folgendem Problem,
> ich möchte mit einem AT90can128 ein Pwm-Siganl mit fester Frequenz(1kHz)
> auswerten. Kurz gesagt ich möchte die High oder Low-Zeit messen um dann
> den duty-cycle zu bestimmen.

Man nehme einen RC-Tiefpass und einen ADC-Eingang. Wenn das PWM-Signal 
von außen nochmal durch ein Gatter puffert, welches an der gleichen 
Versorgungsspannung wie dein ADC hängt, ist das eine ratiometrische 
Messung und damit unabhängig von VCC. Außerdem funktioniert das auch bei 
sehr hohen PWM-Frequenzen.

> Je nach Duty-Cycle möchte ich dann
> verschiedene Aktionen ausführen. Hat da vlt einer einen kleinen
> Beispielcode oder ähnliches? Habe schon Ewigkeiten mit googlen verbracht
> aber nichts gescheites gefunden.

Dann hast du sehr schlecht gesucht.
Gast
Peter schrieb:
> Leider funktioniert das Beispielprogramm wohl nicht mit dem at90can.

Natürlich nicht. Du müsstest Dir jede einzelne Fehlermeldung vornehmen 
und die #defines im device.h anpassen (Registernamen, Ports). 
Fehlermeldung ("... undeclared ...") anklicken, Rechte Maustaste, Goto 
Implementation, dann bist Du bei dem zugeh. #define. Im Datenblatt 
nachsehen, wie Register im aktuellen Controller heißt, oder anderen Port 
wählen, oder ... Sollte aber machbar sein.
mfg
Achim

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.