www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC des ATMEGA168


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe folgendes Problem:

Möchte denn ADC in FREE Running mode verwenden und wenn ein Wert fertig
gewandelt ist soll er in die Interrupt Routine springen. Problem: Er
macht das genau einmal und ich finde den Fehler nicht im Programm:


int main (void)
{
ADMUX |= (1<<REFS0);
ADCSRA|= (1<<ADIE) |(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
ADCSRA |=(1<<ADEN);
ADCSRA|=(ADSC);

for(;;);



}
SIGNAL (SIG_ADC)
{

....

}

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne auto trigger kein free running mode.

Autor: Richard B. (rbrose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist das gemeicht ohne auto trigger kein free running mode? Ich kann 
ich auto trigger aktivieren?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such mal im Datasheet nach ADATE.

Autor: Richard B. (rbrose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir ... jetzt funktioniert free running mode.
Wie aktiviere ich den eingentlich den 8bit ADC? und nicht 10bit? Will 
das meine Werte von 0 bis 255 gehen.

Danke

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ADLAR setzen und nur ADCH verwenden.

Autor: Richard B. (rbrose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber dann ist ADCH immer nur 255 :-( egal wieviel V dran liegt.

Autor: Richard B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
irgendwas stimmt mit dem Free Running Mode. Es wird immer nur die erste 
Messung ausgegeben:

  //init ADC
  ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADPS2) | (1<<ADPS1);    // Frequenzvorteiler  // setzen auf 8 (1) und ADC aktivieren (1)       
  ADCSRB = (0<<ADTS2) | (0<<ADTS1) | (1<<ADTS0);   // Free running mode. 
    ADMUX |= (1<<REFS0) | (0<<ADLAR); // AVCC als Referenz



  while(1) 
   {      
    long_delay(1000);

    uint16_t tmp = ADCW;
    char buffer[20];
    itoa(tmp, buffer,10);
    uart_puts(buffer);

       }

Wieso wird ADCW nicht aktualisiert? ADATE ist aktiviert ....

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> ADCSRB = (0<<ADTS2) | (0<<ADTS1) | (1<<ADTS0);   // Free running mode.
Das stimmt nicht...

rtfm. Jörg
ps.: Lass uns bei dem Neueren Thread in GCC-Forum beleiben

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.