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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.