Integer array in eeprom eines sensors über i2c schreiben und lesen

Ich habe nun mit dem angehängten Programm versucht nur die Speicheradresse 0x240C zu ändern. Wenn ich aber den Wert (das Array) ausgebe, so fängt er wieder mit denselben Werten an wie früher, als ich als Speicheradresse 0x8000 angegeben habe und zwar beginnend mit 9 172 27039 0 … 0 6657 0 0

Er sollte doch bei 0x240C beim Wert 6657 beginnen?

Den POR auch durchgeführt?

combie: Den POR auch durchgeführt?

Brillianter Hinweis!

power-on reset?

jawoll

Sagt mir leider wieder überhaupt nichts. Einschalten und dann ein reset?

Hi

Ich habe mit den hier verwendeten Modulen/whatever Nichts am Hut - reime mir aber zusammen, daß nach Parameter-Übergabe das Teil 'neu booten' muß.

MfG

postmaster-ino:
… reime mir aber zusammen, daß nach Parameter-Übergabe das Teil ‘neu booten’ muß.

Gut gereimt!

  • Daten ins EEPROM (0x240C) schreiben.
  • POR des Sensors.
  • Daten aus den Registern (0x800D) auslesen.

Ich habe mit den hier verwendeten Modulen/whatever Nichts am Hut

Ich kann leider auch nicht testen....

reime mir aber zusammen, daß nach Parameter-Übergabe das Teil 'neu booten' muß.

Ja! Beim Power On Reset holt sich die Kamera die Konfiguration aus dem EEPROM Bereich.

Danke. Also wurden doch die Werte/der Wert mit meinem Arduino-Programm ins EEPROM auf 0x240C geschrieben aber da ich keinen POR machte nicht ins Register geschrieben. Deshalb lese ich dort noch den alten Wert...

Reicht für den POR einfach die Spannungsversorgung kurz unterbrechen?

Hi

... ich reime weiter ... Wenn die Kamera (ich lerne dazu) diese Möglichkeit bietet, Werte so zu übertragen, wird Sie auch die Möglichkeit bieten, Sich per Befehl resetten zu lassen. Und wenn nicht: Auch Das steht im Datenblatt, wie man die Werte in die Kamera reinbekomme, daß Die sogar angewendet werden.

MfG

stoppi: Reicht für den POR einfach die Spannungsversorgung kurz unterbrechen?

Ja.

Danke für die Antworten…

Ich habe nun versucht, den Wert an der Adresse 0x240C auf 1901 (HEX) mit diesen Zeilen zu ändern:

const uint16_t len = 16;
uint16_t adr = 0x8000;
uint16_t Buffer[len];

#include <Wire.h>
#include "MLX90640_API.h"
#include "MLX90640_I2C_Driver.h"


void setup() {
  // put your setup code here, to run once:
    Wire.begin();
    Wire.setClock(400000); //Increase I2C clock speed to 400kHz
    
    Serial.begin(9600);
    
    
    MLX90640_I2CRead(0x33, adr, len, Buffer);
    for (int n = 0; n < len; n++)
    {
      Serial.print(n); Serial.print(": "); Serial.println(Buffer[n], HEX);
    }

    MLX90640_I2CWrite(0x33, 0x240C, 6401);

    delay(4000);

    MLX90640_I2CRead(0x33, adr, len, Buffer);
    for (int n = 0; n < len; n++)
    {
      Serial.print(n); Serial.print(": "); Serial.println(Buffer[n], HEX);
    }
    
}

void loop() {
  // put your main code here, to run repeatedly:

}

Den PoR habe ich so versucht, dass ich während des delay(4000) die Spannungsversorgung kurz unterbreche.

Der Wert an der Stelle 0x800D bleibt aber 1A01 (HEX) anstelle der erwünschten 1901…

Weiß ehrlich gesagt nicht mehr weiter…

MLX90640_I2CWrite(0x33, 0x240C, 6401);

Vielleicht schreit die Funktion nach Hilfe, und keiner hört zu.

const uint16_t len = 16;
uint16_t adr = 0x8000;
uint16_t Buffer[len];

#include <Wire.h>
#include "MLX90640_API.h"
#include "MLX90640_I2C_Driver.h"


void setup() {
  // put your setup code here, to run once:
    Wire.begin();
    Wire.setClock(400000); //Increase I2C clock speed to 400kHz
    
    Serial.begin(9600);
    
    
    MLX90640_I2CRead(0x33, adr, len, Buffer);
    for (int n = 0; n < len; n++)
    {
      Serial.print(n); Serial.print(": "); Serial.println(Buffer[n], HEX);
    }

    MLX90640_I2CWrite(0x33, 0x800D, 6401);    // HEX 1901
    //MLX90640_I2CWrite(0x33, 0x800D, 6657);    // HEX 1A01
    
    delay(4000);

    MLX90640_I2CRead(0x33, adr, len, Buffer);
    for (int n = 0; n < len; n++)
    {
      Serial.print(n); Serial.print(": "); Serial.println(Buffer[n], HEX);
    }
    
}

void loop() {
  // put your main code here, to run repeatedly:

}

Damit kann ich nun den Wert an der Adresse 0x800D von 1901 (HEX) nach 1A01 (HEX) und umgekehrt ändern…

An der Temperaturausgabe (erhalte nach wie vor die Temperaturen “nan”) ändert dies aber noch nichts…

Für mich ergeben sich aber folgende Frage:

  • Warum habe ich beim Schreiben mittels MLX90640_I2CWrite(0x33, 0x800D, 6401); // HEX 1901
    direkt die Adessse 0x800D ansprechen müssen und nicht die mit dieser verknüpfte Adresse 0x200C?