hulp nodig AT89C4051

V

vinash

Guest
Hoi,
Ik ben een nieuwkomer op het gebied van microcontrollers en het doen van enkele eenvoudige projecten om vertrouwd te raken met microcontrollers.Momenteel ben ik aan boord gaan over het gebruik van AT89C4051 als een ADC.Ik ben eigenlijk probeert te gebruiken toepassing van de aanwijzingen van de volgende website:
h ** p: / / www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF
Het zou zeer nuttig zijn als iemand om me te helpen met de codering (C-programma) voor de toepassing.Ik heb geprobeerd een paar keer, maar hebben gefaald.Uw hulp zou greaatly worden gewaardeerd.
Ik heb gedaan de connecties voor de ADC-conversie en had aangesloten op de positieve spanning van het signaal naar Pin 1.1.en ik schreef een zeer eenvoudig programma, dat zou kunnen uitgangsspanning lezen op de LED's.
Het programma is als volgt:

# Include <AT89x051.h>

char a [10] = (0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93); / * De nummering 0-9 * /void main (void)

(Int j, adc_data;
while (1) (

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

)
)Ik doe altijd nul krijgen op mijn LED-display, maakt niet uit hoe ik de spanning input veranderd, Konden iemand wees help.I ben worstelen met dit voor een paar dagen.Dank u

 
Ik vraag me af welke gegevens u opgeslagen in adc_data en ook het schema dat u gebruikt.
Als u de hele P1 (8 pins) naar adc_data controle van de LED, waar je de?
Ook, wat is de zin van P1_1 = adc_data?

 
Ik heb de 8.2K weerstand van de grond direct in plaats van de aansluiting met de 30Pf condensator zoals aangegeven in de schmetic schema (op de website van de gegeven).Ik heb dit gedaan, dat wanneer de stroom is ingeschakeld, het zou meteen het licht van de leds in plaats van te hoeven om te schakelen als ik had aangesloten volgens de schmetic gegeven.

P1_1 = adc_data,
Wat ik probeer te doen is wijzen de 8-bits data ontvangen van de voedingsspanning (van pin 1.1) naar het adres adc_data.

P1 = [adc_data% 10];
Ik probeer de uitgang van de gegevens die is opgeslagen in adc_data adres aan de LED-verbindingen.

Dit is alles wat ik probeer te do.I hopen dat u in staat zou zijn om mijn probleem op te lossen.Dank u.

 
vinash schreef:

...

P1_1 = adc_data,

Wat ik probeer te doen is wijzen de 8-bits data ontvangen van de voedingsspanning (van pin 1.1) naar het adres adc_data.P1 = [adc_data% 10];

Ik probeer de uitgang van de gegevens die worden opgeslagen in de adresbalk van adc_data aan de LED-verbindingen.

...
 
Hoi,
Bedankt voor de hulp, eigenlijk ben ik behoorlijk in de war over hoe datasheet lezen van een input (bijvoorbeeld hoe de spanning om te lezen van de input van P1.1) Ik heb gelezen en zij hebben aangegeven dat, om input te gebruiken als een haven , schrijf 1s aan hen.Het zou geweldig zijn als u in staat bent om me te helpen in this.I ben er ook niet zeker weet hoe P1.1 vastleggen van de data die is verkregen.

 
Om een haven naar de haven worden ingevoerd, schrijf 1s naar de haven.U kunt ook een pin hoog te zijn met de pinnen te maken van de pin te worden ingevoerd.Ik heb dit gedaan zowel in AT89C51.

Anyway, ik heb een vraag, als de Poort 1 wordt gebruikt als uitgang van de poort, en ik wil sturen alle 1s tot en met 8 LED's 1 met behulp van Port, kan de controller het doen?Of het zal de poort 1 als input-poort?Ik gebruik AT89C51.

 
Hi Lekka,
Als thats het geval, zo zeg, ik ben het geven van een opdracht, zoals
P1 = 0x03, Betekent dit dat ik automatisch met behulp van P1.1 en P1.0 als input en de rest van de pinnen als output?

 
Ik ben niet zeker hoe het programma in C. Ik gebruik assembler en assembler Asem51.

Om de poort 1 als input-poort, de code is
MOV P1, # FFH

Om een pin (bijv. Pin 1.1) als input pin, de code is
SETB P1.1

Het idee is, stelt u de haven in het bijzonder of single pin hoog, de haven of pin pin ingang poort of ingang.Zonder dit te doen, kunt u geen gegevens ontvangt u ze gebruikt.

 
Ik weet niet echt hoe dit schema werkt als een ADC, dus ik kan geen antwoord geven hoe u de gegevens op te halen.
Voor de ingang, vinash moet je rechts.U kunt gewoon proberen in je circuit.
Zoals u zei, je kunt niet weergegeven in LED, vraag ik me af welke code je hebt geschreven voor het regelen van uw LED.Vind je het erg te posten voor ons?

 
HI Tofinkh,
Het programma dat ik geschreven had is hieronder:

Ik heb ook het bestand geüpload, neem eens een kijkje en neem fout laat het me weten als je vindt, heel erg bedankt, ik heb grote waardering voor uw hulp

# 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 vertraging (int count);
void main (void)

(
unsigned char adc_data;

P1 = 0x03; / / instelling P1.0 en P1.1 als input en de rest van de P1 als output
while (1) (
P1_1 = adc_data; / / lezen van de gegevens (van de spanning input) uit P1.1 en bewaar het op adc_data
vertraging (5);
P1 = P1 &0x03; / / set P1 opnieuw zodanig dat P1.0 en P1.1 zijn inputs en de andere havens P1 SRE output
P1 = a [adc_data% 10]; / / data vind je de rest van de verkregen als deze bijvoorbeeld 0x15, de rest is 1 Zo P1 & 0x03 = 1
/ / En een [1] = 1 en dus 1 zou worden weergegeven
vertraging (5);
)
)void vertraging (int count)
(
int j;
voor (j = 0; j <aantal; j ) (
voort te zetten;
)
)

 
hi,

u beter te controleren hoe de ADC werkt het in uw document eerst.Als je wilt zet de waarde van P1.1 en het opslaan in adc_data, moet worden
adc_data = P1_1;

voor het besturen van de 7-segment LED, moet u de waarde in staat de LED voor het verzenden van de, P1.2 en P1.3 de in het schema, zodat een LED in een keer.Neem een kijkje op de datasheet ook.

 
HI, ik had de code aangepast, en de nieuwe code is als volgt: en als je had gezegd over P1.2 en P1.3 met lage ingeschakeld wanneer de leiding van de rente wordt gebruikt.Ik had dat gedaan en ook ik ben momenteel alleen met behulp van een LED om te testen en voor dat ik had gehouden P1.3 en P1.2 altijd laag altijd hoog, zodat slechts een LED wordt gebruikt.Maar ik heb nog geen dont get cijfers over de LED.hoop dat je zou kunnen helpen.Dank u.

# 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 vertraging (int count);
void main (void)

(
unsigned char adc_data, z;

P1 = 0x03; / / instelling P1.0 en P1.1 als input en de rest van de P1 als output
while (1) (
P3_7 = 0;
P1 = P1 &0x03; / / set P1 opnieuw zodanig dat P1.0 en P1.1 zijn inputs en de andere havens P1 SRE output
adc_data = P1_1; / / lezen van de gegevens (van de spanning input) uit P1.1 en bewaar het op adc_data
z = P1 &0x03;
z = a [adc_data% 10];
vertraging (5);
P1 = P1 &0x03;
P1 = a [adc_data]; / / vind je de rest van de gegevens die worden verkregen als deze bijvoorbeeld 0x15, de rest is 1 Zo P1 & 0x03 = 1
/ / En een [1] = 1 en dus 1 zou worden weergegeven
vertraging (5);

)
)void vertraging (int count)
(
int j;
voor (j = 0; j <aantal; j ) (
voort te zetten;
)
)

 
vinash, AT89C4051 doet wat niet een "echte" ADC, de ADC in uw aanvraag notitie is gemaakt door een comparator en een aantal eenvoudige RC-kring.Je moet het document te lezen voordat je de analoge waarde te krijgen.Het moet niet worden gedaan door simpelweg te typen adc_data = P1_1.
Controleer zorgvuldig of over uw aanvraag eerste noot.HTH

 
Hi Tofinhk,
Dank u voor uw vriendelijk aadvice, zou proberen om iets aan te doen.Maar goed, echt waarderen de hulp die u had gemaakt

 

Welcome to EDABoard.com

Sponsor

Back
Top