Aide à l'interface AD0804 à AT89C4051

V

vinash

Guest
Salut,
J'essaie de l'interface AD0804 à microcontrôleur AT89C4051, y at-il schmetics ou tout site Web où je serais en mesure d'obtenir une référence> Je vous remercie.

 
Vinash Salut,

J'ai remarqué que vous avez du mal à obtenir des ADC avec AT89C4051.
D'abord avec comparateur par défaut et RC externe.
ftopic144871.html
Ensuite, vous avez essayé avec MCP3208 approprié pour 4051 en raison de quelques lignes de connexion en utilisant bang peu SPI depuis 4051 n'a pas SPI interface par défaut.
ftopic144860.html
Maintenant, vous essayez avec ADC0804 (une mémoire mappé périphériques avec beaucoup plus de lignes de raccordement de l'interface SPI).

Dans la fiche technique authentique, il s'agit d'un programme écrit en petits asssembler 8048 assembleur.Vous pouvez l'utiliser comme un guide pour un programme C.

Sinon, vous pouvez essayer cette conception: http://www.iguanalabs.com/adc2051.htm
Soyez conscient que, sur cette page, vous ne trouverez pas n'importe quel logiciel (que vous devez payer pour les CD), mais à mon avis sont assez de pistes pour construire vous-même.

 
HI,
J'ai interfacé avec AT89C4051 ad0804, et mon code source est comme suit:

/ / ADC0804 interface avec AT89C4051,
/ / Notion de pins sont les suivantes:# Include <AT89x051.h>sbit WRITE = ^ P3 0; / / définition du WR et INTR épingles
INTR sbit = ^ P3 1;

unsigned int de 10 [] = (0x40, 0x60, 0x44, 0x64, 0x50, 0x68, 0x4C, 0x6C, 0x50, 0x70);
scanled ();
retard (void);
advalue unsigned int, la valeur;
void main (void) (
P1 = 0xFF;
P3 = 0xFF;

while (1) (

WRITE = 0;
WRITE = 1;
while (INTR == 1);
advalue = P1;
= valeur advalue * 5 / 256;
scanled ();

)
)

scanled ()
(
P3 = [% la valeur d'un 10];

)Je reçois des lectures, mais il n'est pas en temps réel, whenver-je changer le inout tension, je dois passer de l'alimentation principale et le conduit devant le reflète la tension d'entrée, il serait très utile, si vous étiez pour m'aider sur la façon de le faire en temps réel, qui est, je n'ai pas changer de secteur hors service, et whenver-je modifier la tension d'entrée, elle reflète automatiquement dans le LED.J'espère que vous pourrez m'aider.Merci.

 
Si vous avez utilisé P3 ^ 0 ^ 1 et P3 en ligne de commande pourquoi l'intérieur scanled () avez-vous utilisé pour la conduite P3 LED?

Citation:scanled ()

(

P3 =% une valeur [10];

)

 
Salut,
J'utilise P3 à conduire LEDS parce que je suis en utilisant AT89C4051 et il n'a que 20 broches, donc je n'avez pas assez de broches.

Citation:

Je n'ai pas à comprendre pourquoi avez-vous multiplié par 5, puis divisé par 256 les résultats ADC?

Depuis P1 ne peut pas avoir une valeur supérieure à 255, que pensez-vous de la valeur de "valeur" variable avant d'être utilisées dans scanled () après "* advalue 5 / 256"?

Il est nécessaire après la coulée "* advalue 5 / 256" réalisée?
 
Comme je vous l'ai dit l'interface SPI (MCP3208 ADC), il est plus adapté à votre design.

Afin d'être aidé par d'autres membres, vous devez fournir plus de détails au sujet de votre conception.
Comment voulez-vous que quelqu'un va trouver comment avez-vous la LED sur la P3 port?
Utilisez-vous des 7 LEDs directement liée à P3 (évidente à travers des résistances de limitation de courant)?
Ou avez-vous utiliser un convertisseur BCD à 7 segments (qui ne nécessite que 4 lignes, plutôt que 7)?
Regardez les unsigned int de 10 [] = (0x40, 0x60, 0x44, 0x64, 0x50, 0x68, 0x4C, 0x6C, 0x50, 0x70);
D'abord pourquoi unsigned int et non pas unsigned char?Depuis sont pas déclarés comme constants, seront stockées dans la RAM, ce gaspillage d'espace pour les "int".
Si un élément du tableau sera envoyé à P3, puis en fonction de votre déclaration
P3 ^ 7 = 0
P3 ^ 6 = 1
P3 ^ 1 = 0
P3 ^ 0 = 0
sont constantes quel que soit l'élément 0, 1, 2, ... 9, ce qui vous gaspillerez de 4 lignes.
Cependant que vous n'avez pas le contrôle de P3 ^ 6, qui est lié à du matériel interne de sortie du comparateur.

Aucun retour du matériel.Vous ne pouvez pas utiliser P3 ^ 0 ^ 1 et P3 comme des lignes de commande (/ WR et / INTR) et l'affichage LED.
Gardez à l'esprit qu'une fois que la conversion a commencé, une autre augmentation d'impulsion à la ligne WR / (WRITE = 0; WRITE = 1;) va commencer une nouvelle conversion, même si la conversion précédente n'était pas fini.
Ainsi, si vous noué sur P3 ^ 0 à / WR et l'affichage LED, ainsi, vous devez être sûr que le signal ne s'allume pas overide la WR / signal.

La meilleure solution est d'utiliser P1 pour la lecture de deux ADC (entrée) et de l'écriture LED (sortie) (câblage parallèle entre eux dans le bus ").
Mais vous devez utiliser la RD signal / matériel qui est en fait liée à GND (Je parie que c'est ainsi, sinon vous ne parvenez pas à lire la conversion des données).
Évident que le / CS pourrait être liée à GND (comme actuellement) ou liée à P3 ainsi.
Au cours de la procédure d'affichage de la RD signal / doit être élevé et ne fait que peu de temps lors de la lecture des résultats de la conversion ADC quand / INTR passe au niveau bas.
Parce que le cycle de lecture est courte, vous ne pouvez même pas voir l'écran LED clignote (comme une question de fait les mêmes données lues à partir ADC sera remis immédiatement à l'affichage sur le même port).
Ainsi, vous pouvez définir P3 ci-dessous:
P3 = ^ 0 / CS
P3 = ^ 1 / WR
P3 ^ 2 = / INTR vous pouvez utiliser / fonctionnalité INT0 de 8051 plutôt que de vote pour COU (while (INTR == 1)

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Clin d'œil" border="0" />P3 ^ 4 = / RD

Assez drôle si vous définissez la ADC0804 s'exécute en mode continu (/ WR et / INTR attachés ensemble, et / CS = 0, / RD = 0) vous n'avez même pas besoin d'un micro.
Il vous suffit de 3 choses:
1.2 diodes, une résistance et un interrupteur pour démarrer la conversion sur / WR broches
2.Une zone tampon de conduire les LED
3.Enfin, prenez un cerveau intelligent pour faire la conversion d'affichage (si les moyens 0xFF pour vous 5 V que la pleine échelle, puis 0x80 signifie 2,5 V)
Vous devez admettre que vous avez besoin du cerveau pour voir les données sur la LED..

Juste une blague.
 
vérifier les livres "8051 UC" par Mackenzie Scott et "uC et les systèmes embarqués 8051" par mazidi

 
afti_khan a écrit:

vérifier les livres "8051 UC" par Mackenzie Scott et les "systèmes embarqués et uC 8051" par mazidi
 
Silvio HI,
Merci pour votre aide, j'ai réussi à faire en temps réel ADC.J'avais fait quelques erreurs dans la partie LED.En tout cas merci encore pour aider à yor.Vous aviez mentionné plus tôtCitation:

La meilleure solution est d'utiliser P1 pour la lecture de deux ADC (entrée) et de l'écriture LED (sortie) (câblage parallèle entre eux dans le bus ").

 
Vinash Salut,

Gardez à l'esprit que le temps nécessaire pour lire les résultats de la conversion est très court.
Néanmoins, les données que vous lisez est immédiatement affichée sur P1 même.Ainsi, vous ne verrez aucun effet sur les LED.
Mon erreur dont je parle ci-dessus, c'est que pendant une lecture de ADC0804, le convertisseur ne serait pas en mesure de faire couler le LED et approprié à base de viande VIL max à P1.
Vous êtes déjà familier avec la connexion de deux appareils qui partagent le même bus.
Quand on est activée (CS) d'autres doit être désactivé pour éviter les conflits.
Depuis LED ne se comporte en tant que tels dispositifs communs, vous devez fournir un moyen de les désactiver pendant le cycle de courte lecture de ADC0804.
En supposant que vous avez LED à anode commune puis un transistor PNP petite mesure de la source du courant nécessaire conduira les LED.
Le transistor sera polarisé par une résistance par ^ 7 P3 qui est entraîné à faible lors de l'affichage et de haute lors de la lecture cycle court ADC.
Évident que le colector du transistor est relié à l'anode commune des LED et Emitor va vers 5 V.

Hope j'ai réussi à clarifier vos doutes.

 
Merci Silvio, et j'ai une autre question, j'espère que vous seriez en mesure de m'aider, au lieu d'utiliser la transmission en parallèle pour la lecture de l'entrée ADC (en utilisant l'ensemble de la P1), peuvent utiliser la transmission de série i?que je ne peux mettre sur les broches? S'il vous plaît ne vous nous annoncez.Merci.

 
Vinash Salut,

Selon votre ftopic144860.html première tentative en utilisant MPC3208 avec interface SPI.
Comme je vous l'ai dit avant, car AT89C4051 n'a pas SPI interface matérielle, vous devez utiliser "bang" bit méthode d'utilisation à des fins générales I / S pour émuler un port série.
Vous avez besoin de seulement 4 fils: CS, CK, Dout, Din
Lisez ceci: Mon micro est sans SPI interface, donc puis-je utiliser Bit-claquement?Ensuite, il vous suffit de lire principalement les 15 pages - 16
MPC3208 Microchip la feuille de données

Toutefois, si vous souhaitez utiliser RX et TX lignes de AT89C4051 vous pouvez utiliser AD7823 et mettre le 8051 pour fonctionner en mode 0.
Page 10 de Analog AD7823

 

Welcome to EDABoard.com

Sponsor

Back
Top