پاسخ : کتابخانهآای برای چیپ 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; }
دیدگاه