mikrocontroller.net

Forum: Compiler & IDEs Max7313 I2C Probleme.


Autor: KeyOz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stephan W. (sir_wedeck)
Datum:

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

Stephan

Autor: KeyOz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: KeyOz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
dies geht bei dir nicht!
// send device address
  TWDR = address;
  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

Autor: KeyOz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.