AVR ADC scheint nicht zu messen.

Gast #3633088
Lesenswert?

Hi zusammen,
ich versuche momentan mit einem Kumpel ein wenig mit einem ADC 
rumzuspielen..

Ich habe eine init_adc()-Fkt., die wiefolgt aussieht:
1
void init_adc( void )
2
{
3
  ADMUX = (1<<REFS0);
4

5
  ADCSRA = (1<<ADPS2) | (1<<ADPS1); // prescale 64
6
  ADCSRA |= (1<<ADEN);
7

8
  ADCSRA |= (1<<ADSC);
9
  while( ADCSRA & (1<<ADSC) ) {}
10

11
  (void) ADCW;
12
}

Zudem habe ich die Fkt. read_adc:
1
uint16_t read_adc( uint8_t channel )
2
{
3
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
4
  ADCSRA |= (1<<ADSC);
5

6
  while( ADCSRA & (1<<ADSC)) {}
7
  
8
  return ADCW;
9
}


Wenn meine Main-Fkt. nun wiefolgt aussieht:
1
int main( void )
2
{
3
   init_adc();
4

5
   const uint16_t adc_env = read_adc( CHANNEL ); // << CHANNEL == 2
6
   delay_ms( 50 ); // std.-fkt. um das programmm 50ms zu pausieren
7

8
   uint16_t adc_cur;
9

10
   while( true )
11
   {
12
     adc_cur = read_adc( CHANNEL );
13

14
     if( adc_cur == adc_env )
15
         switch_beeper( false );
16
     else
17
         switch_beeper( true );
18

19
     delay_ms( 200 );
20
   }
21

22
   return 0;
23
}

(switch_beeper schaltet dabei einen summer an oder aus)

Dann müsste der Summer doch angehen, falls der ADC zwei verschiedene 
Werte misst oder?

(avr/io.h, stdbool.h sind inkludiert)

Leider funktioniert es nicht wirklich..
Der ADC bekommt seine Werte durch Photodioden, und der Summer geht nicht 
an, wenn ich die Photodioden beleuchte.. (switch_beeper funktioniert)

Vielen Dank für eure Hilfe!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren