ADC free running mode aktivieren Atmega 16. Vielen Danke :-)

OP #1936871
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;
}
Angehängte Dateien:
OP #1936891
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.