Решил в DSPIC33FJ32GP204 изучить АЦП. Хотел изменяя сопротивление потенциометра с помощью поочерёдного загорания светодиодов (4 штуки) иметь представление о текущем уровне сигнала. Вот текст программы
Код
#include "p33Fxxxx.h"
_FOSCSEL(0x02);
_FOSC(0xE2);
int pot=0b0000000000;
int READ_ADC (void)
{
AD1CHS123bits.CH123SA=0;
AD1CON1bits.SAMP = 1;
while (!AD1CON1bits.DONE);
return ADC1BUF0;
}
int main(void)
{
PORTA=0;
LATA=1;
TRISA=0b1;
PORTC=0;
LATC=0;
TRISC=0b100;
PORTB=0;
LATB=0;
TRISB=0;
AD1PCFGL=0b1111111111110;
_AD12B=0;
AD1CON2bits.VCFG=0b011;
AD1CON2bits.CHPS=0b11;
AD1CON1bits.SSRC=0b111;
AD1CON1bits.ASAM=0b1;
AD1CON2bits.SMPI =0b0000;
AD1CON2bits.CSCNA =0b0;
AD1CON3bits.SAMC = 0b11111;
AD1CON3bits.ADCS=0b00000001;
//AD1CON3 = 0b0001111100000001
AD1CHS0=0b0;
AD1CSSL=0b1;
AD1CON1bits.FORM=0b00;
//AD1CHS123bitsCH123SA=0;
_AD1IE=1;
_AD1IF=0;
AD1CON1bits.ADON=0b1;
while(1)
{
if (pot<=0b11111111)
_RB3=1;
else
if(pot>0b11111111&&pot<=0b111111111)
{_RB3=1;
_RB2=1;}
else
if(pot>0b111111111&&pot<=0b1011111111)
{_RB3=1;
_RB2=1;
_RB1=1;}
else
if (pot>0b1011111111)
{_RB3=1;
_RB2=1;
_RB1=1;
_RB0=1;}
}
}
void __attribute__((__interrupt__,auto_psv)) _ADC1Interrupt(void)
{
READ_ADC();
pot=ADC1BUF0;
_AD1IF = 0;
}
но почему-то всегда горят все 4 вне зависимости от изменения... помогите разобраться в чём дело.. если кому надо - могу схему в протеусе сбросить...