Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: АЦП PIC16F877
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
pipka
Помогите разобраться с АЦП в PIC16F877.
При 1 вольте на входе почему-то на вызоде: portc=%10000000

Программа:

@ DEVICE HS_OSC,WDT_ON,CPD_OFF,PROTECT_OFF,PWRT_ON,BOD_OFF

define OSC 20
DEFINE ONINT_USED 1

Define ADC_BITS 10
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50

portc=%00000000
trisc=%00000000

portd=%00000000
trisd=%00000000

ad var word
TRISA = %00000011
ADCON1 = %10000011
ADCIN 1, ad
if adval >3 then
gosub w
endif

if adval <3 then
gosub r
endif

r:
portc=%00100000
portd.3=1
GOSUB r

w:
portc=%10000000
portd.3=1
GOSUB w

Спасибо
volodya
Цитата(pipka @ Oct 12 2007, 15:31) *
Помогите разобраться с АЦП в PIC16F877.
При 1 вольте на входе почему-то на вызоде: portc=%10000000

Программа:

@ DEVICE HS_OSC,_ON,CPD_OFF,PROTECT_OFF,PWRT_ON,BOD_OFF
..............................
ad var word
TRISA = %00000011
ADCON1 = %10000011
ADCIN 1, ad
if adval >3 then
.............................................


Ух какая интересная лексика? Не въехал на что похоже, откуда такое?

Попробуйте внимательно почитать примеры применений. По тексту не видно Но вы ADC настроили на работу с внешним VREF (ADCON1 = %10000011), А в железе он есть?
На чем проводится проверка? Вижу включение сторожевого WDT однако это будет сбрасывать CPU с определенным тактом. без команды CLRWDT.
Не видно операции с ADCON0 тут выбирается тактирование ADC, канал и включение преобразователя и старт преобразования.
И чтение результата из ADRES не нашел чтения?
В DS30292 описан порядок работы попробуйте по пунктам пройтись.
Удачи!!
kolisnichenko_r
Вдумчиво читайте описание микроконтроллера. Там подробно описано, даже на русском языке.
Вот кусок программы на С (PICC):
//форматирования результата, настройка портов
ADCON1=0x88;// ADRESH=000000xx
// ADRESL=xxxxxxxx
// Uref+->RA3
// Uref-->RA2
// RA0,RA1,RA5,RE0-RE2-analog.vh
//подпрограмма измерения
unsigned short ADC(unsigned char adc)//ADC с выбором канала
{ADCON0=adc;
Delaymus(23);// 23mks
ADGO=1;//
while(ADGO==1){;} //
//подготовка результата
return (ADRESH<<8)+ADRESL;//
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.