mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC ausgang problem


Autor: Shaik Piebe (shaik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo alle,
Ich arbeitet mit AT89C51CC01.
Ich habe ein ADC-Programm geschrieben wie folgt.

#include <stdio.h>
#include "reg_c51.h"
  // Standard-Konvertierung
 // Die Variable "Kanal" den Kanal enthält, zu konvertieren
 // Die Variable "value_converted" ist ein unsigned int
#define Kanal P1_7 // ADC-Eingang
#define Value_converted P0 // ADC-Ausgang

void main ()
(
        ADCF = 0x80; // configure-Kanal P1.7 für ADC
        ADCON = 0x20; // Aktivieren des ADC

        ADCON & = 0xF8; // Lösche das Feld SCH [2.00]

        ADCON | = Kanal; // Select-Kanal

        ADCON | = 0x08; // Konvertierung starten im Standard-Modus

        // Warten Flagge End of Conversion
        while ((ADCON & 0x01)! = 0x01)
        (
         ADCON & = 0xEF;
         value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert
        )
        while (1)
        ()
)

In diesem Programm meinen Analogen Eingangs-Pin ist p1_7 und Ausgang 
Port  ist P0.
Ich kann geben die Analog signal beim P1_7 pin aber keine Ausgang kommt 
von P0-Port gegeben.

Weiß ich nicht, warum?

Ich habe richtig geschreiben

value_converted = (ADDH <<2) + (ADDL);
#define Value_converted P0 // ADC ausgang

Warum dann dieses Programm nicht die Ausgang geben?

Bitte überprüfen Sie dieses Programm.
Empfehlen Sie mir für dieses Problem.

Vielen Dank im Voraus.

Autor: X- Rocka (x-rocka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil ein ADC einen analogen Eingang hat, aber einen digitalen Ausgang.
um einen digitalen Wert in einen analogen umzusetzen benötigst du einen 
DAC.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while ((ADCON & 0x01)! = 0x01)
(
  ADCON & = 0xEF;
  value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert
)

ich habe etwas mühe den syntax zu verstehen, aber ggf. macht das mehr 
sinn:

while ((ADCON & 0x01) != 0x01);
ADCON &= 0xEF; // was macht diese zeile?
value_converted = (ADDH << 2) + ADDL; // Lesen Sie den Wert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Look again
        // Warten Flagge End of Conversion
        while ((ADCON & 0x01)! = 0x01)
        (
         ADCON & = 0xEF;
         value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert
        )

Aha.

  while the ADC is not ready with its value, you do:
      turn off the ADC
      read the value

You want to read the value from the ADC when the ADC has finished its 
work. So you have to wait until it is finished!

You want
        // Warten Flagge End of Conversion
        while ((ADCON & 0x01)! = 0x01)
          ;   // do nothing

        // now the value is ready, get it ...
        value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert

        // ... and turn of the ADC
        ADCON & = 0xEF;

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch was: wenn "(ADDH << 2) + ADDL" grösser als '1' ist, wird der 
ausgangspin auf high sein; und wenn "(ADDH << 2) + ADDL" '0' ist, wird 
der ausgangspin auf low sein.

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.