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?
Gast
#3416557
Chris Neusi schrieb: > Findet jemand meine Fehler? Vielleicht wird deine Warteschleife wegoptimiert, weil da nix drin steht.
1 | |
2 | |
3 | |
4 | |
Gast
#3416558
8 - 16bit Wert... Du gibst eine 16bit Wert am Ausgang aus.
Kleine Ergänzug noch: Wenn ich die Eingangsspannung weg nehme, fangen die an den Ausgängen angeschlossenen LED´S an zu flimmern und einige gehen sporadisch an und aus.
AVCC am uC angeschlossen? Zeig mal den Schaltplan her. Lg.
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.
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 | |
mfg. PS Poste deinen Code als c-Datei, nicht als txt.
Gast
#3416588
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
#3416591
Thomas Eckmann schrieb: > Wolfgang schrieb: > Steffen schrieb: >> 8 - 16bit Wert... Du gibst eine 16bit Wert am Ausgang aus. > Das geht natürlich schief. na das mein ich ja... er gibt einen 16bit Wert aus... das muss schief gehen
Super. Vielen Dank. Jetzt läuft es so wie es laufen soll. Die fertige .c liegt mit bei
Gast
#3416672
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.