Forum: Mikrocontroller und Digitale Elektronik Problem mit PCA 9532: LEDs flackern beim Schreiben des LS Registers


von Sven H. (nobody1984)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Ich habe in einer Schaltung einen PCA 9532 verbaut und die 16 LEDs wie 
im Anhang bei LED0 zu sehen angeschlossen.

I2C Ansteuerung erfolgt von einem mega168. Soweit funktioniert auch fast 
alles prima, nur:

Der PCA hat ja vier 8bit-Register (LS0 bis LS3) in denen man festlegt, 
welche LEDs an/aus sind oder zu PWM0 oder PWM1 gehören. Wenn ich z.B. 
die LED0 im Sekundentakt an/aus toggle, blitzen die anderen 3 LEDs (LED1 
bis LED3) auf, wenn der neue Wert via I2C in das LS0 Register 
geschrieben wird.

Hatte erst gedacht, der PCA ist hin, aber ist nach einem Tausch genau 
das gleiche Fehlerbild.

Hatte jemand schonmal das gleiche Fehlerbild und/oder eine Idee woran es 
liegen könnte?

Gruß,
Sven

von Peter D. (peda)


Lesenswert?

Du betreibst ja die LEDs entgegen dem Datenblatt, könnte also durchaus 
sein, daß das Nebeneffekte hat.
Die LEDs müssen bei Low an gehen!


Peter

von Sven H. (nobody1984)


Lesenswert?

Ja, der Transistor invertiert das Signal des PCA. Ist aber erforderlich, 
weil der PCA nur bis 200mA (und max. 25mA pro Kanal) spezifiziert ist.

Inwiefern könnte das denn problematisch sein? Der PCA hat ja Open-Drain 
Ausgänge ohne Pull-Up, so wie ich das sehe. Kann also nur nach Gnd 
ziehen. Daher dann ein externer Pullup R40. Der PCA "sieht" ja 
eigentlich auch nur den R40 dann als Last. 10k ist dann zwar kein großer 
Strom, aber von einem Mindeststrom für jeden Kanal lese ich im 
Datenblatt nichts.

von Peter D. (peda)


Lesenswert?

Was sendest Du denn genau, wenns flackert?

Es gehört natürlich ins Datenblatt, wenn die 3 anderen Ausgänge kurz auf 
high gehen.
Das dann die LEDs kurz aus gehen, sieht man nicht.
Wenn sie aber durch die Invertierung aufblitzen, stört das schon.

Wenns um den Strom geht, dann nimm nen pnp in Kollektorschaltung.
Aber die 590R kann der Chip noch treiben.


Peter

von Sven H. (nobody1984)


Lesenswert?

Hm, als ich jetzt rausgesucht habe, was und wie ich genau Sende ist mir 
was aufgefallen... sieht mir nach Copy-Paste-Fehler aus. Kann mir das 
Fehlerbild damit aber auch nicht so richtig erklären:

In der main() sende quasi im Wechsel (Sekundentakt) folgende Werte:
led_driver_set(DEV_ALL, LS0, 0b01010101); und
led_driver_set(DEV_ALL, LS0, 0b01010100);

Also LED1 bis LED3 sind lt. Datenblatt AN, werden aber durch den 
Transistor invertiert, also aus.
LED0 blinkt.

Die led_driver_set() tut folgendes:
1
void led_driver_set(char device, unsigned char control_reg, unsigned char value)
2
{
3
  char i;
4
5
  if(device == DEV_ALL) // Alle LED-Treiber
6
  {
7
    for(i = 0; i < NUMBER_OF_DEVICES; i++)
8
    {
9
      i2c_start();
10
      i2c_send((FIRST_LED_DRIVER_ADR + i)<<1);
11
      i2c_send(control_reg);
12
      i2c_send((FIRST_LED_DRIVER_ADR + i)<<1);
13
      i2c_send(value);
14
      i2c_stop();
15
    }
16
  }
17
  else // Nur ein LED-Treiber
18
  {
19
    i2c_start();
20
    i2c_send((FIRST_LED_DRIVER_ADR + device)<<1);
21
    i2c_send(control_reg);
22
    i2c_send((FIRST_LED_DRIVER_ADR + device)<<1);
23
    i2c_send(value);
24
    i2c_stop();
25
  }
26
}

Nach dem Senden control_reg Sende ich quasi nochmal die I2C Adresse. Das 
macht wohl keinen Sinn, jedoch dürfte dann doch nichts blinken. 
Zumindest nicht an LED0, maximal an LED4.

Nunja, jedenfalls habe ich erstmal einen Ansatzpunkt... Danke erstmal! 
Werde dann mal schreiben was es gegeben hat. Schaff es aber heute 
vermutlich nicht mehr!

...zum Strom, ja der LED Strom passt bei einer LED. Sind aber alle LEDs 
an überschreite ich die 200 mA. (Vcc = 12 V)

Danke

von Sven H. (nobody1984)


Lesenswert?

Ah, vielleicht noch eine Vermutung.

Wenn beim Schreiben der Registerpointer im PCA nicht inkrementiert wird 
schreibe ich quasi erst meine Adresse ins Register, die LEDs gehen an... 
dann schreib ich sofort meinen eigentlichen Wert ins Register und die 
LEds gehen wieder aus. Man sieht das quasi als Blitzen...

Das könnte es sein! Wie gesagt, ich werde Bericht erstatten.

von Sven H. (nobody1984)


Lesenswert?

Hallo!

Fehler ist beseitigt! Es lag -wie vermutet- daran, dass zweimal die 
Adresse gesendet wurde!

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.