Hallo Leute, ich versuche mit dem Atmel T89C51CC02 eine 10-bit A/D-Wandlung hinzubekommen. Habe das Beispiel aus dem Atmel-Handbuch nachprogrammiert, und das ADCF-Register auf 01h gesetzt um Kanal 1 (P1.1) auszuwählen, leider fängt der Ärger schon damit an, das ich immernoch das High-Signal messen kann, das heißt der interne Pull-up ist immernoch aktiv! Was mache ich falsch, bzw. welches Register muss ich mit welchem Wert beschreiben, damit z.B. Kanal 1 und 2 (also P1.1 und P1.2) zur Wandlung genutzt werden können? Danke für die Antwort im Vorraus Fabian
Bei mir läuft diese Routine auf einem T89C51CC03 Gruß Jens /* Init AD-Converter */ void adc_init(void) { // configure all channel from P1 for ADC //ADCF = 0xFF; // configure channel 6 and 7 from P1 for ADC ADCF = 0xC0; // Enable the ADC ADCON = 0x20; } /* Read analog Value */ unsigned int adc_read(char channel) { unsigned int value_converted; // The variable "channel" contains the channel to convert // The variable "value_converted" is an unsigned int // 1 digit entspricht einer Spannung von 4,88mV (Vref = 5V) // Clear the field SCH[2:0] ADCON &= ~0x07; // Select channel ADCON |= channel; // Start conversion in standard mode ADCON |= 0x08; // Wait flag End of conversion while((ADCON & 0x10)!= 0x10); // Clear the End of conversion flag ADCON &= ~0x10; // read the value value_converted = (ADDH << 2)+(ADDL & 0x03); return value_converted; }
Danke für den Hinweis, habe meinen Quellcode für die A/D-Wandlung ähnlich gehabt, abgesehen von dem ADCF-Register (liegt wohl daran das ich einen anderen Controller benutzte), jedenfalls hatte ich den Code in eine Header-Datei ausgelagert und es lief nicht. Dann habe ich ein neues Programm geschrieben was quasi nur die Wandlung enthielt, das Programm lief! Daher habe ich dann den Code aus der Header-Datei direkt im main() ausgeführt und schon ging es. Also A/D-Wandlung + Auslagerung in Headerdatei -> schlecht nur A/D-Wandlung gut. Naja jedenfall läuft´s jetzt. CU Fireman
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.