سلام نماز روزه هاتون قبول
من یه مشکل با راه اندازی ad7715 دارم خواهش میکنم کسانی که قبلا از این اسی استفاده کردند راهنمایی کنند
فرکانس کاری من 4MHZ است از ATMEGA32 استفاده کردم پایه های مربوط به ad7715 را به شکل زیر به مگا وصل کردم
#define ADC_RESET PORTD.4
#define ADC_CS PORTD.7
#define ADC_DRDY PIND.3
AD7715 initialization رابه شکل زیر انجام دادم
void adc_init(void)
{ DDRB=0xBF;
//lcd_clear();
// lcd_gotoxy(3,0);
// lcd_putsf("Please wait"
;
ADC_RESET=low;
delay_us(50);
ADC_CS=low;
delay_us(50);
ADC_RESET=high;
delay_us(50);
ADC_CS=high;
delay_ms(3000);
ADC_CS=low;
delay_us(50);
spi( 0x20 );
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
spi( 0x0c);
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
spi( 0x10);
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
spi( 0x44);
delay_us(50);
ADC_CS=high;
// lcd_gotoxy(3,1);
// lcd_putsf("Calibrated"
;
delay_ms(1000);
// lcd_clear();
}
و خواندن 16 بیت از اسی را به شکل زیر انجام دادم
unsigned int read_spi()
{
unsigned result;
while ( ADC_DRDY);
while (! ADC_DRDY );
while ( ADC_DRDY );
delay_us(50);
ADC_CS=low;
delay_us(50);
spi(0x38);
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
result=(unsigned) spi(0)<<8;
delay_us(50);
ADC_CS=low;
delay_us(50);
result|=spi(0);
delay_us(50);
result=(unsigned) ((unsigned long) result);
delay_us(50);
return result;
}
اما متوجه شدم از این خط عبور نمی کند while ( ADC_DRDY); یعنی ADC_DRDY هیچگاه صفر نمی شود پس دیتای آماده ندارد که ارسال کند
از دوستان خواهش دارم راهنمایی کننند
من یه مشکل با راه اندازی ad7715 دارم خواهش میکنم کسانی که قبلا از این اسی استفاده کردند راهنمایی کنند
فرکانس کاری من 4MHZ است از ATMEGA32 استفاده کردم پایه های مربوط به ad7715 را به شکل زیر به مگا وصل کردم
#define ADC_RESET PORTD.4
#define ADC_CS PORTD.7
#define ADC_DRDY PIND.3
AD7715 initialization رابه شکل زیر انجام دادم
void adc_init(void)
{ DDRB=0xBF;
//lcd_clear();
// lcd_gotoxy(3,0);
// lcd_putsf("Please wait"

ADC_RESET=low;
delay_us(50);
ADC_CS=low;
delay_us(50);
ADC_RESET=high;
delay_us(50);
ADC_CS=high;
delay_ms(3000);
ADC_CS=low;
delay_us(50);
spi( 0x20 );
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
spi( 0x0c);
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
spi( 0x10);
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
spi( 0x44);
delay_us(50);
ADC_CS=high;
// lcd_gotoxy(3,1);
// lcd_putsf("Calibrated"

delay_ms(1000);
// lcd_clear();
}
و خواندن 16 بیت از اسی را به شکل زیر انجام دادم
unsigned int read_spi()
{
unsigned result;
while ( ADC_DRDY);
while (! ADC_DRDY );
while ( ADC_DRDY );
delay_us(50);
ADC_CS=low;
delay_us(50);
spi(0x38);
delay_us(50);
ADC_CS=high;
delay_us(50);
ADC_CS=low;
delay_us(50);
result=(unsigned) spi(0)<<8;
delay_us(50);
ADC_CS=low;
delay_us(50);
result|=spi(0);
delay_us(50);
result=(unsigned) ((unsigned long) result);
delay_us(50);
return result;
}
اما متوجه شدم از این خط عبور نمی کند while ( ADC_DRDY); یعنی ADC_DRDY هیچگاه صفر نمی شود پس دیتای آماده ندارد که ارسال کند
از دوستان خواهش دارم راهنمایی کننند
دیدگاه