Hallo zusammen,
ich habe in den letzten Tagen mein erstes C-Porgramm zur ADC-Auswertung
geschrieben. Ich möchte über ein 10k Poti, Spannung am OC0 messen.
Ausgeben möchte ich den jeweiligen Wert über eine LED-Leiste über inkl.
10 LED's.
Die Led's sind an PA0-PA7 und PA0-PA1.
Mein AtMega32 läuft über den internen Quarz mit 1MHz. Sonst habe ich nur
den üblichen Grundaufbau am Mikrocontroller. Hardware sollte richtig
verdrahten sein, da sich die LED's über ein anderes Programm ansprechen
lassen. Weiter kann ich mit einem Multimeter einen veränderlichen
Widerstand am Poti messen.
Es kann also nur noch an meinem Programm liegen, bzw. die Konfiguration
dazu. Als Ref-Spannung nutze ich die 5V am AVCC.
Hier ist mein Programm:
1
#include<avr/io.h>
2
#include<inttypes.h>
3
4
5
volatileuint16_tvoltage;//Variable für Spannung an ADC 0-5V 5/1024 0,0048V pro Bit -> 4,8mV pro Bit, umgerechnet in Prozent
ich kenne ja deine Fehlermeldung nicht, aber schreibt doch mal die
Funktionen in der Reihenfolge, in der sie benutzt werden:
ADC_Init und display_voltage sollten vor die main()-routine.
Außerdem rufst du ADC_Init gar nicht auf.
rava schrieb:> Außerdem rufst du ADC_Init gar nicht auf.
Erstens das und zweitens wird es auch eine gute Idee sein, die
Ausgangspins an denen die LED hängen auch auf Ausgang zu schalten.
Hi,
ADC = Analog Digital Converter
Die Kanäle sind von ADC0 bis ADC7 (PA0 bis PA7).
Was Du mit dem Poti am OC0 (PB3) = Output Compare oder AIN0 (gehört zum
AC = Analog COMPARATOR) machst, ist dem ADC ziemlich egal.
Du kannst den AC zwar für eine AD-Wandlung missbrauchen, aber dann wohl
kaum mit Deiner ADC_Read...
Gruß N2
Karl Heinz schrieb:> rava schrieb:>>> Außerdem rufst du ADC_Init gar nicht auf.>> Erstens das und zweitens wird es auch eine gute Idee sein, die> Ausgangspins an denen die LED hängen auch auf Ausgang zu schalten.
Heck.
rava schrieb:> das finde ich, sieht noch fast okay aus.
Aber nur fast. Die Leds liegen an PortA und der Adc auch. Krasses
Multiplexing, sozusagen.
mfg.
Hallo zusammen,
danke für all die Hinweise.
Es klappt nun. Hab die Hardware geändert, Programm neu strukturiert
sowie ADC_init() rein gepackt.
Läuft bestens. :) Danke
Gruß Thomas