www.mikrocontroller.net

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


Autor: Fabian Krahl (fireman)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian Krahl (fireman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner ´ne Idee ??

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: fireman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.