ADC programmieren in C

Gast #3487564
Lesenswert?

Hallo liebe Community,

ich möchte mit mit dem ADC von einem ATmega8A Spannungen messen und je 
nach Spannung einen Ausgang durchschalten, damit eine LED, die an dem 
Ausgang angeschlossen ist, zum leuchten zu bringen. Ich will nämlich 
folgendes bauen:
an meinen Subwoofer will ich die Spannung messen und je nach Bassstärke 
(Spannung) soll dann eine LED leuchten.
Nun hab ich ein Programm in C geschrieben, um dieses Projekt zu 
realisieren:


#include <avr/io.h>
#include <avr/interrupt.h>

ISR (ADC_vect){
  if((ADCH >=0 && (ADCH < 0x70))){
    PORTD |= (1 << PD5); // Rot an
    PORTD &= ~((1<<PD6)|(1<<PD7)); // Rest aus
  }
  else if (ADCH<0xc0){
    PORTD |= (1 << PD6);
    PORTD &= ~((1<<PD7)|(1<<PD5));
  }
  else{
    PORTD |= (1 << PD7);
    PORTD &= ~((1<<PD5)|(1<<PD6));
  }
}
int main(void){
  DDRD = 0b11111111; //ausgang d5,6,7 später rot grün blau
  //AD wandler konfigurieren
  ADMUX |= (1<<ADLAR); //8bit wandlung
  ADMUX |= (1<<MUX1); //ADC2 bzw PortC2
  ADMUX |= (1<<REFS1) | (1<<REFS0);
  ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADIE); //ADEN =an , ADSC = 
start, ADIE = Interrupt
  ADCSRA |= (1<<ADPS2) | (1<<ADPS1); //teilungsfaktor
  //fertig

  sei(); //interrupt starten

  while(1){

  }
}

Doch nun habe ich ein Problem, wenn ich meinen Subwoofer oder 
verschiedene Batterien (zur Kontrolle verschiedener Spannungen) an PC2 
anschließe, passiert nichts. Natürlich habe ich noch einen 
Spannungsteiler gebaut, damit maximal 2,55V am PC2 ankommen. Jetzt frage 
ich mich was ist an dem Code falsch?

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