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.