Forum: Mikrocontroller und Digitale Elektronik PWM Signal einlesen


von Axel L. (axelleibold)


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.

von hans (Gast)


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

von Linker (Gast)


Lesenswert?


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.