Hilfe, I2C

Gast #110067
Lesenswert?

Hallo Leute,

Ich möchte ein 4 fach dig. Pot. (DS1844) mit einem ATmega8 mit intern
1MHz ansteuern, dazu benutze ich die I2C Library von Peter Fleury. SCL
ist bei mir PD7, SDA an PD6.
Ich hab alle Device Pins des DS1844 auf Masse, dh. mein Controll-Byte
ist 0x50, mei programm sieht folgendermaßen aus:

#include <avr/io.h>
#include "i2cmaster.h"
#define Dev  0x50      // device address of DS1844

int main(void)
{
    unsigned char ret;
    DDRB  = 0xff;
    PORTB = 0x00;
  i2c_init();
        ret = i2c_start(Dev+I2C_WRITE);
    if ( ret ) {
        i2c_stop();
        PORTB= ret;    //Fehler LED leuchtet
    }else {

        i2c_write(0x09);   //Pot. 0
        i2c_write(0x49);   //Pot. 1
        i2c_write(0x89);   //Pot. 2
        i2c_write(0xc9);   //Pot. 3
  i2c_stop();
    }
}

Wenn ich mir die Signale am Oszi anschaue, würd ich sagen der Clock
passt, aber anstatt bei SDA 0x50 (0101 0000) zu haben, wird mir 0100
0010 angezeigt?
Ich verwende das PonyProg und einen Adapter an LPT1.

Wäre super wenn mir jemand helfen kann
Gast #110068
Lesenswert?

Hallo,

ich habe noch nie die Signale nachgemessen. Bisher waren alle
I2C-Bausteine relativ einfach anzusteuern.
Ich nehme an das Du:
- das Timing in der Bilbliothek angepasst hast
- die PINs richtig konfiguriert hast
- Pull Up Widerstände angeschlossen hast

Die Bilblipthek würde ich ausschliessen, die ist vielfach getestet.

PD6 und PD7 sind beim Mega 8 der Analog-Komparator.
Ich hatte mal einen Effekt mit einem I2C-Display, das ab und zu nach
dem Start mal Mist anzeigte. Ein Pin lag an dem PWM-Ausgang des
Controllers. Dann habe ich den PWM Ausgang während der Initialisierung
explizit deaktiviert, und danach ist der Fehler nie wieder aufgetreten.
Vielleicht mal den Komparator explizit abschalten?
Ansonsten Ratlosigkeit...

Gruss
Andreas
Gast #110069
Lesenswert?

sende mal statt 0x50 ein 0x00 oder 0xff und gucke mal ob das was du am
Oszi siehst überhaupt was mit dem zu tun hat was du senden willst. Ich
arbeite leider nur in Assembler, aber ich würde da erst mal prüfen ob
das Register an das ich den Wert übergebe überhaupt das ist welches
tatsächlich rausgeschrieben wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren