<<<

Интерфейс с АЦП ADC0832.

  Микросхема ADC0832 представляет собой двухканальный 8-разрядный аналого-цифровой преобразователь последовательных приближений. Благодаря простому трехпроводному последовательному интерфейсу NSC MICROWIRE(tm) позволяет создавать недорогие приложения, в которых необходимо измерение аналоговых величин, используя минимальное количество портов микроконтроллера.
  Выпускается National Semiconductor
 Подробнее об ADC0832....
  Ниже приведена подпрограмма для работы ADC0832 совместно с PIC- микроконтроллером, написанная на ассемблере и встроенная в код для С-компиллятора С2С.

  Схема включения АЦП:
выводы PORTA
RA0 - DATA OUT ADC
RA1 - CS ADC
RA2 - DATA IN ADC
RA3 - CLOCK ADC
  Подключениe DATA OUT критично по отношению к алгоритму (см. asm)

/*-------------начало примера------------
требуется 3 байта ОЗУ:
 cfg - конфигурация АЦП
  cfg=0 - измерение разницы CH0-CH1
  cfg=1 - измерение разницы CH1-CH0
  cfg=2 - измерение CH0
  cfg=3 - измерение CH1
 result - результат измерения;
 tmp - счетчик, используемый в цикле;
 
char readADC(char cfg) {
char result;
 asm {       
  bcf STATUS, RP0;           CLK DI CS DO
  movlw b'10100';            setting up initial
  movwf PORTA;

  bsf PORTA, 3;              CLK - up; enter start bit
  bcf PORTA, 3;              CLK - down
  bsf PORTA, 2;              DI -> 1
  btfss param00_readADC, 1;   1 ?
  bcf PORTA, 2;              no, DI -> 0
  bsf PORTA, 3;              CLK - up
  bcf PORTA, 3;              CLK - down
  bsf PORTA, 2;              DI -> 1
  btfss param00_readADC, 0;  1 ?
  bcf PORTA, 2;              no, DI -> 0
  bsf PORTA, 3;              CLK - up
  bcf PORTA, 3;              CLK - down
  bsf PORTA, 3;              
  
            movlw 0x09;       CLK DI CS DO
            movwf _tmp
   get_ADC  bsf PORTA, 3;     CLK - up
            bcf PORTA, 3;     CLK - down
            movfw PORTA;
            andlw 0x01;
            rlf _result_readADC, F;
            addwf _result_readADC;
            decfsz _tmp
            goto get_ADC;
  
  movlw b'10110';  CS - up - reset ADC
  movwf PORTA;
  movfw _result_readADC;
 }
}
/*-----------окончание примера------------*/


  Функция возвращает байт - результат измерения.
  Далее приведен пример использования функции.

/*-----------начало примера------------*/
.
.
.
 while (1) {
  adc = readADC(2) // измеряем напряжение на CH0
  .
  .                // делаем что-то с adc...
  .
 }
/*-----------окончание примера------------*/