Forum: Compiler & IDEs ADC Wert auf LCD ausgeben


von wirehead (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
hab ein problem mit der ausgabe des ADC Wertes auf ein Display, da ich
noch Anfänger in C und AVR bin bitte ich um nachsicht.
Ich verwende einen Mega16 und Programmiere in WINAVR, die LCD Routine
hab ich der einfachheit halber von Peter Fleury genommen.
Zu meinem Problem:
Ich möchte den ADC Wert direckt auf dem display darstellen, ok
funktioniert auch soweit, sobalt ich den ausgewählten eingang auf masse
lege, also wandlungsergebniss 0 bleibt der zuletzt gemessene Wert
einfach im Display stehen. Sofort nachdem ich die brücke wegnehme und
der eingang wieder freiliegt bzw über ein poti hab ich sofort wieder
aktualisierungen. Woran kann das liegen?
Wie gesagt ich bin noch ziemlicher Noob was C betrifft, wär nett wenn
mir es jemand erklären könnte.

Gruß
Torsten

von Karl heinz B. (heinzi)


Lesenswert?

Dein Code enthaelt eine Schleife:
Jetzt weisst Du auch, wozu Einrueckungen gut sind. Damit
auch ein Blinder sowas auf 30 Meter Entfernung 'sehen' kann.

Mit ein paar Leerzeichen da und dort, wird's gleich viiiiieeeel
lesbarer:

int main(void)
{
  lcd_init(LCD_DISP_ON);

  int result;
  char buffer[6];

  ADCSRA = _BV(ADEN) | _BV(ADPS0) | _BV(ADPS1) | _BV(ADPS2);
  ADMUX = _BV(REFS1) | _BV(REFS0);

  for (;;)
  {
    ADCSRA |= _BV(ADSC);

    while (ADCSRA & _BV(ADSC) )
    {
    }

    result = ADC;
    itoa( result, buffer, 10 );

    lcd_gotoxy( 0, 0 );
    lcd_puts( "ADC:" );
    lcd_gotoxy( 0, 1 );
    lcd_puts( buffer );
  }
}

Das hier:

for( ;; )
{
  ...
}

realisiert eine Endlosschleife. D.h. der Teil ... wird
wieder und wieder abgearbeitet. Und da in diesem Teil
das Wandlungsergebnis abgeholt und angezeigt wird, ...

von wirehead (Gast)


Lesenswert?

Hallo Heinzi,
danke für die formatierungshilfe.
Die Schleife war schon beabsichtigt (hab mich oben vieleicht etwas
unklar ausgedrückt) nur nicht das bei bei einem wandlungsergebniss von
0 das zu letzt gewandelte ergebtnis sagen wir z.B. mal 510, einfach im
display einfriert. Ich kann mir das nicht erklären, wenn ich dann
wieder die massebrücke zum entsprechenden ADC eingang entferne hab ich
sofort wieder ständige aktualisierung, wie ich mir das auch eigentlich
gedacht hab.

Gruß
Torsten

von Werner (Gast)


Lesenswert?

Du musst auch das alte Ergebnis überschreiben. Da Du nur die 0 ins Disp
schreibst, bleibt der alte Wert einfach stehen.

Werner

von wirehead (Gast)


Lesenswert?

Hallo Werner,
wo trit dieses Problem denn auf? Bei itoa oder wenn der adc wert in den
die result variable geschrieben wird?


Gruß
Torsten

von Werner A. (Gast)


Lesenswert?

Werner war nicht der fragestellende, das war wirehead (oder so)...

von Werner A. (Gast)


Lesenswert?

@wirehead:
sorry, is schon spät. Probier doch einfach mal jeweils die Zeile vorher
mit Leerzeichen zu überschreiben. Da ich damals direkt das integer
geschrieben habe mag es aber daran gelegen haben.
Werner

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.