Hallo Ich habe zu folgendem Problem nichts finden können : Ich möchte an einem ATMEGA8 den ADC0 und den ADC1 nacheinander abfragen. Einer ist kein Problem.( btw : Ich habe erst vor kurzem mit C und Mikrocontrollern angefangen... ). Ich hab mir gedacht, nach der ersten Messung einfach das ADMUX Register entsprechend zu ändern, dann die zweite Messung durchzuführen und dann wieder zurückzuschalten. Geht aber leider nicht. Wie macht man´s richtig ? Im Tutorial ist nur beschrieben wie man ADC generell verwendet.
Poste Deinen Code, wie schaltest Du den ADMUX um? Löscht Du z.B. das Bit 0 für das ADMUX-Register? Das Bit ist gesetzt, wenn Du Kanal 1 mißt. Bei mir geht das Umschalten bisher einwandfrei.....
>Ich hab mir gedacht, nach der ersten Messung einfach >das ADMUX Register entsprechend zu ändern, dann die zweite Messung >durchzuführen und dann wieder zurückzuschalten. Das ist die übliche Vorgehensweise. >Geht aber leider nicht. WAS geht nicht? Falsche Werte? uC stürzt ab, bleibt hängen? Die Schaltung fängt an zu rauchen?
ADMUX|=(1<<MUX0); //Auf ADC1 umschalten ADCSRA|=(1<<ADSC); //Messungs starten while(ADCSRA & (1<<ADSC)){;} //Messung abwarten variable=ADCW; //Wert übernehen ADMUX&=~(1<<MUX0); //Auf ADC0 zurückschalten Geht nicht bedeutet: sobald ich den Codeschnipsel mir reinnehme, ist das Ergebnis des ADCO falsch.( War vorher richtig ) Es zeigt dann 0 an. An ADC1 sollte es 0 anzeigen..
Hier der gesamte Code. Im oberen Teil ( kurz nach der while Schleife ) wird ein Dreh-Encoder abgefragt. Danach die LCD Anzeige. Dann die Analogen Sachen. Für ADC0 siehe Schaltplan. An ADC4 und ADC5 sollen Schaterstellungen abgefragt werden. Bitte keine Kommentare zum Programmierstil. Ich mach das erst seit Juni. Ich möchte damit die Fenster eines kleines Gewächshauses steuern.
Ah ! Ich glaube ich hab den Fehler. Muß ich gleich noch testen. Es heißt ADMUX&=~(1<<MUX0)|(1<<MUX1)|(1<<MUX2)|(1<<MUX3); wenn ich auf ADC0 zurückschalten möchte oder ? Ich vor jeder Klammer eine Tilde. ADMUX&=~(1<<MUX0)|~(1<<MUX1)|~(1<<MUX2)|~(1<<MUX3); Stimmt´s ?
Tobi P schrieb:
> Es heißt ADMUX&=~(1<<MUX0)|(1<<MUX1)|(1<<MUX2)|(1<<MUX3);
Nein. Noch mehr Klammern:
ADMUX&=~( (1<<MUX0)|(1<<MUX1)|(1<<MUX2)|(1<<MUX3) );
Blöder Fehler. Normalerweise setze ich nur einzelne Bits auf Null. Nicht
gleich vier auf einmal. Danke trotzdem. Wenn ihr nicht gesagt hättet,
das das eigentlich gehen müßte, hätte ich den Fehler nie gefunden...
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.