Цитата:
Сообщение от 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;
}
}