Показать сообщение отдельно
Старый 21.04.2016, 14:19   #1202   
Форумец
 
Сообщений: 1,532
Регистрация: 19.02.2009
Возраст: 54
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от Vdmit Посмотреть сообщение
Хотел бы от Вас ещё такой же урок с АЦП . Какой-нибудь незамысловатый пример от уровня напряжения на какой-нибудь ноге . Спасибо !
Код для PIC12F683 (просто он в железе запаян был, а 675 надо было паять, суть та же).
Алгоритм: АЦП меряет напряжение на GP1 и в зависимости от напряжения меняет скважность ШИМ, соответственно меняется яркость свечения светодиода.


Код:
unsigned short Period, Pulse, value;

void interrupt ()
{
 static unsigned short count = 0;
 
 if(T0IF_bit)
  {
    count++;
    if(count < Period){
     if (count < Pulse)
      GP0_bit = 1;
     else
      GP0_bit = 0;
     }
    else {
      count = 0;
      GP0_bit = 1;
     }
    T0IF_bit = 0;
  }
}
void main() {
     ANSEL  = 0x00;
     ADCON0 = 0x00;
 
     // GP1 (AN1) - midle pin resistor 10 kOm
     TRISIO1_bit = 1;           // GP1 input
     // set ADC
     ADCS1_bit = 1; 	        // internal oscillator RC for ADC
     ADCS0_bit = 1;
     ADFM_bit  = 0;      	// Left adj
     CHS0_bit = 1;              // AN1 chanel select
     ANS1_bit  = 1;		// AN1 analog input
     ADON_bit = 1;              // on ADC
     // GP0 connect LED
     TRISIO0_bit = 0;
     GP0_bit = 0;
     // set TMR0
     OPTION_REG = 0x88;
     // on interrupt
     T0IE_bit = 1;
     GIE_bit = 1;
     
     Period = 64;
     Pulse = 1;
     
     for(;;){
       GO_DONE_bit = 1;                     // Start ADC
       while (GO_DONE_bit) continue;
       value = ADRESH>>2;
       Pulse = value;
     }
}
  Ответить с цитированием