Forum: Mikrocontroller und Digitale Elektronik ADC free running mode aktivieren Atmega 16. Vielen Danke :-)


von Matthias H. (maethes26)


Angehängte Dateien:

Lesenswert?

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;
}

von Regler (Gast)


Lesenswert?

warum machst du eigentlich ständiug neu threads auf?

von Matthias H. (maethes26)


Lesenswert?

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
Noch kein Account? Hier anmelden.