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