Ich hab Probleme mit dem angehängten C Programm. Das Programm regelt die Pulsbreite eines PWM-Signals über einen AD-Wandler bei einem Atmega88. Funktioniert alles ganz gut, aber nur wenn ich mit in der main() mit der "goto" Funktion arbeite. Ein while(1) haut nicht hin. Weiß vielleicht jemand woran das liegt?
Beschreibe bitte genauer, was nicht funktioniert bzw. wie sich das ausdrückt, dass es nicht geht (wird das Programm noch korrekt kompiliert oder scheitert es bereits daran?). Ansonsten ist ADCSRA &= ~(1<<ADSC); //AD Wandlung deaktivieren Unsinn. Das ADSC kann nicht '0' geschrieben werden. Wenn der ADC im Single-Conversion-Mode läuft, wird das ADSC automatisch nach der Wandlung gelöscht. Für das deaktivieren des ADC ist das ADEN-Bit zuständig.
Ich glaub, da ist ein generelles Missverständnis drin: Wenn Du eine while-Schleife da reinsetzt, in der gar nichts getan wird, dann funktioniert das ganze sowieso nur ein einziges Mal. Du musst die AD-Wandlung und das aktualisieren des Compare-Registers des Timers natürlich in der while-Schleife machen. Dann klappts auch mit den Nachbarn...
Zum Verständnis: "while(1);" macht überhaupt nichts, und zwar so lange, wie '1' wahr ist, also forever... Es ist auch nicht sinnvoll, den Timer in jedem Schleifendurchlauf neu zu initialisieren. Das müsstest Du noch aufteilen, dass jedes Mal nur der Wert ins OCR übernommen wird. Die Ports usw. müssen nur einmal am Programmanfang initialisiert werden.
Hi jonny, danke für die Tipps! Nun funktionierts! Es lag daran, dass ich den AD-Wandler nicht in der while-Schleife initialisiert habe. Wie du halt schon gesagt hast....!!! Gruß
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.