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;
}
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.