aide nécessaire dans AT89C4051

V

vinash

Guest
Salut,
Je suis un nouveau venu dans le domaine des microcontrôleurs et réalisent des projets simples pour se familiariser avec les microcontrôleurs.Actuellement, je suis de s'engager dans l'aide de la AT89C4051 comme un ADC.Je suis effectivement essayer d'utiliser l'application notes fournies par le site Web suivant:
h ** p: / / www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF
Il serait très utile si quelqu'un pour m'aider avec le code (C-programme) pour l'application.J'ai essayé quelques fois, mais ont échoué.Votre aide serait appréciée greaatly.
J'ai fait l'conections pour la conversion ADC et a relié la tension positive du signal à la broche 1.1.et j'ai écrit un programme simple de même, qui serait capable de lire la tension de sortie sur les LED.
Le programme est comme suit:

# Include <AT89x051.h>

char a [10] = (0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93); / * La numérotation de 0 à 9 * /void main (void)

(Int j, adc_data;
while (1) (

P1_1 = adc_data;
P1 = a [adc_data 10%];
for (j = 0; j <30000; j );

)
)Je fais toujours obtenir un zéro sur mon écran LED, peu importe la façon dont j'ai changé la tension d'entrée, quelqu'un pourrait s'il vous plaît help.I suis aux prises avec ce pour quelques jours.Je vous remercie

 
Je me demande quelles sont les données stockées dans votre adc_data et aussi le schéma que vous utilisez.
Si vous utilisez l'ensemble P1 (8 broches) pour contrôler les LED, où vous avez l'adc_data?
Aussi, quel est le sens de P1_1 = adc_data?

 
J'ai branché la résistance 8.2K au sol directement au lieu de le brancher sur le condensateur de 30pF, comme illustré dans le schéma schmetic (sur le site donné).J'ai fait cela pour que chaque fois que l'appareil est sous tension, il serait directement la lumière de la LED plutôt que de besoin pour basculer si j'avais branché conformément au schmetic donné.

P1_1 = adc_data,
Qu'est-ce que j'essaie de faire est d'affecter les bits de données 8 a reçu de la tension d'alimentation (de la broche 1,1) à l'adresse adc_data.

P1 = [adc_data 10%];
J'essaie de transmettre les données qui sont stockées dans adc_data l'adresse à l'connexions LED.

C'est tout ce que je suis en train de do.I espérons que vous seriez en mesure de résoudre mon problème.Merci.

 
vinash a écrit:

...

P1_1 = adc_data,

Qu'est-ce que j'essaie de faire est d'affecter les données 8 bits reçues de la tension d'alimentation (de la broche 1,1) à l'adresse adc_data.P1 = [adc_data 10%];

J'essaie de transmettre les données qui sont stockées dans adc_data l'adresse à l'connexions LED.

...
 
Salut,
Merci pour l'aide, en fait je suis assez confus sur la façon de lire une entrée (par exemple la façon de lire la tension d'entrée de P1.1) J'ai lu dans la fiche technique et elles ont déclaré que, pour utiliser un port en entrée , il suffit d'écrire 1s à eux.Ce serait génial si vous êtes en mesure de m'aider dans this.I ne suis pas sûr de savoir comment saisir les données qui sont obtenus à partir de P1.1.

 
Pour faire un port à port d'entrée, 1s écrire sur le port.Vous pouvez également définir une épingle à être élevée afin de faire la broche à broche d'entrée.J'ai fait cela bien AT89C51.

Quoi qu'il en soit, j'ai une question, si le port 1 est utilisé comme port de sortie, et je tiens à envoyer tous les 1 à 8 LED utilisant les ports 1, le contrôleur peut le faire?Ou il fera le Port 1 comme port d'entrée?J'utilise AT89C51.

 
Salut Lekka,
Si thats le cas, pour ainsi dire, je donne une commande comme
P1 = 0x03, ce que cela signifie que je suis automatiquement à l'aide P1.0 et P1.1 en amont et le reste des broches en sortie?

 
Je ne suis pas sûr de savoir comment le programmer en C. Je suis en utilisant un langage d'assemblage et assembleur Asem51.

Pour rendre le Port 1 comme port d'entrée, le code est
MOV P1, # FFH

Pour faire un axe unique (par exemple Pin 1.1), broche d'entrée, le code est
SETB P1.1

L'idée est, vous définissez le port particulier ou une broche haute, le port ou le code PIN sera le port d'entrée ou de broche d'entrée.Sans cela, vous ne pouvez pas recevoir des données qui les utilisent.

 
Je ne sais pas vraiment comment cela fonctionne comme un schéma ADC, je ne peux pas vous répondre de recevoir les données.
Pour l'entrée, vous devriez être vinash droite.Vous pouvez juste essayer dans votre circuit.
Comme vous avez dit que vous ne pouvez pas afficher en DEL, je me demande ce que vous avez écrit le code pour contrôler votre DEL.Avez-vous l'esprit qu'il annonce pour nous?

 
Tofinkh HI,
Le programme que j'avais écrit ci-dessous:

J'ai aussi téléchargé le fichier, s'il vous plaît jeter un oeil et s'il vous plaît laissez-moi savoir si vous trouvez une erreur, Merci beaucoup, j'apprécie beaucoup votre aide

# Include <AT89x051.h>

char a [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
b char [10] = (0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F);
délai void (int count);
void main (void)

(
unsigned char adc_data;

P1 = 0x03; / / paramètre P1.0 et P1.1 en amont et le reste de la P1 en sortie
while (1) (
P1_1 = adc_data; / / lire les données (de la tension d'entrée) de P1.1 et le stocker dans adc_data
retard (5);
= P1 &0x03; P1 / / P1 à nouveau de sorte que P1.0 et P1.1 sont les intrants et les autres ports de sortie P1 SRE
P1 = a [adc_data 10%]; / / trouver le reste des données obtenues par exemple si elle est 0x15, le reste est 1 donc P1 & 0x03 = 1
/ / Et une [1] = 1 et 1 serait donc affichée
retard (5);
)
)délai void (int nombre)
(
int j;
for (j = 0; compteur <j; j ) (
continuer;
)
)

 
Salut,

tu ferais mieux de vérifier comment l'ADC fonctionne dans votre premier document.Si vous voulez mettre la valeur de P1.1 et le stocker dans adc_data, il convient de
adc_data = P1_1;

pour conduire le segment 7 LED, vous devez activer le voyant avant d'envoyer la valeur, la P1.2 et P1.3 dans le schéma, activez l'une LED à la fois.S'il vous plaît jeter un oeil sur son datasheet aussi.

 
Salut, j'ai eu modification du code, et le nouveau code est comme suit: et comme vous l'aviez mentionné au sujet de P1.2 et P1.3 avoir été mis bas chaque fois que le conduit d'intérêt est utilisé.Je l'avais fait et actuellement je suis juste en utilisant l'une conduit à l'essai et pour que je gardais toujours faible et P1.3 P1.2 toujours élevé de sorte qu'un seul conduit est utilisé.Mais j'ai encore n'obtiennent pas de chiffres sur la LED.espérons que vous serez en mesure de vous aider.Merci.

# Include <AT89x051.h>

char a [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
b char [10] = (0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F);
délai void (int count);
void main (void)

(
unsigned char adc_data, z;

P1 = 0x03; / / paramètre P1.0 et P1.1 en amont et le reste de la P1 en sortie
while (1) (
P3_7 = 0;
= P1 &0x03; P1 / / P1 à nouveau de sorte que P1.0 et P1.1 sont les intrants et les autres ports de sortie P1 SRE
adc_data = P1_1; / / lire les données (de la tension d'entrée) de P1.1 et le stocker dans adc_data
z = P1 &0x03;
z = a [adc_data 10%];
retard (5);
= P1 P1 &0x03;
P1 = a [adc_data]; / / trouver le reste des données obtenues par exemple si elle est 0x15, le reste est 1 donc P1 & 0x03 = 1
/ / Et une [1] = 1 et 1 serait donc affichée
retard (5);

)
)délai void (int nombre)
(
int j;
for (j = 0; compteur <j; j ) (
continuer;
)
)

 
vinash, comme AT89C4051 n'a pas un "vrai" ADC, le Connecteur Active Directory dans votre note d'application est faite par un comparateur et une RC circuit simple.Vous devez lire le document avant que vous voulez obtenir la valeur analogique.Il ne devrait pas être fait en tapant simplement adc_data = P1_1.
S'il vous plaît vérifier attentivement sur votre demande première note.HTH

 
Tofinhk Salut,
Je vous remercie pour votre bonté aadvice, aurait tenté de faire quelque chose.Mais de toute façon, pour vraiment apprécier l'aide que vous a rendu

 

Welcome to EDABoard.com

Sponsor

Back
Top