Hallo, ich bin auf dem Gebiet der µC-Programmierung noch ein Neuling und versuche mich gerade an einem XMEGA32A4U. Einige grundlegende Sachen habe ich bereits erfolgreich zum Laufen gebracht. Jetzt habe ich allerdings meine Probleme bei der Nutzung des ADCs. Im ersten Schritt möchte ich einfach nur in Abhängigkeit eines eingelesenen ADC-Wertes einen Ausgangs-Pin auf High setzen. Prinzipiell funktioniert das auch, allerdings schwankt die Zeit zwischen angelegtem Eingangssignal (ADC) und setzen des Ausgangspin ziemlich stark. Ich teste das ganze auf einer selbst gebastelten Testplatine mit folgender Konfiguration: - Signalgenerator an PORTA (0V ... 1V Rechtecksignal 5kHz) - Ausgangspin an PORTE - beide Pins werden über Oszi angeschaut - interne Spannungsreferenz - Abfrage im µC: Eingang > 0,5V >>> dann PORTE auf High Wenn ich jetzt das Rechtecksignal anlege und mit dem Oszi darauf triggere, dann ist das Ausgangssignal stark "verschmiert". D.h. manchmal wird der Ausgang bereits nach 2,5µs gesetzt und manchmal erst nach 4µs usw. Wenn ich ein Eingangssignal mit kleinerem Anstieg habe (Dreiecksignal), dann wird dieser Zeitbereich noch größer. Ich habe überhaupt keine Idee woran das liegt. Zum besseren Verständnis hier noch einmal mein aktueller Quellcode: #include <avr/io.h> #include <avr/interrupt.h> volatile int ADC_Value = 0x00; int main(void) { Clock_init(); Int_init(); ADC_init(); PORTE.DIR = 0xFF; while(1) { } } void Clock_init(void) { OSC.CTRL=0x02; while(!(OSC.STATUS & OSC_RC32MEN_bm)); // Warten bis der Oszillator bereit ist CCP = CCP_IOREG_gc; CLK.CTRL=0x01; } void Int_init(void) { PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; sei(); } void ADC_init(void) { PORTA.DIR =0x00; ADCA.CTRLA =0x01; ADCA.CTRLB = 0b00011000; ADCA.REFCTRL = 0b00000000; ADCA.PRESCALER = 0x00; ADCA.CH0.MUXCTRL = 0b00001000; ADCA.CH0.CTRL =0x01; ADCA.CH0.INTCTRL = ADC_CH_INTLVL_LO_gc; } ISR (ADCA_CH0_vect){ ADC_Value = ADCA.CH0.RES; if (ADC_Value >= 1000) { PORTE.OUT = 0x01; } else { PORTE.OUT = 0x00; } } Danke für eure Hilfe
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.