PWM Signal einlesen

OP #1059215
Lesenswert?

Guten Abend und noch ein Problem

wie schon gesagt würde ich gern ein PWM Signal einlesen mit meinem 
Atmega 32.

ich hatte mir so ein kleines Programm zusammengestellt, was vielleicht 
nicht die beste  Lösung ist aber naja.

ich wollte nur mal Fragen ob das so rein theoretisch funktionieren 
könnte, weil es praktisch noch nicht so richtig läuft. ( beim 
compilieren werden keine Fehler angezeigt.


#include <avr/io.h>
#include <util/delay.h>

#define PWM PINA0
#define f 16.2

unsigned char zaehler1 = 0;
unsigned char zaehler2 = 0;
float ergebnis;
float T;
float high;

int main (void)

{
                  //auf eingang schalten

PORTA=0x00;
DDRA=0x00;            /* PIN PB0 auf Eingang (Taster)            */


while(1){

zaehler1=0;             //zaehler auf null setzten
zaehler2=0;

while(PWM==1)
{
};                               //warten bis eine 0 kommt
                                     //und eine neue messung losgeht
while(PWM==0)                         //warten bis eine 1 kommt
{
zaehler1 ++;                           //zahler alle 2 hochsetzen
_delay_us(2);
};

while(PWM==1 )                         //warten bis eine 0 kommmt
{
zaehler2 ++;
_delay_us(2);
}
ergebnis=(zaehler1/zaehler2);
T=1/f;                                 // T = Periode
high=T/ergebnis;                      // high = Dauer des HIGH Signals

_delay_ms(20);
}



Ich danke für jede Hilfe.
Gast #1059225
Lesenswert?

Die erste while ist schon mal nichts. Wenn du auf 0 warten willst, aber
schon 0 hast geht er gleich weiter. Stört aber nicht, da die schleife
sowieso wegoptimiert wird (kein befehl in der Schleife).

T kann oben als #define gerechnet werden.

Genauigkeit ist so nur mangelhaft, such mal nach Timer und 
Frequenzmessung.

Es wäre hilfreich wenn in der Frage z.B. das Signal erklärt wird,
also Frequenz der PWM, und der einsatzfall.

gruß hans

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren