ADC Wert auf LCD ausgeben

Gast #283759
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
Angehängte Dateien:
#283760
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, ...
Gast #283761
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
Gast #283765
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.