andyan02 said:
Find Examples in Internet. it is very easy to write .
Added after 30 minutes:
Here my code
But comments in Russian
I am lazy to translate them
))
// Микроконтроллер PIC18F4620
// Частота внешнего кварца = 40 МГц (Fcy = Fosc / 4 = 10 МГц - одна инструкция выполняется за 0.1 мкс)
// Настройка АЦП (13 аналоговых входов)
// Tad(min) = 0.7 мкс
// правое выравнивание (ADFM = 1), VCFG1 = Vss, VCFG0 = Vdd
// Fosc/32 -> Tad = 0.8 мкс, Tacq = 8*Tad = 6.4 мкс
// 0000-канал RA0, 0 - состояние ожидания, модуль АЦП выключен
// Tcy = 4*Tosc
// 32*Tosc = 16*0.5*Tcy (визуальный инициализатор не запоминает !?)
ADCON0bits.ADON = 1; // Включаем АЦП-модуль
// ------------------------------------------------------------------ //
unsigned int Read_Data_From_ADC (unsigned char uc_Channel_Number) // считывание данных с аналоговых каналов
{
// Результат преобразования - 10 битный, правое выравнивание
// Tacq = 11.5 мкс (для заряда конденсатора модуля АЦП), Tad(min) = 1.6 мкс, Tad = 2 мкс
// Tпреобразования = 11*Tad, 2*Tad - перед началом след. преобразования
uc_Channel_Number <<= 2; // shift left 2 times
ADCON0 &= 0b11000011;
ADCON0 |= Channel_Number_uc;
// Wait 15 mks
uc_i = 15;
do
{
Nop();
Nop();
}
while (--uc_i);
ADCON0bits.GO_DONE = 1;
while (ADCON0bits.GO_DONE); // ожидаем сброса GODONE (~20 мкс)
return (ADRESH << 8) | ADRESL; // результат АЦП 10-битный // not smile but ( << eight)
}
// ------------------------------------------------------------------ //