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

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.