Forum: Compiler & IDEs Max7313 I2C Probleme.


von KeyOz (Gast)


Lesenswert?

Hallo,

seit Tagen kämpfe ich nun schon damit, einen Max7313 (16 Port 
PWM-Treiber  I2C ansteuerbar) mit einem ATMEGA 328p oder ATMEGA 88 
anzusprechen.
Ich habe die I2C-Lib von Peter Fleury und auch diverse anderes versucht, 
doch es will einfach nicht klappen.

Wenn ich die Addresse des Bausteines schreibe, bekomme ich im TWSR immer 
den Status NACK zurück.

An der Hardware kann es eigentlich nicht liegen. Ich habe hier ein 
Arduino-Beispielprogramm, wenn ich das auf den ATMEGA schreibe, dann 
funktioniert es.

Vielleicht hat ja jemand mit diesem MAX7313 schon mal etwas gemacht, und 
kann mir vielleicht sagen, ob es da irgend etwas besonderes zu beachten 
gibt bei der I2C-Geschichte, oder mir mal ein kleines Beispielprogramm 
zur Verfügung stellen..?

Danke.

von Stephan W. (sir_wedeck)


Lesenswert?

Hi
wie ist der MAX7313 beschaltet: AD0...AD2 ???
Welche Device-Adr. haste genommen???

Stephan

von KeyOz (Gast)


Lesenswert?

Hallo nochmal,

AD0 und AD2 sind auf GND, AD1 auf SCL. Das ergibt Addresse 0x10.

Wie gesagt wenn ich die Arduino-Libs benutze, dann geht es, nehm ich 
aber die I2C-Libs von Peter Fleury ohne den ganze Arduino-Overhead dann 
gehts nicht. Hardware ist alles das selbe und die Funktionsaufrufe auch. 
Nur eben die unterschiedliche Lib.

von KeyOz (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal als Anhang noch mein Quellcode. Die I2C-Teile sind aus der Lib 
mal direkt übernommen. Aber auch wenn ich die Lib einbinde geht es 
nicht.

von Stephan W. (sir_wedeck)


Lesenswert?

Hi
dies geht bei dir nicht!
1
// send device address
2
  TWDR = address;
3
  TWCR = (1<<TWINT) | (1<<TWEN);

da deine Adresse FALSCH ist!!!!
Laut Definition von I2C bzw TWI ist die Adresse 7Bit lang richtig, aber 
wird beim Senden um 1 nach links verschoben!
Dein IC hat die Adr. von 0x10 richtig, aber das ganze mal 2 ist 0x20.
(Siehe DB vom MAX Figure 6:Slaveadress)

In den I2C-Funktionen muss als Adresse nicht die Adr. des ICs eingegeben 
werden, sondern das Commandbyte!!! ((Adr << 1) + RW)

Stephan

von KeyOz (Gast)


Lesenswert?

Hallo,

vielen Dank. Problem gelöst.. Brett vor dem Kopf entfernt. :)

Danke.

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.