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
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, ...
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
Du musst auch das alte Ergebnis überschreiben. Da Du nur die 0 ins Disp schreibst, bleibt der alte Wert einfach stehen. Werner
Hallo Werner, wo trit dieses Problem denn auf? Bei itoa oder wenn der adc wert in den die result variable geschrieben wird? Gruß Torsten
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.