Zeichen verschwinden bei DOG-M und ADC Abfrage

Gast #2045960
Lesenswert?

Hallo,
ich habe ein DOG-M 63 laufen. Das auch soweit funktioniert (nach einigen 
init. problemen)
Nun frage ich einen ADC Wert ab und lasse ihn mir erst einmal direkt 
ausgeben. Nun habe ich das Problem, dass wenn der AD Wert 100 übersteigt 
und wieder unter 100 fällt quasi die 0 stehen bleibt ebenso bei dem 
Wechsel von 10 auf 9...wenn ich also wieder 0 erreiche zeigt es 000 an.

Wenn ich vor dem schreiben ein clear einfüge, dann schimmert der ADC 
Wert nur noch durch!

Hier mal meine Main mit clear in der Schleife (ADC-Wert schimmert durch) 
Ich habe nun auch schon ein delay dahinter eingefügt ohne Besserung!

Für Vorschläge an was es liegen könnte, wäre ich dankbar.

int main(void)
{
  lcd_init();
  lcd_clear();
  ADC_Init();
while (1)
  {
   char Buffer[30];
    result = ADC_Read(2);
           lcd_clear();
    lcd_goto_xy( 8, 2 );
    itoa(result, Buffer, 10);
    lcd_write(Buffer);
    }
  }

mfg Frank
#2045977
Lesenswert?

Frank schrieb:

> Nun frage ich einen ADC Wert ab und lasse ihn mir erst einmal direkt
> ausgeben. Nun habe ich das Problem, dass wenn der AD Wert 100 übersteigt
> und wieder unter 100 fällt quasi die 0 stehen bleibt ebenso bei dem
> Wechsel von 10 auf 9...wenn ich also wieder 0 erreiche zeigt es 000 an.

zutreffende Analyse

> Wenn ich vor dem schreiben ein clear einfüge, dann schimmert der ADC
> Wert nur noch durch!
>
> Hier mal meine Main mit clear in der Schleife (ADC-Wert schimmert durch)
> Ich habe nun auch schon ein delay dahinter eingefügt ohne Besserung!

Du gehst das 'Problem' falsch an.
Die Lösung liegt nicht darin, das Display zu löschen, sondern dafür zu 
sorgen, dass diese überzähligen Zeichen bei einem Wechsel der 
angezeigten Stellen auch wieder gelöscht werden. Zum Beispiel dadurch, 
dass man hinten nach einfach noch ein paar Leerzeichen ausgibt, die eine 
eventuell von vorher noch sichtbare überzählige Ziffer automatisch 
löschen.

Überschreibe ich 100 mit 99, dann bleibt mir 990 an Display stehen. 
Überschreibe ich 100 aber mit "99 ", dann überschreibt mir das 
Leerzeichen die 0 und es steht tatsächlich 99 am Display.


Oder aber, in dem man den Wert immer rechtsbündig in einem Feld ausgibt 
und entweder führende 0-en akzeptiert oder anstelle von führenden 0-en 
wieder Leerzeichen hinmalen lässt.

> while (1)
>   {
>    char Buffer[30];
>     result = ADC_Read(2);
>            lcd_clear();

lcd_clear, weg damit

>     lcd_goto_xy( 8, 2 );
>     itoa(result, Buffer, 10);

zb so
      sprintf( Buffer, "%4d", result );

anstelle von itoa.

>     lcd_write(Buffer);
>     }
>   }
>
> mfg Frank

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