Arduino Uno + 2x TLC59116

Hallo, ich bin völlig neu in der Arduino Entwicklungsumgebung und kenne mich leider auch nicht mit C aus.
ich will zwei TLC59116 über I2C zum Ansteuern von LEDs an meinem Arduino UNo betreiben, doch irgendwas läuft bei der Initialisierung schief, den die loop-Sequenz wird gar nicht erst gestartet (Nur wenn beide über SCL und SDA mit Arduino verbunden sind). ein TLC funktioniert tadellos mit dem Code. Ich hoffe jemand kann mir helfen. Danke!!
mfg mdeisen
TLC59116 Datasheet: Bauteil: TLC59116 - Mikrocontroller.net
und hier mein Code:

#include <Wire.h>


// Setup wird zu Begin aufgerufen und initialisiert den TLC59166 mit Defaultwerten
// Die Werte können beliebig geändert werden 
void setup()
{
  init_tlc(B1100001);
  init_tlc(B1100000);
}
void init_tlc(int adress)
{
  Wire.begin();     //I2C-Start
  Wire.beginTransmission(adress); // TLC59116 Slave Adresse ->C0 hex
  Wire.write(0x80);  // autoincrement ab Register 0h

  Wire.write(0x00);  // Register 00 /  Mode1  
  Wire.write(0x00);  // Register 01 /  Mode2 

  Wire.write(0x00);  // Register 02 /  PWM LED 1    // Default alle PWM auf 0
  Wire.write(0x00);  // Register 03 /  PWM LED 2    
  Wire.write(0x00);  // Register 04 /  PWM LED 3
  Wire.write(0x00);  // Register 05 /  PWM LED 4
  Wire.write(0x00);  // Register 06 /  PWM LED 5
  Wire.write(0x00);  // Register 07 /  PWM LED 6
  Wire.write(0x00);  // Register 08 /  PWM LED 7
  Wire.write(0x00);  // Register 09 /  PWM LED 8
  Wire.write(0x00);  // Register 0A /  PWM LED 9
  Wire.write(0x00);  // Register 0B /  PWM LED 10
  Wire.write(0x00);  // Register 0C /  PWM LED 11
  Wire.write(0x00);  // Register 0D /  PWM LED 12
  Wire.write(0x00);  // Register 0E /  PWM LED 13
  Wire.write(0x00);  // Register 0F /  PWM LED 14
  Wire.write(0x00);  // Register 10 /  PWM LED 15
  Wire.write(0x00);  // Register 11 /  PWM LED 16  // Default alle PWM auf 0

  Wire.write(0xFF);  // Register 12 /  Group duty cycle control
  Wire.write(0x00);  // Register 13 /  Group frequency
  Wire.write(0xAA);  // Register 14 /  LED output state 0  // Default alle LEDs auf PWM
  Wire.write(0xAA);  // Register 15 /  LED output state 1  // Default alle LEDs auf PWM
  Wire.write(0xAA);  // Register 16 /  LED output state 2  // Default alle LEDs auf PWM
  Wire.write(0xAA);  // Register 17 /  LED output state 3  // Default alle LEDs auf PWM
  Wire.write(0x00);  // Register 18 /  I2C bus subaddress 1
  Wire.write(0x00);  // Register 19 /  I2C bus subaddress 2
  Wire.write(0x00);  // Register 1A /  I2C bus subaddress 3
  Wire.write(0x00);  // Register 1B /  All Call I2C bus address
  Wire.write(0xFF);  // Register 1C /  IREF configuration  
  Wire.endTransmission();  // I2C-Stop
}

Ich verstehe Dich nicht was Du sagen willst.
Du kannst mehrere TLC59116 am I2C Bus hängen mußt aber jeden über die Eingänge A0 bis A3 eine andere Adresse geben und die Initialisation und Daten für jeden getrennt senden.
Grüße Uwe

Erstmal danke für die Antwort.
Ich habe denen TLC59116 zwei unterschiedliche Adressen zugeordnet (einmal A0 und einmal gar keine Verbindung) so müsste ich doch dann zwei Adressen haben: B1100000 und B110001 oder nicht? (ich habe es auch schon mit B1100010 und B110001 versucht hat aber auch nicht funktioniert)
Mit der init_tlc Funktion initialisiere ich ja den TLC59116, indem ich dieser Funktion die zugehörige Adresse des TLCs übergebe. Und in setup Funktion werden ja zwei diese Initialisierungen für beide TLCs angestoßen (oder nicht!?)

Nein Eingänge müssen entweder auf Masse oder auf + Versorgungsspannung geschaltet sein. Nur manchmal haben sie interne Pullup oder Pulldown-Widerstände oder der Zustand ohne Beschaltung ist explizit erlaubt (siehe Datenblatt).

A0 mußt Du auf +5V schalten.

wenn Du zweifel an den Adressen hast nimm den sketch I2C Scanner.
http://playground.arduino.cc/Main/I2cScanner

Grüße Uwe

Mittlerweile habe ich herausgefunden, dass der Fehler doch nicht bei der Initialisierung liegt sondern woanders (trotzdem danke für die Hilfe! :-)). Wenn ich diese Funktion Dim-LED starte passiert gar nichts und der Atmega bleibt dort hängen, wenn ich aber die SET_LED_ALL-Funktion ausführe funktioniert es einwandfrei. (wenn nur ein TLC über I2C am Atmega hängt funktioniert die Funktion Dim_Led tadellos) Können sie mir sagen wo mein Fehler liegt? Danke!

void Set_LED_ALL(int PWM, int adress)
{
  Wire.begin();            // I2C-Start
  Wire.beginTransmission(adress); // TLC59116 Slave Adresse ->C0 hex
  Wire.write(0x82);         // Startregister 02h 
  for (int i=1 ; i < 17; i++){  // 16Bytes (Register 02h bis 11h) schreiben
    Wire.write(PWM);
  }
  Wire.endTransmission();  // I2C-Stop

void Dim_LED(int address)
{ 
  for (int p=1 ; p <255; p++)   // Dimmrichtung heller
  {
    Set_LED_ALL(p,address);      
    delay(1);  // Warten
  } 
  for (int p=255 ; p >0; p--)   // Dimmrichtung dunkler
  {
    Set_LED_ALL(p,address);      
    delay(1);  // Warten
  } 
}
}

Bitte mich nicht siezen ansonsten muß ich Sie auch siezen. :astonished: :astonished:

Da kann ich nicht helfen da ich die ICs nicht habe und ausprobieren kann.
Prinzipiell müssen beide TLC59116 initialisiert und beide getrennt mit Helligkeitswerten geladen werden da sie verschiedene I2C Adressen haben und somit eine Datenübertragung immer nur auf einen der beiden TLCs erfolgt.

Grüße Uwe