Probleme mit ADC und LCD

OP #2031182
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
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
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?
Gast
Hi

>Gibt es noch eine elegantere Lösung?

Schreibe einfach ein paar Leerzeichen vorher hin oder ersetze die 
führenden Nullen in Buffer durch Leerzeichen.

MfG Spess
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.