ajuda necessària en AT89C4051

V

vinash

Guest
Hola,
Jo sóc un nouvingut al camp dels microcontroladors i de fer alguns projectes senzills per familiaritzar-se amb microcontroladors.Actualment estic iniciant en l'ús de la AT89C4051 com un ADC.De fet, estic intentant fer servir l'aplicació de notes proporcionades pel següent lloc web:
h ** p: / / www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF
Seria molt útil si algú m'ajudi amb la codificació (C-programa) per a l'aplicació.He intentat un parell de vegades, però han fracassat.La seva ajuda serà apreciada greaatly.
He fet el connexions per a la conversió ADC i s'havia connectat la tensió positiva del senyal a la clavilla 1.1.i em va escriure un programa molt simple, que seria capaç de llegir la tensió de sortida en els LEDs,.
El programa és de la següent manera:

# Include <AT89x051.h>

char a [10] = (0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93) / * La numeració 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 );

)
)Jo sempre reben un zero en la meva pantalla LED, no importa com em va canviar la tensió d'entrada, Podria algú si us plau help.I estic lluitant amb això durant uns dies.Gràcies

 
BlackBerry najprawdopodobniej rozważa zmianę strategii na rynku mobilnym. Po nieudanym debiucie BlackBerry OS 10 kolejne smartfony kanadyjskiego producenta mogąÂ działać pod kontrolą Androida, czyli systemu operacyjnego od Google.

Read more...
 
Em pregunto quines dades s'emmagatzemen en adc_data i també l'esquema que està utilitzant.
Fent el P1 conjunt (8 pins) per controlar el LED, on s'obté el adc_data?
A més, quin és el significat de P1_1 = adc_data?

 
He connectat el 8.2K resistència a la terra directament en lloc de connectar el condensador de 30 pF, com es mostra en el diagrama de schmetic (en el lloc web determinat).He fet això per que quan s'encén la màquina, en línia recta que la llum dels LED en lloc del que necessiten per canviar si hagués connectat d'acord amb la schmetic donat.

P1_1 = adc_data,
El que estic tractant de fer és assignar les dades de 8 bits rebut de la tensió d'alimentació (de pins 1,1) a l'adc_data direcció.

P1 = [% adc_data 10];
Estic tractant de sortida de les dades que s'emmagatzema en la direcció adc_data a les connexions de LED.

Això és tot el que estic intentant do.I Esperem que seria capaç de resoldre el meu problema.Gràcies.

 
vinash va escriure:

...

P1_1 = adc_data,

El que estic tractant de fer és assignar les dades de 8 bits rebut de la tensió d'alimentació (de pins 1,1) a l'adc_data direcció.P1 = [% adc_data 10];

Estic tractant de sortida de les dades que s'emmagatzema en la direcció adc_data a les connexions de LED.

...
 
Hola,
Gràcies per l'ajuda, en realitat estic bastant confós sobre com llegir una entrada (per exemple, com llegir la tensió d'entrada de P1.1) que he llegit en el full de dades i han assenyalat que, per utilitzar un port com a entrada , acaba d'escriure 1s a ells.Seria genial si ets capaç d'ajudar-me en this.I no estic segur, també, la manera de capturar les dades que s'obté de P1.1.

 
Per fer un port a port d'entrada, escriure 1s fins al port.També pot establir un únic pin a ser alt perquè el PIN pin d'entrada.Ho he fet bé en AT89C51.

De tota manera, tinc una pregunta, si el Port 1 és utilitzada com a port de sortida, i vull enviar a tots 1s a 8 LEDs utilitzant el port 1, el controlador pot fer-ho?O que farà que el port 1 com a port d'entrada?Estic usant AT89C51.

 
Hola Lekka,
Si aquest és el cas, per el que diuen, jo estic donant una ordre, com
P1 = 0x03, ¿Vol dir això que estic utilitzant de forma automàtica P1.0 i P1.1 com insums i la resta dels pins de sortida?

 
No estic segur de com programar en C. Estic utilitzant el llenguatge assemblador i Asem51 assemblador.

Per fer que el port 1 com a port d'entrada, el codi és
MOV P1, # FFH

Per fer un únic pin (per exemple, Pin 1,1) com a pin d'entrada, el codi és
SETBA P1.1

La idea és, establir el port en particular o d'alta només pin, el port o PIN serà el port d'entrada o pin d'entrada.Sense fer això, vostè no pot rebre dades usant.

 
Jo no sé realment com funciona aquest esquema com un ADC, per la qual cosa no pot respondre a com obtenir les dades.
Per a l'entrada, vinash ha de ser correcte.Vostè només pot tractar en el seu circuit.
Com vostè ha dit que no es pot mostrar en LED, em pregunto quin és el codi que va escriure per al control de la seva LED.Et importa anunci per a nosaltres?

 
HI Tofinkh,
El programa que jo havia escrit a continuació:

També he pujat l'arxiu, si us plau, doneu un cop d'ull i per favor, hágamelo saber si troba algun error, moltes gràcies, ho faig molt agraïts per la seva ajuda

# Include <AT89x051.h>

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

(
adc_data unsigned char;

P1 = 0x03; / / configuració P1.0 i P1.1 com insums i la resta de la P1 com a sortida
while (1) (
P1_1 = adc_data; / / llegir les dades (de la tensió d'entrada) de P1.1 i emmagatzemar-lo en adc_data
retard (5);
P1 = P1 &0x03; / / P1 SET de nou de tal manera que P1.0 i P1.1 són els insums i els altres ports de sortida P1 SRE
P1 = a [% adc_data 10]; / / trobar la resta de les dades obtingudes per exemple, si és 0x15, la resta és d'1 per tant P1 i 0x03 = 1
/ / I a [1] = 1 i per tant 1 es mostra
retard (5);
)
)void retard (int)
(
int j;
for (j = 0; j <count; j ) (
continuar;
)
)

 
hola,

és millor que comprovar com el ADC treballa en el seu primer document.si vol posar el valor de P1.1 i emmagatzemar-lo en adc_data, ha de ser
= Adc_data P1_1;

per a la conducció dels LED de 7 segments, has d'activar el LED abans d'enviar el valor, la P1.2 i P1.3 en l'esquema, permet un LED a la vegada.Si us plau, doneu un cop d'ull al seu full de dades també.

 
Hola, havia modificat el codi, i el nou codi és el següent: i com s'havia esmentat sobre P1.2 i P1.3 haver estat commutada de baixa quan s'utilitza la va portar d'interès.Ho havia fet i també en l'actualitat només estic fent servir un dirigit a la prova i perquè jo havia mantingut sempre sota P1.3 i P1.2 sempre alt, de manera que només un LED s'utilitza.Però encara dont obtenir xifres sobre el LED.Esperem que seria capaç d'ajudar.Gràcies.

# Include <AT89x051.h>

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

(
adc_data unsigned char, z;

P1 = 0x03; / / configuració P1.0 i P1.1 com insums i la resta de la P1 com a sortida
while (1) (
P3_7 = 0;
P1 = P1 &0x03; / / P1 SET de nou de tal manera que P1.0 i P1.1 són els insums i els altres ports de sortida P1 SRE
= Adc_data P1_1; / / llegir les dades (de la tensió d'entrada) de P1.1 i emmagatzemar-lo en adc_data
z = P1 &0x03;
z = a [% adc_data 10];
retard (5);
P1 = P1 &0x03;
P1 = a [adc_data]; / / trobar la resta de les dades obtingudes per exemple, si és 0x15, la resta és d'1 per tant P1 i 0x03 = 1
/ / I a [1] = 1 i per tant 1 es mostra
retard (5);

)
)void retard (int)
(
int j;
for (j = 0; j <count; j ) (
continuar;
)
)

 
vinash, com AT89C4051 no té un "veritable" ADC, l'ADC en la seva nota de sol licitud és formulada per un comparador i alguns circuit RC simple.Cal llegir el document abans que desitja obtenir el valor analògic.No s'ha de fer simplement escrivint adc_data = P1_1.
Si us plau, comproveu acuradament sobre la seva sol licitud de la primera nota.HTH

 
Hola Tofinhk,
Gràcies per la seva amabilitat aadvice, tractaria de fer alguna cosa.Però de totes maneres, realment apreciem l'ajut que havia prestat

 

Welcome to EDABoard.com

Sponsor

Back
Top