www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit ADC


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi an alle!

Ich verwende bei meinem ATMega8 den ADC0 und ADC1. Mit beiden Convertern 
frage ich jeweils ein Poti ab, dass die Pulsweite für eine PWM-Signal 
(Helligkeitssteuereung einer LED) festlegt (wird mit Timer0 und Timer2 
erzeugt - kein HardwarePWM). Die Abfragen der ADC-Kanäle erfolgt im 
Hauptprogramm.

Es funktioniert prinzipiell einwandfrei, nur habe ich das Problem, dass 
die LEDs flackern. Warum könnte das sein?

Hier mein Hauptprogramm (BASCOM):

Do
  Admux.0 = 0
  Adcsra.6 = 1
  While Adcsra.6 = 1
  Wend
  Adc_val1 = Adch

  Intens1 = Adc_val1
  Intens2 = 255 - Intens1

  Admux.0 = 1
  Adcsra.6 = 1
  While Adcsra.6 = 1
  Wend
  Adc_val2 = Adch

  Zwsp2 = Adc_val2 / 255

  Intens1 = Intens1 * Zwsp2
  Intens2 = Intens2 * Zwsp2
Loop

Mein Programm läuft mit 10MHz, Prescaler bei beiden Timern ist 64 und 
beim ADC 128.

Ich wüßte nicht, woher das Flackern kommen könnte!

Hoffe ihr könnt mir weiterhelfen!!


Danke,
Andy

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du die Fuses richtig gesetzt? Also ich meine bzgl. externem Takt?

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die passen alle!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy wrote:
> (Helligkeitssteuereung einer LED) festlegt (wird mit Timer0 und Timer2
> erzeugt - kein HardwarePWM).

Wie machst du die PWM dann?

> Es funktioniert prinzipiell einwandfrei, nur habe ich das Problem, dass
> die LEDs flackern. Warum könnte das sein?

Weil die PWM Frequenz nicht hoch genug ist.

Autor: Willi Wacker (williwacker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es sein, dass Du Deine PWM-Eigenschaften veränderst, wenn ein 
entsprechender Zyklus noch aktiv ist?

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, die Timer-Routinen sehen so aus:

On_timer0:
  Toggle Channel1

  If Channel1 = 1 Then
    Timer0 = Intens1
  Else
    Timer0 = 255-Intens1
  End If
Return

Damit wird ein PWM-Signal erzeugt.


Und die PWM-Frequenz beträgt über 600Hz. Also dürfte man da nichts 
sehen.

Außerdem: Ich verwende einen ATMega48 anstatt eines ATMega8.


THX... Andy

Autor: aaa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
While Adcsra.6 = 1
  Wend
 ich hasse While schleifen

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@aaa:
Sagst du mir das, weil die while-Schleife dieses Flackern verursachen 
könnte, oder ist das nur so nebenbei bemerkt? :)


lg
Andy

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.