Fokussieren wir mal diesen Design-Hinweis:
1 | which must not be changed or deleted
|
und
1 | it is highly recommended to read-out
|
2 | the complete byte,perform bit-slicing and write back the complete byte
|
Damit dürftest du mit deiner Aktion
1 | i2c_init(); // Bus initialisieren
|
2 | i2c_write(0x14); // Register auswählen
|
3 | i2c_write(0x06); // Daten reinschreiben
|
4 | i2c_stop(); // Busverbindung beenden
|
Genau das gemacht haben was niemals hätte passieren dürfen:
du hast auf die oberen bits einfach Nullen geschrieben.
Besser wäre es entsprechend dem Datenblatt, erst das Register zu lesen,
diesen Wert zu ändern, und dann wieder zurückzuschreiben.
1 | uint8_t r14:
|
2 |
|
3 | i2c_init(); // Bus initialisieren
|
4 | i2c_write(0x14); // Register auswählen
|
5 | r14 = i2c_read(); // Daten auslesen -- wie auch immer diese funktion
|
6 | i2c_stop(); // Busverbindung beenden
|
7 |
|
8 | r14 &= 0xE0; // obere Bits behalten
|
9 | r14 |= 0x06; // Daten dazu
|
10 |
|
11 | i2c_init(); // Bus initialisieren
|
12 | i2c_write(0x14); // Register auswählen
|
13 | i2c_write(r14); // Daten reinschreiben
|
14 | i2c_stop(); // Busverbindung beenden
|
Allerdings sind die schwankenden Werte doch eigenartig...
Lies doch mal das Versionsregister 0x01 (al_version und ml_version) aus.
Bekommst du dort richtige und stabile Werte?
BTW:
>... habe.in ...
>... ist,dass ...
Mach doch bitte nach Satzzeichen ein Leerzeichen, das erhöht die
Lesbarkeit (mal abgesehen von der Groß- u. Kleinschreibung) ungemein.
EDIT:
> nach dem Auslesen des Registers und Ändern gleich
> einen write-Befehl anschließen kann
Probiers mal mit einem Repeated-Sart...
Ist dein i2c_init() das selbe wie ein i2c_start()?
1 | /*************************************************************************
|
2 | Initialization of the I2C bus interface. Need to be called only once
|
3 | *************************************************************************/
|
4 | void i2c_init(void)
|
5 | :
|
6 | :
|
7 |
|
8 | /*************************************************************************
|
9 | Issues a start condition and sends address and transfer direction.
|
10 | return 0 = device accessible, 1= failed to access device
|
11 | *************************************************************************/
|
12 | unsigned char i2c_start(unsigned char address)
|
13 | :
|