Forum: Mikrocontroller und Digitale Elektronik Zeichen verschwinden bei DOG-M und ADC Abfrage


von Frank (Gast)


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

von Karl H. (kbuchegg)


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

von Frank (Gast)


Lesenswert?

ah ok, hab es jetzt mit auffüllen von Leerzeichen gemacht aber hat 
geklappt :) so schnell kann es gehen :)

danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.