Nochmals Guten Abend zusammen. vielen Dank, dass ihr mir ebend so schnell und kompetent geholfen habt. Darüber habe ich mich sehr gefreut! Ich habe es zum Laufen bekommen. Ich bin noch Anfänger und habe noch Schwierigkeiten, die Aussagen in diversen Büchern und Tutorials zu verstehen. Ich habe mir auch zwei gute Fachbücher zum Thema uC Programmierung gekauft. Jetzt ist mir alles klar, wie ich die Bits setzen muss, ohne die restlichen gleich wieder zu überschreiben. Anbei auch ein Bild, wo ich jetzt nochmal nachgelesen und verstanden habe, wie ich das Bit ADIF auswerten muss, wenn eine Conversion abgeschlossen ist. Anbei nochmal mein verbesserter Code. Eine Frage habe ich noch zum noise chancelling mode. Ist es so, dass man damit einige Schwankungen bei der Messung eliminiert, weil der Prozessor zum Teil abgeschaltet wird? Macht ihr davon oft Gebrauch? Viele Grüße und noch einen schönen Abend wünscht Matthias. #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include "lcd_tools.c" #ifndef F_CPU #warning "F_CPU war noch nicht definiert, wird nun nachgeholt" #define F_CPU 8000000UL // Systemtakt in Hz - Definition als unsigned long beachten // Ohne ergeben sich unten Fehler in der Berechnung #endif uint16_t result = 0; uint16_t result2 = 0; uint8_t i; char texte[10]; int main(void) { lcd_ini(); ADMUX = (1<<MUX2)|(1<<MUX1); //0x06; //channel selection // ADMUX &= ~((1<<REFS0)|(1<<REFS1)) ; // interne Referenzspannung aus , da eh schon null ADCSRA =(1<<ADPS2) | (1<<ADPS1); // Frequenzvorteiler: setzen auf 64 (8 MHz / 64 = 125 kHz) und ADC aktivieren ADCSRA |= (1<<ADSC); // start conversion (single?) bit stay high as long as the vonversion is in progress ADCSRA |= (1<<ADEN); // aktivieren ADCSRA |= (1<<ADATE); // free running mode auto triggering while(1) { result=0; for(i=0; i<10;i++) { while (!(ADCSRA & (1<<ADIF))); // auf Abschluss der Konvertierung warten , warten bis die Wandlung durchgeführt iwst und bit wieder auf Null result += ADCW; // Wert abholen } result /=10; dtostrf((double)result, 4,0, texte); lcd_gotopos(2,16); lcd_writetext (texte); } return 0; }
warum machst du eigentlich ständiug neu threads auf?
Hallo, weil ich dachte, dass man so leichter bemerkt, wenn ich geantwortet habe. Wenn ich einen von Euch antworte, dann bekommen doch die anderen Antworter keine EMalbenachrichtigung und wissen nicht Bescheid. Wenn Du meinst es ist besser keinenneuen Thread deswegen aufzumachen, dann lass ich das gern bleiben. Schöne Grüße, MAtthias.
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.