Forum: Mikrocontroller und Digitale Elektronik ADC-Problem AT90CAN32


von Anfängerin (Gast)


Lesenswert?

Könnte mir jemand helfen? Bin noch eine ziemliche Anfängerin.
Ich bringe den ADC einfach nicht zum laufen..
Am Pin kann ich die Spannung von 0-5V messen, will das ganze am 
LCD-Display anzeigen, doch der Wert bleibt ständig auf 0.

Ich kopiere hier mal den Code rein:


#define F_CPU 16000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include "converter.h"
#include "lcd.h"

#define Adc_0 PF0

uint8_t adc0_value=0;

int main(void)

{
  spi_init();
  lcd_init();

  DDRF|=~(1<<PF0); // ADC0 als Eingang definieren

//***************************************INIT_ADC*********************** 
************************************************************************ 
***************************

  ADMUX  |=(1<<REFS0);    // Voltage Reference: AVCC
  ADCSRA |= (1<<ADEN);    // set enable bit, ADC on
  ADCSRA |= (1<<ADIE);    // ADC interrupt enable
  ADCSRA |= (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);   //Prescaler -> Division 
Factor 128
  ADMUX  |= (1<<ADLAR);    // 10-bit to 8-bit resolution

  //ADMUX  |=(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3)|(0<<MUX4); // set 
channel ADC0


   while(1)
    {
    ADCSRA |=(1<<ADSC);      // ADC start conversion
    dac2_write(1000);
    lcd_writestring("abcde",1,1);
    lcd_writebyte(adc0_value,7,1);

    lcd_writenumber( adc0_value,3,1,2);
    }
}



 ISR (ADC_vect)
 {
   adc0_value =ADCH;

 }

von Anfängerin (Gast)


Lesenswert?

Fehler schon gefunden, hab die Globalen Interrupts nicht aktiviert...

von Bernd (Gast)


Lesenswert?

Es sollte
1
volatile uint8_t adc0_value=0;
heißen, da sich der Wert von adc0_value für das Programm durch den 
Interrupt unvorhersehbar ändern kann.
Siehe auch:
http://www.mikrocontroller.net/articles/Interrupt#Volatile_Variablen

von Anfängerin (Gast)


Lesenswert?

Dankeschön

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.