Forum: Mikrocontroller und Digitale Elektronik PWM mit AVR auslesen


von Peter (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Sebastian R. (sebastian_r569)


Lesenswert?

Guck dir mal die Application Note AVR135 von Atmel an:

https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en591541

Das tut's eigentlich ganz gut.

: Bearbeitet durch User
von Peter (Gast)


Lesenswert?

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.

von Sebastian R. (sebastian_r569)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

von J. Zimmermann (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.