bragol 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба Пишу пробный вариант программы для работы с АЦП (1) Настройка последовательно порта для вывода результатов преобразования (2) Настройка регистров АЦП (3) Произвести преобразование (4) Вывести результат на UART На реальной микросхеме почему-то не работает пробовал и стандартные методы, за основу которых взяты примеры с сайтов производителей и через прерывания пробую, тоже не выдает данные на гипер терминал Вот через прерывание: #include <ADUC814.H> #include <stdio.h> sbit BLINK = P3^3; void pause (int i) { while ( i > 0 ) --i; } void ADC_int () interrupt 6 { printf("\n%02BX%02BX\n", ADCDATAH, ADCDATAL); return; /* while (ADCCON3 & 0x80); BLINK = ~BLINK; if(ADCDATAL != 0 || ADCDATAH != 0) printf("We Have Some DATA!"); pause(10000);*/ } void main (void) { int CHAN = 0; // unsigned char chan_2_convert; /*----------------------------------------------- Configure the serial port to run at 9600 Baud. -----------------------------------------------*/ PCON = 0x80; PLLCON = 0x30; SCON = 0x50; TMOD |= 0x20; TH1 = 0xF7; TR1 = 1; TI = 1; /*----------------------------------------------- Configure the A/D to sequentially convert each input channel. -----------------------------------------------*/ ADCCON1 = 0x80; ADCCON2 = CHAN; EA = 1; EADC = 1; while (1) { SCONV = 1; BLINK = ~BLINK; pause(10000); } } Вот другим способом, тут пытался подать напряжение Vref, программно: #include <ADUC814.H> #include <stdio.h> void pause (int i) { while ( i > 0 ) --i; } void main (void) { unsigned char chan_2_convert; /*----------------------------------------------- Configure the serial port to run at 9600 Baud. -----------------------------------------------*/ PCON = 0x80; PLLCON = 0x30; SCON = 0x50; TMOD |= 0x20; TH1 = 0xF7; TR1 = 1; TI = 1; /*----------------------------------------------- Configure the A/D to sequentially convert each input channel. -----------------------------------------------*/ ADCCON1 = 0x80; ADCCON2 = 0x1C; while (1) { unsigned int conv_val; /*----------------------------------------------- Start a conversion and wait for it to complete. -----------------------------------------------*/ chan_2_convert = 0;// (chan_2_convert + 1) % 6; // ADCCON2 = (ADCCON2 & 0xF0) | chan_2_convert; SCONV = 1; while (ADCCON3 & 0x80); pause(10000); /*----------------------------------------------- Read A/D data and print it out. ---------------------------------------------*/ conv_val = ADCDATAL | ((ADCDATAH & 0x0F) << 8); printf ("ADC Channel %bu = 0x%4.4X\r\n", chan_2_convert, conv_val); } } В чем может быть моя ошибка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 9 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба ...не выдает данные на гипер терминал... В чем может быть моя ошибка? Так, какая у Вас проблема? Ничего не выдаётся на терминал? Или выдаются неверные результаты измерения АЦП? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bragol 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 (изменено) · Жалоба Так, какая у Вас проблема? Ничего не выдаётся на терминал? Или выдаются неверные результаты измерения АЦП? На терминал ничего не выводится, в симуляторе либо одни нули, чего судя по всему быть не может, либо 0х0FFF если программно подключаю Vref 2,5V. Такой результат и в первом и во втором варианте, по сути АЦП вообще ничего не делает, иначе на терминал выводилось бы 0х0FFF при подключенном опорном напряжении или нечто стремящееся к нулю, второй день уже бьюсь пробовал и в режиме разового преобразования и в режиме постоянного. Может быть что на МК АЦП не работает??? Я понимаю, что скорее всего где-то я ошибся и этот вариант можно рассматривать самым последним, но все равно мне просто интересно может ли на МК выйти из строя какой-то один блок, а не весь целиком. И еще такой немаловажный момент, я ради интереса скачал программу с сайта производителя на мой адук814 с разовым преобразованием и при ее запуске диод вместо того, чтоб мигать просто постоянно горит, да и вольтметром проверяли, он показывает постоянное напряжение, а должен скакать, получается, что у них тоже неправильная программа??? Что на мой взгляд маловероятно Изменено 15 ноября, 2011 пользователем bragol Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bragol 0 16 ноября, 2011 Опубликовано 16 ноября, 2011 · Жалоба выше я немного ошибся на терминал все-таки выводятся нули, а 0х0FFF только в кейловском симуляторе. И еще вряд ли это от МК, проверил на 2-ух разных результат один и тот же, но и на программу грешить не могу, потому что за основу брал исходники производителей Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bragol 0 21 ноября, 2011 Опубликовано 21 ноября, 2011 · Жалоба Что неужели ни у кого схожих проблем не было??? Многократно все перепроверил... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться