Forum: Mikrocontroller und Digitale Elektronik AVR ADC scheint nicht zu messen.


von lush (Gast)


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!

von Jim M. (turboj)


Lesenswert?

lush schrieb:
1
   const uint16_t adc_env = read_adc( CHANNEL ); // << CHANNEL == 2

Sollte dieses Konstrukt nicht einen Compiler Fehler der Art "Initializer 
expression is not constant" erzeugen?

von lush (Gast)


Lesenswert?

Jim Meba schrieb:
> Sollte dieses Konstrukt nicht einen Compiler Fehler der Art "Initializer
> expression is not constant" erzeugen?

Also ich bekomme bei dem Code weder Errors, noch Warnings..
Hab das 'const' mal rausgenommen, aber keine Änderung.
Trotzdem danke!

von lush (Gast)


Lesenswert?

Problem hat sich erledigt!
Hatten einen dummen Fehler mit der Referenzspannung..

Danke für alle, die sich das Problem angeschaut haben.

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.