Gast
#2502182
Hallo, das Argument channel (function messung) wird nur übergeben, wenn ich die Compiler Optimierung auf -O0 schalte ... bei allen anderen Einstellungen wird mir immer nur 0 übergeben ... Das Ganze teste ich mit dem AVR Studio 5. Wenn ich das auf den uc übertrage, scheint es sich irgendwie anders zu verhalten ... hat hier jemand eine Idee? Gruß aus Salzgitter Markus 73 de Markus, do9mbs #define F_CPU 3686400 #include <avr/io.h> #include <util/delay.h> #include <string.h> #include <stdio.h> //#include "lcd_display.h" int messung(int channel){ /* Register ADMUX: Bit 7: REFS1 "Auswahl der Referenzspannung" Bit 6: REFS0 "Auswahl der Referenzspannung" Bit 5: ADLAR "Ausgabeformat" 0=Ausgabe rechtsbündig in ADCH/ADCL Bit 4: Bit 3: MUX3 "Kanalauswahl" Bit 2: MUX2 "Kanalauswahl" Bit 1: MUX1 "Kanalauswahl" Bit 0: MUX0 "Kanalauswahl" */ ADMUX = 0x40; //jetzt noch den richtigen Eingang setzen channel &= 0x0f; ADMUX |= channel; /* Register ADCSRA: Bit 7:ADEN "ADC Enable" :1 Bit 6:ADSC "ADC Start Conversion" :1 Bit 5:ADFR "ADC Free Running" :0 Bit 4:ADIF "ADC Interrupt Flag" :0 auf 1 warten Bit 3:ADIE "ADC Interrupt Enable" 0 Bit 2:ADPS2 "ADC Prescaler" :1 Bit 1:ADPS1 "ADC Prescaler" :0 Bit 0:ADPS0 "ADC Prescaler" :1 */ ADCSRA = 0xc5; /* Auf Ergebnis warten */ int readySignal=0; uint16_t result; do { readySignal=ADCSRA; readySignal &=0x10; } while (readySignal==0); /* Ergebnis in eine 16 Bit Zahl konvertieren */ //ADCL=0xEF; //ADCH=0x03; --> Ergebnis ist 1007 result = ADCL; result +=(ADCH<<8); return result; } int main(void) { messung(1); while(1) { //TODO:: Please write your application code } }