Thông báo

Collapse
No announcement yet.

i2c: read a byte from ad7745 ::: help

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • i2c: read a byte from ad7745 ::: help

    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.
    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

          
    };

    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
    ĐỪNG KHÓC CHO NHỮNG GÌ ĐÃ QUA, MÀ HÃY CƯỜI CHO NHỮNG ĐIỀU SẮP TỚI!

  • #2
    Nguyên văn bởi quocdat_dtvt Xem bài viết
    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.
    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

          
    };

    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
    có thể nó ở chỗ biến đổi sprintf. để nghiên cứu ic đã nhé.
    Last edited by phuchiepjsc; 02-05-2010, 19:03.

    Comment


    • #3
      thank bác, em đang có viết mà cũng chắng thấy được
      ĐỪNG KHÓC CHO NHỮNG GÌ ĐÃ QUA, MÀ HÃY CƯỜI CHO NHỮNG ĐIỀU SẮP TỚI!

      Comment


      • #4
        có lẽ bác chưa reset con chip. Coi qua datasheet thì thấy nó đòi reset chip mới đọc ghi được
        Đã bỏ nghề về quê chăn gà...

        Comment


        • #5
          nhưng mà reset như thế nào nhỉ? chỉ thấy nó cho địa chỉ thanh ghi là 0xBF?

          Comment


          • #6
            bạn tham khảo cái này xem: http://www.dientuvietnam.net/forums/...ad.php?t=17136
            *** Thành viên không biết gì về điện ***

            Comment


            • #7
              thank các bác rất nhiều, mình đã đọc và ghi được các giá trị vào các thanh ghi trong con sensor. nhưng mà lại có một vấn đề là tại chân EXCA VÀ EXCB đáng nhẽ phải có tín hiệu xung vuông phất ra nhưng mà mình đo chẳng thấy đâu, mình đã thử config lại giá trị của các thang ghi nhưng vẫn không được, bác nào đã làm rồi thì có thể cho mình biết tại sao không? hay chả nhẽ chân đó bị die à( ít khả năng lắm).
              ĐỪNG KHÓC CHO NHỮNG GÌ ĐÃ QUA, MÀ HÃY CƯỜI CHO NHỮNG ĐIỀU SẮP TỚI!

              Comment

              Về tác giả

              Collapse

              quocdat_dtvt Tìm hiểu thêm về quocdat_dtvt

              Bài viết mới nhất

              Collapse

              Đang tải...
              X