www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interner ADC des 80C535


Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja also ich hab ein paar Probleme mit dem internen ADC:
Ich programmiere das ganze mit Keil in C, und wenn ich dann probiere
ADCON = xxxxxxxx zu schreiben, meckert der Compiler dass er ADCON nicht
kennt... weis jemand wie ich den sonst beschreiben kann?

Und ein weiteres Problem ist, dass ich nicht weis, wie ich das busy
abfragen kann.... es ist ja im ADCON enthalten aber wie frage ich ein
einzelnes Bit eines Bytes ab??

Danke für Antworten

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

du musst den richtigen Header-File einbinden, wie der bei Keil
genau für den 80535 heisst kann ich dir nicht sagen. Schau mal
im Installtionsverzeichnis nach .h Dateien, eine davon wird für den
80535 sein.
Darin steht dann:

sfr  ADCON   = 0xD8;

Gruß Volker

Autor: karadur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

diese Routine benutze ich für eine Temperaturmessung mit einem KTY nach
+5V und einem 1k5 Widerstand nach GND:
messen()
{
/* Rt=1400+24*T    Uref=5V  Umess= Uref*(Rt/(1k5+Rt))  */
/* Rt(25)=2k  Bereich des AD-Wandlers auf 2,5V -3,125V entspr. ca. 5
-45 Grad C */
/* 0..255 /5.6212 -0,5 liefert Temp */
/* Fehler 15 - 45 Grad < 1 Grad */

  ADCON=0x07;     /* AD-Kanal 7 */
  DAPR=0xa8;      /* Bereich 2,5 V -3,125V */
  while((ADCON&0x10)!=0); /* Warten bis Wandlung fertig (15us ) */
  tempmwert1=(int)((float)ADDAT/5.6212-0.5);      /* Umrechnen */
  ADCON=0x06;     /* AD-Kanal 6 */
  DAPR=0xa8;      /* Bereich 2,5 V -3,125V */
  while((ADCON&0x10)!=0); /* Warten bis Wandlung fertig (15us ) */
  tempmwert2=(int)((float)ADDAT/5.6212-0.5);      /* Umrechnen */
  ADCON=0x05;     /* AD-Kanal 5 */
  DAPR=0xa8;      /* Bereich 2,5 V -3,125V */
  while((ADCON&0x10)!=0); /* Warten bis Wandlung fertig (15us ) */
  tempmwert3=(int)((float)ADDAT/5.6212-0.5);      /* Umrechnen */
}

Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm aber ich versteh den ausdruck while((ADCON&0x10)!=0)
funktioniert.... fragt das while in diesem Fall nur das eine Bit ab...
weil wenn er das gesamte ADCON!=0 abfragt is die Bedingung doch immer
erfüllt....

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@blawa

es wird zunächst eine Bitweise Und-verknüpung mit 0x10 gemacht.

0x10 ist binär 00010000

Das ADOCN Register ist so aufgebaut:

Bit7  Bit6  Bit5  Bit4  Bit3  Bit2  Bit1 Bit0

 ?     BD   CLK   BSY   ADM   MX2   MX1  MX0

 X     X     X     1     X     X     X    X     wenn AD nicht fertig
 0     0     0     1     0     0     0    0     und Verkn. mit 0x10
--------------------------------------------
 0     0     0     *     0     0     0    0

das * Bit im Ergebnis wird erst dann 0, wenn das BSY-Bit 0 wird, und
somit das gesamte Ergebnis.

while ((ADCON&0x10)!=0); prüft also solange bis das BSY-Bit 0 wird.


Anmerkung: Wenn du die richtige Header-Datei eingebunden hat kannst du
auch direkt das BSY bit prüfen.

while (BSY);



Volker

Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke hatte die &-Verknüpfung andres (falsch) im Kopf ^^

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.