- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 36

Thema: Frage zu RP6 I2C Library: Funktionen der Lib von Peter Fleury?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #5
    Hi Dirk,
    das ist ein MLX90614 Infrarot Thermometer. Hier der Originalcode.

    Folgendes ist jetzt zwar OT, aber egal.
    Wir haben den Sensor schon angeschlossen und ein paar Dinge beobachtet:
    1) Mit dem Code:
    Code:
    I2CTWI_transmitByte(0x5A,0x07);
    I2CTWI_readBytes(0x5A, sensorBuf, 3);
    mlx90614_l = sensorBuf[0];
    Bekommen wir im Terminal ,,I2C ERROR - TWI STATE: 0x20". Wenn wir aber schreiben:

    Code:
    I2CTWI_transmitByte(0x5A<<1,0x07);
    I2CTWI_readBytes(0x5A<<1, sensorBuf, 3);
    mlx90614_l = sensorBuf[0];
    Kommt der Fehler nicht mehr, sensorBuf ist aber immer 255 (egal ob sensorBuf[0], [1] oder [2]).
    Wenn man aber jetzt die I²C Verbindung unterbricht, bleibt der Wert 255 und es gibt keinen Error im Terminal.

    Dass mit dem letzten Codebeispiel kein Error mehr erscheint, ist doch ein gutes Zeichen, oder? Hängt das mit dem kein-Error-ohne-Verbindung irgendwie mit dem Programm bzw. der I²C ISR zusammen, sodass das auch normal ist?

    Wie sollen wir jetzt weiter vorgehen? Der Sensor scheint sich ja angesprochen zu fühlen. Das Problem ist also nur, dass wir momentan mit dem letzten Codeausschnitt noch keine Daten auslesen können... Vielleicht kann man da auch noch weiteres aus dem Originalcode übersetzen, wir wissen nur nicht wie...

    Vielen Dank deshalb weiterhin für Eure Hilfe und
    Viele Grüße
    teamohnename

    EDIT:
    Hier nochmal der Code, der wirklich übersetzt werden muss, wobei das Fett geschriebene die I²C Sache ist:
    Code:
    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;
      
    i2c_start_wait(dev+I2C_WRITE);
    i2c_write(0x07);
      
    // read
    i2c_rep_start(dev+I2C_READ);
    data_low = i2c_readAck(); //Read 1 byte and then send ack
    data_high = i2c_readAck(); //Read 1 byte and then send ack
    pec = i2c_readNak();
    i2c_stop();
      
    //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
    double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
    double tempData = 0x0000; // zero out the data
    int frac; // data past the decimal point
      
    // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01;
      
    float celcius = tempData - 273.15;
    float fahrenheit = (celcius*1.8) + 32;
    Geändert von teamohnename (21.02.2012 um 17:51 Uhr)

Ähnliche Themen

  1. LCD library von Peter Fleury ÄÖÜ fehlt
    Von Woftschik im Forum C - Programmierung (GCC u.a.)
    Antworten: 21
    Letzter Beitrag: 18.04.2009, 14:31
  2. LCD an Mega8 mit Lib von Peter Fleury
    Von Mr Bean im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 04.10.2007, 08:01
  3. 4x20 LCD und Peter Fleury
    Von hansbausn im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 27.01.2006, 17:06
  4. Anfängerproblem mit i2c und Peter Fleury
    Von hansbausn im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 20.11.2005, 17:26
  5. Peter Fleury LCD Lib Problem mit LCD
    Von Cybrix im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 30.09.2005, 10:05

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test