پاسخ : کتابخانهآای برای چیپ AD7780-AD7730
سلام
من با این کد این آی سی رو درایو کردو و زمانی که به ورودیش صفر ولت میدم صفر رو ارسال میکنه اما زمانیکه ورودی بیش از صفر میدم خروجی های غلط ارسال میشه.
سلام
من با این کد این آی سی رو درایو کردو و زمانی که به ورودیش صفر ولت میدم صفر رو ارسال میکنه اما زمانیکه ورودی بیش از صفر میدم خروجی های غلط ارسال میشه.
کد:
// AVR Core Clock frequency: 16.000000 MHz
#include <mega16.h>
#include <alcd.h>
#include <stdio.h>
#include <spi.h>
#include <delay.h>
#include <stdlib.h>
#define ADC_RESET PORTB.3
#define ADC_CS PORTB.4
#define ADC_DRDY PINB.2
#define high 1
#define low 0
void adc_init(void);
unsigned int read_spi();
void main(void)
{
float resultf;
PORTB=0x00;
DDRB=0xB8;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 1000.000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: High
// SPI Data Order: MSB First
SPCR=0x5D;
SPSR=0x00;
lcd_init(16);
adc_init();
while (1)
{
resultf = read_spi();
printf("Data: %d\r",resultf);
delay_ms(500) ;
}
}
void adc_init(void)
{
printf("Please wait\r");
ADC_RESET=low;
ADC_CS=low; //Set low to AD7715 chip select low pin
ADC_RESET=high; //Set high to AD7715 reset low pin
ADC_CS=high;
delay_ms(3000);
ADC_CS=low;
spi( 0x10 );
ADC_CS=high;
ADC_CS=low; //Communications Register
spi( 0x7C); //250Hz update rate
ADC_CS=high; //Setup Register info here
printf("Calibrated\r");
delay_ms(1000);
}
unsigned int read_spi()
{
unsigned result;
while ( ADC_DRDY);
while (! ADC_DRDY );
while ( ADC_DRDY );
ADC_CS=low;
spi(0x38);
ADC_CS=high;
ADC_CS=low;
result=(unsigned) spi(0)<<8;
ADC_CS=low;
result|=spi(0);
result=(unsigned) ((unsigned long) result);
return result;
}










دیدگاه