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.
