Probleme mit ADC und LCD

OP #2031182
Lesenswert?
• ▲
▼
Guten Abend,
ich habe ein Problem mit meinem ADC bzw. mit meinem LCD.
1
  int main(void)
2
  {
3

4
  uint16_t variable;
5
  char Buffer[10];
6

7
      lcd_init();
8
      ADC_Init();
9
 
10

11
  while(1)
12
      {
13
    lcd_setcursor( 0, 1 );
14
    lcd_string("Analogwert");
15
      lcd_setcursor( 0, 2 );
16
      variable = ADC_Read(0);
17
    itoa( variable, Buffer, 10 ); 
18
      lcd_string( Buffer );
19
      }
20
 
21
    return 0;

Der Code liefert mir den Analaogwert von Channel 0 auf meinem Display. 
Nun habe ich jedoch das Problem, dass wenn ich das Poti wieder runter 
drehe, auch in der 0 Stellung des Potis "0520" stehen bleibt.
Starte ich den µC wieder neu, wird auch der Wert wieder auf Null gesetzt 
und ich kann ohne Probleme hoch drehen.
Das Problem beim herunterdrehen bleibt jedoch bestehen.
Wo liegt das Problem?
Viele Grüße
OP #2031194
Lesenswert?
• ▲
▼
1
uint16_t ADC_Read( uint8_t channel )
2
{
3
  // Kanal waehlen, ohne andere Bits zu beeinflußen
4
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
5
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
6
  while (ADCSRA & (1<<ADSC) ) {}  // auf Abschluss der Konvertierung warten
7
  return ADCW;                    // ADC auslesen und zurückgeben
8
}

Normalerweise müsste die doch funktionieren, da sie aus dem Tutorial 
stammt.
Viele Grüße
OP #2031213
Lesenswert?
• ▲
▼
Das Problem liegt anscheinend darin, dass das LCD die Zeichen, die nicht 
geändert werden, einfach stehen lässt.
Ich habe nun am Ende der while Schleife ein lcd_clear() eingebaut.
Jetzt verschwinden die überflüssigen Zeiten.
Nun flackert das Bild jedoch, da es sich ja jedesmal wieder neu aufbauen 
muss.
Gibt es noch eine elegantere Lösung?
#2031235
Lesenswert?
• ▲
▼
Idealer Weise schreibt man sich noch eine Funktion, die eine Anzahl 
Leerzeichen schreibt. Und mit strlen ermittelt man, wieviel es sein 
müssen.
Auch schreibt man Zahlen gerne rechtsbündig.
Hier mal ein Beispiel:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296


Das lcd_clear solte man generell verbannen. Das dadurch hervorgerufene 
Flackern sieht äußerst unprofessionell aus.
Leider sieht man oft auch kommerzielle Geräte, die heftig vor sich hin 
flackern.


Peter

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.