необхідна при використанні AT89C4051 як АЦП

V

vinash

Guest
Привіт,
Я використовую AT89C4051 використовувати його як АЦП для застосування в якості двох цифр, вольтметр.Я дотримуюся схемою, зазначеної в наступну адресу:
H ** P: / / www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF.
Я написав код на С, і воно не працює.Було б дуже корисно, якби хто-небудь, щоб допомогти мені, якщо є будь-які помилки в своєму коді.Мій код:

# Включити <AT89x051.h>
# DEFINE ТОН 79;
# DEFINE TOFF 79;

непідписаних Int та, туберкульозу;
Чари [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
Char B [10] = (0x0B, 0x1B, 0x2b, 0x3b, 0x4b, 0x5B, 0x6b, 0x7B, 0x8B, 0x9B);
scanled ();

Основними Void (Порожнеча)
(
Int TD, TC, м;
TC = т;
TD = TOFF

While (1) (

P3_7 = 1;
для (M = 0, M <TC; M ) (
якщо (P3 ^ 6 == 0)
TA ;)P3_7 = 0;
для (M = 0, M <TB; M ) (
якщо (P3 ^ 6 == 1)
TB ;
)

scanled ();

)

)

scanled () (
Я знайомий Int, прапор, J;якщо (ТБ == 0) (

для (i = 0; i <2; I ) (
FLAG = 1-прапор;
якщо (прапор == 1) (
P1 = [(TA) / 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
)

якщо (прапор == 0) (
P1 = B [(TA)% 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
))

)

Else If (TA == 0) (
для (i = 0; i <2; I ) (
FLAG = 1-прапор;
якщо (прапор == 1) (
P1 = [(Тб) / 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
)

якщо (прапор == 0) (
P1 = B [(ТБ)% 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
))

)
)

Я щиро сподіваюся, хтось зможе допомогти мені, як я відчайдушно робити це протягом останніх тижнів без яких-небудь прибутковість.Велике вам спасибі

 
Привіт,
Я не використовую зовнішні converter.I Д. намагаюся використовувати аналоговий компаратор в AT89C4051

 
Привіт,

Ви писали:

P3_7 = 0;
;m ){

для (M = 0, M <TB;

M ) (
якщо (P3 ^ 6 == 1)
TB ;

Якщо це не помилка друкарську машинку, "ТБ", опубліковані в червоний колір не повинен бути "ТД"?.

Ви уважно прочитайте Doc?

Він чітко заявив, що, перш ніж робити які-небудь дисплея, вартість повинна бути скоригована відповідно до таблиці.
Я не бачу в цьому коді.
Це правда, що ви використовували два масиви або заряд або скидання частини циклу вимірів (та чи туберкульоз).
Але це марно, поки Зарядка і розрядка конденсатора це не лінійна.

Ви впевнені, що:

1.при компіляції коду, значення XTAL складає 12 МГц?Просто тому, що всі затримки сильні, пов'язані з цим припущенням.
Я маю на увазі значення тонна 79 визначається як мінімальне число проб, які повинні бути зроблені для гарантії того, що напруга на конденсаторі досягло VCC / 2.
Більше того, максимальний час перетворення є 7мс (інтервал вибірки = 5us) в залежності від цієї величини резистора = 267 кОм; конденсатора = 2 nanofarads; Vcc = 5,00 Вольт.

2.Я не бачу в коді додаткові НОП, згаданих в первинному код, який використовується для затримки першим
зразка в заряду і розряду частини циклу вимірювання і, як результат впливу на точність mesurement (чому рішень гірше, ніж з такого роду вимірів)

3.Коли ви отримуєте в scanled () рутини, ви впевнені, що вартість "прапор" 0 або 1?Що трапиться, якщо має значення, коли випадкові "прапор = 1 прапора;"

 
Привіт,
Спасибі за вказівку помилки туберкульозу.

Що стосується таблиці пошуку, я не за допомогою таблиці пошуку.Я просто хочу знати ряду звинувачень.З числа за розділами, я можу послатися на таблицю пошуку вручну і отримати вихідну напругу.

Дякуємо Вам за пропозицію про 7мс інтервал, я забула включити це.

Дякуємо за ваші пропозиції ....

 
це дає про www.atmel.com, а також пошук www.epanorama.net

 
HI Сильвіо,
Я зробив зміни, як Ви заявили, але я до сих пір не можу отримати його робота ... Pls допомагають ... Мій виправити код нижче для вашого посилання.

# Включити <AT89x051.h>
# DEFINE ТОН 79;
# DEFINE TOFF 79;

непідписаних Int та, туберкульозу;
Пустота затримки (INT Count);
Чари [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
Char B [10] = (0x0B, 0x1B, 0x2b, 0x3b, 0x4b, 0x5B, 0x6b, 0x7B, 0x8B, 0x9B);
scanled ();

Основними Void (Порожнеча)
(
Int TD, TC, м;
TC = т;
TD = TOFF

While (1) (

P3_7 = 1;
для (M = 0, M <TC; M ) (
якщо (P3 & 0x40 == 0)
TA ;
)
затримка (3);

P3_7 = 0;
для (M = 0, M <TD; M ) (
якщо (P3 & 0x40 == 1)
TB ;
)
ТБ = TB TD;
затримка (3);

scanled ();

)

)

scanled () (
Я знайомий Int, прапор = 0, J;
статичного знака Int K, ч;
K = та;
H = ТБ;

якщо (ТБ == 0) (

для (i = 0; i <2; I ) (
FLAG = 1-прапор;
якщо (прапор == 1) (
P1 = [(K) / 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
)

якщо (прапор == 0) (
P1 = B [(K)% 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
))

)

Else If (TA == 0) (
для (i = 0; i <2; I ) (
FLAG = 1-прапор;
якщо (прапор == 1) (
P1 = [(H) / 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
)

якщо (прапор == 0) (
P1 = B [(H)% 10];
для (J = 0; J <32000; J );
P1 = 0xFF;
))

)
)

Пустота затримки (INT кол-во)
(
Int J, L;
для (J = 0; J <= Count; J )
(
(Л = 0; L <= 120; L );
)
)

Дійсно ціную вашу допомогу.Спасибо.

 

Welcome to EDABoard.com

Sponsor

Back
Top