Free runningmodus mit ADC

OP #2369188
Lesenswert?
• ▲
▼
hi,

bin dabei den ADC einzustellen das er 3 verschiedene Spannungen erkennt 
und daraufhin an den ausgängen pc2 und pa6 eine led ansteuert.

der ADC eingang liegt an einem spannungsteiler, an dem die 3 
unterschiedlichen Widerstände angebracht werden. 1k, 2,2k, 6,8k Ohm

wenn ich jetzt z.b. den 1k gegen den 2,2k tausche, bleibt die 
dazugehörige Led an und geht nicht aus, obwohl ich denke das der free 
running modus eingeschaltet ist bei mir und dadurch doch jederzeit der 
neue messwert dazu führen muss das die jeweils richtige Led leuchtet!

code:

ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADIF) | (0<<ADIE) 
|(1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) ;

ADCSRB &= ~(1<<ADTS2) | ~(1<<ADTS1) | ~(1<<ADTS0) ;

ADMUX |= (0<<REFS1) | (1<<REFS0) | (1<<MUX0);


// 680 Ohm Kabel
  if ( (ADCW > 185) && (ADCW < 267))
  {
    PORTA |=   (1<<PA6);

  }

  // 220 Ohm Kabel
else if ( (ADCW > 542) && (ADCW < 624))
  {
    PORTC |=   (1<<PC2);

  }

   // 100 Ohm Kabel
else if ( (ADCW > 955) && (ADCW <= 1023))
  {
    PORTC |=   (1<<PC2);
    PORTA |=   (1<<PA6);
  }
Gast #2369202
Lesenswert?
• ▲
▼
Hi

>obwohl ich denke das der free
>running modus eingeschaltet ist bei mir und dadurch doch jederzeit der
>neue messwert dazu führen muss das die jeweils richtige Led leuchtet!

Du hast keine Stelle, an der eine Led ausgeschaltet wird.

MfG Spess
#2369207
Lesenswert?
• ▲
▼
Und das
1
ADCSRB &= ~(1<<ADTS2) | ~(1<<ADTS1) | ~(1<<ADTS0) ;

wird auch nicht das gewünschte Ergebnis liefern.

Probier das mal auf dem Papier durch. Das Ergebnis ist sehr erhellend 
und wichtig für dein weiteres Verständnis, daher solltest du diese 
Operation selber durchprobieren und nicht hier vorgekaut werden.


Gibt es einen Grund, warum du den Free-Running Modus nehmen willst und 
nicht die getesteten und funktionierenden Funktionen aus dem 
AVR-GCC-Tutorial?
#2369267
Lesenswert?
• ▲
▼
Marcel Bernstedter schrieb:
> hab ich mir keine gedanken darüber gemacht. Free running modus bedeutet
> ja das immer wieder neu gemessen wird und genau das brauche ich ja.
>
>
> bei dem tutorial sieht das so aus als würde ich die anzahl der messungen
> in eine fkt. eingeben.

Nö.
Bei den Tutorial Funktionen bedeutet
ein Aufruf der Funktion read_adc eine Messung.
Ist die Messung gemacht, liefert die Funktion den gemessenen Wert. Und 
beim nächsten Aufruf der Funktion wird wieder gemessen und beim nächsten 
Aufruf wieder. Mit jedem Aufruf der Funktion wird der gerad am Eingang 
anstehende Wert gemessen.

Ob du jetzt in einer Schleife den ADCW ausliest oder die Funktion 
aufrufst, ist in deiner Applikation (soweit ich das sehen kann) Jacke 
wie Hose.

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.