Forum: Mikrocontroller und Digitale Elektronik AD-Wandlung mit Atmel T89C51CC02


von Fabian K. (fireman)


Lesenswert?

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

von Fabian K. (fireman)


Lesenswert?

Hat keiner ´ne Idee ??

von Jens (Gast)


Lesenswert?

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;
}

von fireman (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.