Besoin d'aide dans l'utilisation AT89C4051 comme un ADC

V

vinash

Guest
Salut,
J'utilise AT89C4051 à l'utiliser comme un convertisseur AD pour une application comme un chiffre Voltmètre deux.Je suis la conception de circuits donnée à l'adresse suivante:
h ** p: / / www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF.
J'ai écrit un code en C et il ne fonctionne pas.Il serait très utile si quelqu'un pour m'aider s'il ya des erreurs dans mon code.Mon code est:

# Include <AT89x051.h>
# Define TON 79;
# Define TOFF 79;

ta unsigned int, la tuberculose;
char a [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
b char [10] = (0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5b, 0x6B, 0x7B, 0x8B, 0x9B);
scanled ();

void main (void)
(
int TD, TC, m;
tc = TON;
td = TOFF

while (1) (

P3_7 = 1;
pour (m = 0; m tc <; m ) (
if (P3 ^ 6 == 0)
TA ;)P3_7 = 0;
pour (m = 0; m tb <; m ) (
if (P3 ^ 6 == 1)
tb ;
)

scanled ();

)

)

scanled () (
unsigned int i, du drapeau, j;if (tb == 0) (

for (i = 0; i <2; i ) (
flag = 1-pavillon;
if (flag == 1) (
= A [(TA) / 10] P1;
for (j = 0; j <32000; j );
P1 = 0xFF;
)

if (flag == 0) (
P1 = b [(TA) de 10%];
for (j = 0; j <32000; j );
P1 = 0xFF;
))

)

else if (TA == 0) (
for (i = 0; i <2; i ) (
flag = 1-pavillon;
if (flag == 1) (
= A [(tb) / 10] P1;
for (j = 0; j <32000; j );
P1 = 0xFF;
)

if (flag == 0) (
P1 = b [(CT) de 10%];
for (j = 0; j <32000; j );
P1 = 0xFF;
))

)
)

J'espère vraiment que quelqu'un serait en mesure de m'aider comme je l'ai été désespérément faire cela pour les dernières semaines, sans aucun rendement.Merci beaucoup

 
Salut,
Je ne suis pas l'aide d'un AD converter.I externes j'essaie d'utiliser le comparateur analogique dans AT89C4051

 
Salut,

Vous avez écrit:

P3_7 = 0;
;m ){

pour (m = 0; m tb

<; m ) (
if (P3 ^ 6 == 1)
tb ;

Si ce n'est pas une erreur machine à écrire, à la tuberculose "a écrit dans la couleur rouge ne doit pas être" TD "?.

Avez-vous lu attentivement la doc?

Il est clairement indiqué que avant de faire n'importe quel écran, la valeur doit être ajustée selon un tableau de conversion.
Je ne vois pas cela dans votre code.
Il est vrai que vous avez utilisé deux tableaux soit pour charger ou décharger des parties du cycle de mesure (TA ou TB).
Mais il est inutile tant que le chargement et le déchargement du condensateur, ce n'est pas linéaire.

Etes-vous sûr que:

1.lorsque vous compilez le code, la valeur de XTAL est de 12 Mhz?Tout simplement parce que tous les retards sont importants dus à cette hypothèse.
Je veux dire la valeur de Ton 79 est défini comme le nombre minimal d'échantillons qui doivent être prises pour garantir que la tension sur le condensateur a atteint Vcc / 2.
Plus, le temps de conversion maximale est de 7 ms (intervalle d'échantillonnage = 5US) au choix des valeurs de résistance = 267 kilohms selon; condensateur = 2 nanofarads; Vcc = 5,00 volts.

2.Je ne vois pas dans votre code NOP supplémentaires mentionnées dans le code original utilisé pour retarder la première
échantillon dans la charge et de décharge des parties du cycle de mesure et, par conséquent un effet sur la précision Mesure (pourquoi faire pire que c'est avec ce genre de mesure)

3.Quand vous entrez dans scanled () de routine, vous êtes sûr que la valeur de "flag" est soit 0 ou 1?Qu'arriverait-il si a une valeur aléatoire si "flag = 1-drapeau;"

 
Salut,
Merci de remarquer l'erreur de la tuberculose.

Quant à la table de recherche, je ne suis pas en utilisant la table de recherche.Je veux juste connaître le nombre de chefs d'accusation.D'après le nombre de chiffres, je pourrais citer la table de recherche manuellement et obtenir la tension de sortie.

Merci pour votre suggestion sur l'intervalle 7ms, j'ai oublié d'inclure ça.

Merci pour vos suggestions ....

 
il est donné sur www.atmel.com et www.epanorama.net de recherche aussi

 
Silvio HI,
J'ai fait les changements que vous aviez dit, mais je ne suis toujours pas capable de le faire fonctionner ... Pls aider à faire ... Mon code corrigé est ci-dessous pour votre référence.

# Include <AT89x051.h>
# Define TON 79;
# Define TOFF 79;

ta unsigned int, la tuberculose;
délai void (int count);
char a [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
b char [10] = (0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5b, 0x6B, 0x7B, 0x8B, 0x9B);
scanled ();

void main (void)
(
int TD, TC, m;
tc = TON;
td = TOFF

while (1) (

P3_7 = 1;
pour (m = 0; m tc <; m ) (
if (P3 & 0x40 == 0)
TA ;
)
retard (3);

P3_7 = 0;
pour (m = 0; m <td; m ) (
if (P3 & 0x40 == 1)
tb ;
)
tb tb = TD;
retard (3);

scanled ();

)

)

scanled () (
unsigned int i, flag = 0, j;
statique k unsigned int, h;
k = TA;
h = tb;

if (tb == 0) (

for (i = 0; i <2; i ) (
flag = 1-pavillon;
if (flag == 1) (
= A [(k) / 10] P1;
for (j = 0; j <32000; j );
P1 = 0xFF;
)

if (flag == 0) (
P1 = b [(k)% 10];
for (j = 0; j <32000; j );
P1 = 0xFF;
))

)

else if (TA == 0) (
for (i = 0; i <2; i ) (
flag = 1-pavillon;
if (flag == 1) (
P1 = a [(h) / 10];
for (j = 0; j <32000; j );
P1 = 0xFF;
)

if (flag == 0) (
P1 = b [(h)% 10];
for (j = 0; j <32000; j );
P1 = 0xFF;
))

)
)

délai void (int nombre)
(
int j, l;
for (j = 0; j <count =; j )
(
pour (l = 0; <= 120 L, L );
)
)

Vraiment vous remercions de votre aide.Merci.

 

Welcome to EDABoard.com

Sponsor

Back
Top