Forum: Mikrocontroller und Digitale Elektronik AD-Wandlung mit AT89C51CC03


von b8x (Gast)


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..!

von Pieter (Gast)


Lesenswert?

...was klappert dann da nicht?
Meine Glaskugel ist zum TÜV.

mfg
Pietr

von b8x (Gast)


Lesenswert?

Ich habe sämtliche Beispiele schon ausprobiert, nur tut der Controller 
nicht das, was er tun soll :-/

von Peter D. (peda)


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

von b8x (Gast)


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!

von Bernd (Gast)


Lesenswert?

Besser ist es wenn Du deine Versuche mal hier hereinstellst. Wo soll da 
ein Lerneffekt sein wenn Du es nicht einmal versuchst.

von B8X (Gast)


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!

von Bernd (Gast)


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

von Carlos (Gast)


Angehängte Dateien:

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

von b8x (Gast)


Lesenswert?

Vielen Dank Carlos..!

Nun funktioniert es endlich und ich verstehe auch, warum..!

Danke für eure Hilfe..!

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.