mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Datenauslesen Probleme


Autor: D. R. (misterdimi1992)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine Kommunikation mit dem TSL45315 und dem ATMEGA32 
hergestellt und habe Probleme beim Auslesen der LOWDATA und HIGHDATA.

Meine Problematik ist das ich die ID des Slaves auslesen kann und mir 
dieser auch die erwartete Bitfolge rausgibt.(Bei einfügen von IC_PART in 
die itoa Funktion // 10100000) Also steht eine Verbindung zwischen 
Master und Slave.

Doch beim Auslesen der Datenregister kommt immer eine Ständige "0". 
Sowohl beim einzelnen Auslesen der Datenregister oder LIGHT_LEVEL. Laut 
meinem Kenntnis stand müsste die Protokoll-abfolge richtig sein? Oder 
irre ich mich in einem Punkt?

Kennt jemand diese Problematik?

Vielen Dank!
#include  <avr/io.h>
#define    F_CPU 8000000
#include  <util/delay.h>
#include  <stdlib.h>
#include  "i2cmaster.h"
#include  "lcd-routines.h"

// sensor registries

#define REG_CONTROL    0x00
#define REG_CONFIG    0x01
#define REG_DATALOW    0x04
#define REG_DATAHIGH  0x05
#define TSL45315    0x52 // Normally 0x29shift << left to get LSB free for i2cmaster lib
#define REG_ID      0x0A


  
uint8_t      ID_PART;
uint16_t    LIGHT_LEVEL;
uint8_t      DATAHIGH, DATALOW;

TALOW;
char      cBuffer[16];


int main(void)
{
    while (1) 
    {  /******lightsensors TSL4531*****/

    lcd_init();      // initialize LCD library
    lcd_clear();    // delete LDC
    i2c_init();      // initialize I2C library


    

    i2c_start(TSL45315+I2C_WRITE);      // set device address and write mode
    i2c_write(0x80|REG_CONTROL);      // select control register
    i2c_write(0x03);            // select normal operation of the device 
    i2c_stop();

    i2c_start(TSL45315+I2C_WRITE);      // set device address and write mode
    i2c_write(0x80|REG_CONFIG);        // select configuration register
    i2c_write(0x00);            // select measurement cycle time of 400ms
    i2c_stop();
    

    i2c_start(TSL45315+I2C_READ);      //set device address and read mode
    DATALOW = i2c_readAck();        // read low byte of device into DATALOW
    DATAHIGH = i2c_readNak();        // read high byte of device into DATAHIGH
    i2c_stop();
      
    i2c_start(TSL45315+I2C_WRITE);      // set device address and write mode
    i2c_write(0x80|REG_ID);          // select ID register
    i2c_stop();

    i2c_start(TSL45315+I2C_READ);      // set device address and read mode
    ID_PART=i2c_readNak();          // read ID of device into ID_PART
    i2c_stop();
    
    LIGHT_LEVEL= ((DATAHIGH<<8) + DATALOW);  // calculation of lux 
    ID_PART=(ID_PART & 0xF0);        // masking the ID_PART; only the four HSB are needed

    lcd_setcursor(0,1);            
    itoa(DATAHIGH,cBuffer,2);
    lcd_string(cBuffer);
    
    _delay_ms(100);


    }// end while(1)
}// end main


Autor: Frank Link (Firma: Flk Consulting UG) (flk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

schau mal hier:

https://github.com/watterott/TSL45315-Breakout/blo...

ganz unten steht, dass Du zuerst
  Wire.beginTransmission(I2C_ADDR);
  Wire.write(0x80|REG_DATALOW);
  Wire.endTransmission();
  Wire.requestFrom(I2C_ADDR, 2); 

durchführen musst.

Gruß
Frank

Autor: Simon92r (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe aktuell das selbe problem beim auslesen und komm momentan nicht 
weiter hast du schon eine Lösung gefunden?

mfg Simon

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.