Forum: Mikrocontroller und Digitale Elektronik ADC programmieren in C


von Patrick (Gast)


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?

von Steffen (Gast)


Lesenswert?

ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADIE); //ADEN =an , ADSC =
start, ADIE = Interrupt
  ADCSRA |= (1<<ADPS2) | (1<<ADPS1); //teilungsfaktor
  //fertig

vielleicht erst den Teiler einstellen und dann den ADC starten.

Dann eine Messung verwerfen, und dann erst in den normalen Betrieb gehen

s. 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Analoge_Ein-_und_Ausgabe

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.