ADC-Programm

OP #3416552
Lesenswert?

Hallo zusammen.

Leider macht mein ADC-Programm mit meinem ATMEGA16 nicht das, was es tun 
soll. Ich sitz jetzt schon seit einigen Stunden davor und finde den 
Fehler nicht.

Funktion sollte diese sein:
Ich lese am PortA PinPA0 (ADC0) eine Spannung ein die sich variabel 
zwischen 0 und 5 Volt befindet.
Dieser wert soll dann digitalisiert werden und im Binärcode am PortB 
wieder ausgegeben werden.
Also wenn 5Volt am Eingang anliegen sollen alle 8 Pins des PortB ein 
High liefern, bei 0Volt sollen alle 8 ein Low liefern.

Das ganze soll als endlos schleife fungieren.

Ich hab jetzt schon viel hin und her probiert, aber entweder sind alle 
Ausgänge auf 0 oder alle auf 1, auch wenn ich z. B. 2,23 Volt einspeise.

Findet jemand meine Fehler?
Angehängte Dateien:
OP #3416583
Lesenswert?

Ja, der AVCC ist angeschlossen.
Ich hatte gerade einen kleinen Teilerfolg. Die Masse hatte nen 
Wackelkontakt.
Jetzt sieht es so aus:
Bei 0Volt am Eingang leuchten ALLE LED´s konstant ohne zu flackern (hier 
sollten eigentlich alle aus sein). Drehe ich die Spannung hoch auf 5 
Volt gehen die LED´s binär nacheinander aus anstatt an und die LED´s am 
Pin 0-4 flackern.

Ich hoffe ich konnte das einigermaßen verständlich rüber bringen.
#3416586
Lesenswert?

Wolfgang schrieb:
> Chris Neusi schrieb:
>> Findet jemand meine Fehler?
>
> Vielleicht wird deine Warteschleife wegoptimiert, weil da nix drin
> steht.
Quatsch.

Steffen schrieb:
> 8 - 16bit Wert... Du gibst eine 16bit Wert am Ausgang aus.
Das geht natürlich schief.

Setz das ADLAR-Bit und gebe ADCH auf deinem Port aus.
1
return ADCH;                    // ADC auslesen und zurückgeben

mfg.

PS
Poste deinen Code als c-Datei, nicht als txt.
Gast #3416588
Lesenswert?

Jetzt invertierst Du noch die Daten, ehe Du sie an den Port ausgibst und 
dann sollte es schon so etwa gut sein.
Poste mal den Code wie er nach dieser letzten Änderung ist. Und bitte 
als C-Datei, nicht als Text.
Gast #3416672
Lesenswert?

Hi

>Jetzt läuft es so wie es laufen soll.

>ADMUX |= (ADMUX & ~0x7F) | (channel & 0x7F);

Der ATMega16 hat 5 MUX-Bits. Also sollte die Maske 0x1F und nicht 0x7F 
sein.

>ADMUX |= (ADMUX & ~0x7F)

löscht auch das REFS0- und das ADLAR-Bit.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren