mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD-Wandler steuert PWM in C


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.