So Iv'e got this code that sample 4 adcs, and when it was with one adc it worked fine, but once I added the other three it stopped working, anyone have any ideas.
Code: Select all
Code: Select all
Rich (BB code):
#define ADC_CS1 PORTA.F7 // output bit
#define ADC_CS2 PORTE.F4
#define ADC_CS3 PORTG.F9
#define ADC_CS4 PORTA.F7
#define ADC_SDO PORTB.F3
sbit ADC_SCK at LATG6_bit;
char buffer1[20];
char buffer2[20];
char buffer3[20];
char buffer4[20];
long d1;
long d2;
long d3;
long d4;
unsigned long x1_1,x2_1,x3_1,x4_1,x5_1;
unsigned long x1_2,x2_2,x3_2,x4_2,x5_2;
unsigned long x1_3,x2_3,x3_3,x4_3,x5_3;
unsigned long x1_4,x2_4,x3_4,x4_4,x5_4;
/* read 32-bit data from LTC2400 */
unsigned long read_ADC1(void)
{
char k1;
long n1;
n1= 0;
ADC_CS1 = 0;
Delay_us(10);
for(k1=0; k1<32; k1++)
{
n1<<= 1;
ADC_SCK = 1;
n1 |= ADC_SDO;
ADC_SCK = 0;
}
ADC_CS1 = 1;
n1&=0x01fffffff; // maskout sign bit
n1>>=4; // get 24-bit conversion result
return n1;
}
unsigned long filter_ADC1(void)
{
x5_1 = x4_1;
x4_1 = x3_1;
x3_1 = x2_1;
x2_1 = x1_1;
x1_1 = read_ADC1();
return ((((x1_1+x2_1+x3_1+x4_1+x5_1)/5)*148)/100); // x 149 E-9 convert to 2.479V
}
unsigned long read_ADC2(void)
{
char k2;
long n2;
n2= 0;
ADC_CS2 = 0;
Delay_us(10);
for(k2=0; k2<32; k2++)
{
n2<<= 1;
ADC_SCK = 1;
n2 |= ADC_SDO;
ADC_SCK = 0;
}
ADC_CS2 = 1;
n2&=0x01fffffff; // maskout sign bit
n2>>=4; // get 24-bit conversion result
return n2;
}
unsigned long filter_ADC2(void)
{
x5_2 = x4_2;
x4_2 = x3_2;
x3_2 = x2_2;
x2_2 = x1_2;
x1_2 = read_ADC2();
return ((((x1_2+x2_2+x3_2+x4_2+x5_2)/5)*148)/100); // x 149 E-9 convert to 2.479V
}
unsigned long read_ADC3(void)
{
char k3;
long n3;
n3= 0;
ADC_CS1 = 0;
Delay_us(10);
for(k3=0; k3<32; k3++)
{
n3<<= 1;
ADC_SCK = 1;
n3 |= ADC_SDO;
ADC_SCK = 0;
}
ADC_CS3 = 1;
n3&=0x01fffffff; // maskout sign bit
n3>>=4; // get 24-bit conversion result
return n3;
}
unsigned long filter_ADC3(void)
{
x5_3 = x4_3;
x4_3 = x3_3;
x3_3 = x2_3;
x2_3 = x1_3;
x1_3 = read_ADC3();
return ((((x1_3+x2_3+x3_3+x4_3+x5_3)/5)*148)/100); // x 149 E-9 convert to 2.479V
}
unsigned long read_ADC4(void)
{
char k4;
long n4;
n4= 0;
ADC_CS4 = 0;
Delay_us(10);
for(k4=0; k4<32; k4++)
{
n4<<= 1;
ADC_SCK = 1;
n4 |= ADC_SDO;
ADC_SCK = 0;
}
ADC_CS4 = 1;
n4&=0x01fffffff; // maskout sign bit
n4>>=4; // get 24-bit conversion result
return n4;
}
unsigned long filter_ADC4(void)
{
x5_4 = x4_4;
x4_4 = x3_4;
x3_4 = x2_4;
x2_4 = x1_4;
x1_4 = read_ADC4();
return ((((x1_4+x2_4+x3_4+x4_4+x5_4)/5)*148)/100); // x 149 E-9 convert to 2.479V
}
void main() {
UART1_Init(9600);
TRISA7_bit = 0;
TRISG6_bit = 0;
TRISG7_bit = 1;
TRISE4_bit = 0;
TRISG9_bit = 0;
TRISB3_bit = 0;
CHECON = 0x32;
AD1PCFG = 0xFFFF;
while(1){
d1 = read_ADC1();
sprintf(buffer1,"%08ld V1_",d1); //0xe4 x0.1%cV
UART_Write_Text(buffer1);
Delay_ms(1000);
d2 = read_ADC2();
sprintf(buffer2,"%08ld V2_",d2); //0xe4 x0.1%cV
UART_Write_text(buffer2);
Delay_ms(1000);
d3 = read_ADC3();
sprintf(buffer3,"%08ld A1_",d3); //0xe4 x0.1%cV
UART_Write_text(buffer3);
Delay_ms(1000);
d4 = read_ADC4();
sprintf(buffer4,"%08ld A2_\r\n",d4); //0xe4 x0.1%cV
UART_Write_text(buffer4);
Delay_ms(1000);
}
}
Last edited by a moderator: