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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren