hallo. ich versuche mit meinem mega32, 2 adc messungen durchzuführen. eine einfache sieht etwa so aus: uint16_t adc_mess(void) { uint16_t messwert=0; ADMUX |= (0<<REFS1)|(1<<REFS0)|(0<<MUX0); ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0); for (uint8_t i=0; i<5; i++) { ADCSRA |= (1<<ADSC); while ( !(ADCSRA & (1<<ADIF)) ) ; messwert = (ADC)+messwert; } return messwert/5; } das beispiel funktioniert auch... warum aber funktioniert dieses code nicht.? uint16_t adc_mess_1(void) { uint16_t messwert_1=0; ADMUX &= ~(1<<MUX1); ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX0); ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC); for (uint8_t i=0; i<5; i++) { ADCSRA |= (1<<ADSC); while ( !(ADCSRA & (1<<ADIF)) ) ; messwert_1 = (ADC)+messwert_1; } return messwert_1/5; } uint16_t adc_mess_2(void) { uint16_t messwert_2=0; ADMUX &= ~(1<<MUX0); ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX1); ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC); for (uint8_t i=0; i<5; i++) { ADCSRA |= (1<<ADSC); while ( !(ADCSRA & (1<<ADIF)) ) ; messwert_2 = (ADC)+messwert_2; } return messwert_2/5; } ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ --- kompletter code ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ --- #define F_CPU 8000000UL //#define XTAL 8000000UL #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include "lcd-routines.h" uint16_t adc_mess_1(void) { uint16_t messwert_1=0; ADMUX &= ~(1<<MUX1); ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX0); ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC); for (uint8_t i=0; i<5; i++) { ADCSRA |= (1<<ADSC); while ( !(ADCSRA & (1<<ADIF)) ) ; messwert_1 = (ADC)+messwert_1; } return messwert_1/5; } uint16_t adc_mess_2(void) { uint16_t messwert_2=0; ADMUX &= ~(1<<MUX0); ADMUX |= (0<<REFS1)|(1<<REFS0)|(1<<MUX1); ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)|(1<<ADSC); for (uint8_t i=0; i<5; i++) { ADCSRA |= (1<<ADSC); while ( !(ADCSRA & (1<<ADIF)) ) ; messwert_2 = (ADC)+messwert_2; } return messwert_2/5; } int main(void) { DDRA = 0xff; uint16_t messung_1 = 0; uint16_t messung_2 = 0; char puffer_1[16]; //[16] char puffer_2[16]; //[16] lcd_init(); while(1) { messung_1 = adc_mess_1; messung_2 = adc_mess_2; itoa(messung_1 , puffer_1, 10); itoa(messung_2 , puffer_2, 10); lcd_setcursor(0,1); lcd_string(puffer_1); lcd_setcursor(0,2); lcd_string(puffer_2); } return 1; } ich hoffe es kann mir jmd. helfen. danke. mfg.: jo
Fehler beim Funktionsaufruf: while(1) { messung_1 = adc_mess_1; messung_2 = adc_mess_2; hier fehlen Klammern: while(1) { messung_1 = adc_mess_1(); messung_2 = adc_mess_2(); unn wech B.
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.