Forum: Mikrocontroller und Digitale Elektronik Free runningmodus mit ADC


von Marcel B. (mazell)


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

von Dietrich L. (dietrichl)


Lesenswert?

Marcel Bernstedter schrieb:
> PORTA |=   (1<<PA6);

Da wird nur ein Bit gesetzt, aber nie gelöscht.

Gruß Dietrich

von spess53 (Gast)


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

von Karl H. (kbuchegg)


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?

von Marcel B. (mazell)


Lesenswert?

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.

von Karl H. (kbuchegg)


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.

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.