mình đang viết code để đọc dữ liệu từ con AD7745 . ban đầu mình chỉ viết code để dọc giá trị một thanh ghi nhưng mà nó cứ ra chả đúng gì cả, mình viết bằng codevision.
mình in ra lcd thì nó ra mỗi số 0 tròn trịa.
các bác giúp mình xem cái này sai ở chõ nào
PHP Code:
#include <mega16.h>
#include <stdio.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
// Declare your global variables here
#define read_address 0x91
#define write_address 0x90
unsigned char dl;
unsigned char a[33];
// read a byte from ad7745
unsigned char read(unsigned char address){
unsigned char data;
i2c_start();
i2c_write(write_address);
i2c_write(address);
i2c_start();
i2c_write(read_address);
data=i2c_read(0);
i2c_stop();
return data;
}
//write byte to ad7745
void write(unsigned char address,unsigned char data){
i2c_start();
i2c_write(write_address);
i2c_write(address);
i2c_write(data);
i2c_stop();
delay_ms(10);
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=Out
// State7=T State6=T State5=T State4=0 State3=T State2=T State1=T State0=0
PORTB=0x00;
DDRB=0x11;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// I2C Bus initialization
i2c_init();
write(0x09,0x23); // thu viet mot gia tri vao thanh ghi 0x09
delay_ms(100);
dl = read(0x08); // doc dia chi tu thanh ghi co dia chi 0x08
sprintf(a,"%8d",dl);
// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_puts(a);
while (1)
{
// Place your code here
};
}
các bác giúp mình xem cái này sai ở chõ nào
Comment