Gast
#437804
Hallo, ich es kann mir jemand helfen. Ich würde gerne bei meine ATmega8535 den Analogeingang verwenden. Ich hab einen WiederstandsSchalter, welcher auf PA0 die Spannungen 3,7, 2,5 , 1,2 und 0 V gibt. Leider kann ich diese Spannungen mit eigesteckten AVR nicht messen. Ich messe ständig 5V. Hat vieleicht jemand ein Beispielprogramm, oder funktion, welche den AD Wandler acktiviert, ausliest, und mir eine Variable zurückgibt, die sagt in welcher stellung der Schalter steht.Ach ja , die schalterstellung 0 V verursacht bei eingestecken AVR einen Kurzschluss, warscheinlich mache ich schon bei der Portzuweisung was falsch. Hier mein Progrtamm auszug. #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/delay.h> #ifndef F_CPU #define F_CPU 4000000UL #endif int Port_a; int Port_c; int Port_d; int temp; int x;/*x = Wartezeit in ms*/ int y; int m; int s; int zeit; int blasen; int blas_zeit; int result; // Beginn Hauptprogramm int main(void) { blasen = 0; m = 0; //Parameter: zeit = 10; // Überwachungszeit in Minuten blas_zeit = 1;//nach dieser Zeit wird gereinigt. In Minuten /*Analogwandler einstellen.*/ ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0);//ADC acktivieren Frequnzteiler setzen ADMUX &= ~(1<<MUX0); //AD Kanal an PA0 ADMUX &= ~(1<<MUX1); //AD Kanal an PA0 ADMUX &= ~(1<<MUX2); //AD Kanal an PA0 ADMUX &= ~(1<<MUX3); //AD Kanal an PA0 ADMUX &= ~(1<<MUX4); //AD Kanal an PA0 ADCSRA |= (1<<ADSC); while(!(ADCSRA & (1<<ADIF))); ADCSRA = (1<<ADIF); for(i=0;i<4;i++) { ADCSRA |= (1<<ADSC); while(!(ADCSRA & (1<<ADIF))); result += ADCW; ADCSRA = (1<<ADIF); result /= 4; } if (result == 0) { for (;;) { set_Portc(PC1);//Lampe ein wait(2000); reset_Portc(PC1);//Lampe aus wait(2000); } } } Bin für jede Hilfe Dankbar. Gruß Micha