Forum: Mikrocontroller und Digitale Elektronik Hilfe, I2C


von Markus (Gast)


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

von Andreas Hesse (Gast)


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

von Poe (Gast)


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.

von Markus (Gast)


Lesenswert?

Danke, hab die Pins gewechselt und jetzt klappts

von AxelR. (Gast)


Lesenswert?

...
Danke, hab die Pins gewechselt und jetzt klappts
...

sagts du uns, wohin?
Lag's am Analog Comarator?
Hatte ein Abschalten des AC's nichts geholfen?

Danke
Axel

von Markus (Gast)


Lesenswert?

Ich hab auf die Pins PD6 und PD7 gewechselt.
Abschalen des AC's hab ich nicht probiert.

Gruß
M

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.