AD-Wandlung mit AT89C51CC03

Gast #1357192
Lesenswert?

Hallo zusammen..!
Ich beschäftige mich seit einer gewissen Zeit mit Mikrocontrollern 
(AT89C51CC03).
Nun würde es mich interessieren, wie eine Analog/Digital-Wandlung 
funktioniert:
Mein Ziel ist es, einen Schrittmotor anzusteuern und dessen 
Geschwindigkeit mithilfe eines Potis bestimmen zu können.
Die Ansteuerung des Schrittmotors funktioniert bisher einwandfrei.

Hier mein C-Code:
1
#include<REG51CC03.h>
2
void zeit()
3
{
4
  unsigned int i;
5
  i = 10000;  
6
  for(i;i>0;i--)
7
  { }
8
}
9

10
void main()
11
{
12
  int Count[]={8,12,4,6,2,3,1,9};
13
  
14
  while(1)
15
  {
16
    unsigned int y = 0;
17
     for(y;y<7;y++)
18
    {
19
       P1 = Count[y];
20
      zeit();
21
    }
22
  }
23
}




Nur mit der AD-Wandlung klappt es nicht so ganz :-/
kann mir hier jemand helfen?

Ihr würdet mir sehr helfen..!
Vielen Dank, b8x..!
#1366178
Lesenswert?

b8x schrieb:
> Ich habe sämtliche Beispiele schon ausprobiert

Das ist eine Null Aussage, da keiner weiß, was Du probiert hast, weil 
keiner auf Deine Festplatte schauen kann.

Denke dochmal an die, die helfen wollen und gib mal Informationen.


Ich geh da immer ganz dumm vor.
Ich guck einfach ins Datenblatt, wie welche Bits wie zu setzen und zu 
testen sind und Du wirst es nicht glauben, aber es funktioniert.

Man muß den Muxer setzen und den Takt-Teiler und das Startbit und dann 
warten, bis das Fertigbit gesetzt ist.

Die 2,5V Referenz hast Du angeschlosen?


Peter
Gast #1366265
Lesenswert?

Sorry..aber nun mal genauer:

Ich habe die Beispiele auf dem Datenblatt schon versucht, jedoch ist das 
für mich noch ein bisschen unverständlich, da ich noch keine großen 
erfahrungen mit µC habe.

Zu der Referenzspannung:
Ich hab ein Experimentierboard in der Schule zusammengelötet, wo diese 
schon angeschlossen ist.

Ich weis bisjetzt, dass bestimmte Bits gesetzt sein müssen um eine 
Analog-Digital-Wandlung durchzuführen. Diese habe ich auch schon einmal 
in einem Test-Programm getan, nur hat es nicht funktioniert.

Nun daher meine Frage: Ist es möglich, dass jemand einen Beispielcode 
schreibt, anhand dessen ich diesen Vorgang der AD-Wandlung besser 
verstehe?

Vielen Dank, b8x!
Gast #1367032
Lesenswert?

1
#include<REG51CC03.h>
2

3
sbit busy = 0xDC;
4
sbit ADAT = 0xF5;
5
void main()
6
{
7
  ADCON = 0x08;
8
            
9
  ADDL = 0x00;    
10
  ADDH = 0x00;    
11
  while(1)
12
  {
13
     if(busy == 1)
14
    { }
15
    else
16
    {
17
      P2 = ADAT;
18
    }
19
  }
20
}

Erläuterung:
Mit
1
ADCON = 0x09
 lege ich P1.0 als Analogeingang (soviel ich weiß, kann nur P1 beim 
AT98C51CC03 als Analogeingang genutzt werden), eine Dauermessung und das 
Busyflag = 0 fest.

Mit
1
ADDL 0x00;
 und
1
ADDH = 0x00;
 lege ich eine Messung im Bereich von 0V - 5V fest.


Wenn ich nun dieses Programm auf meinen µC lade, leuchtet der Port 2 
dauerhaft, egal welche Spannung ich an P1.0 anlege.

Wo liegt der Fehler?

Danke, B8X!
Gast #1367089
Lesenswert?

http://www.atmel.com/dyn/resources/prod_documents/doc4182.pdf

Da findest Du das enstsprechende Datenblatt.

>> sbit busy = 0xDC;
>> sbit ADAT = 0xF5;

Hier geht es um BIT's nicht um Bytes... schau Dir mal die Bedeutung von 
sbit an... 8x51 Typen sind BITadressierbar.

ADDH sowie ADDL sind deine Ergebnisregister (10 BIT).

An dem Code stimmt so gut wie nichts, schau ins DB insbesondere nach:

ADCF
ADCLK
ADCON

sowie ADSST BIT, ADEOC BIT sowie

ADDH
ADDL
Gast #1368797
Lesenswert?

Hallo b8x,
anbei eine kleine Funktionssammlung für den at89C51cc03er, in der Du 
auch zwei Funktionen für den A/D-Wandler findest.
Ich hoffe, Du kennst Dich etwas mit C aus und weist, was Funktionen sind 
und wie diese verwendet werden.
Wenn nicht, einfach hier noch mal nachfragen.

Gruß

Carlos
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren