www.mikrocontroller.net

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


Autor: Sven H. (nobody1984)
Datum:
Angehängte Dateien:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Sven H. (nobody1984)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Sven H. (nobody1984)
Datum:

Bewertung
0 lesenswert
nicht 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:
void led_driver_set(char device, unsigned char control_reg, unsigned char value)
{
  char i;

  if(device == DEV_ALL) // Alle LED-Treiber
  {
    for(i = 0; i < NUMBER_OF_DEVICES; i++)
    {
      i2c_start();
      i2c_send((FIRST_LED_DRIVER_ADR + i)<<1);
      i2c_send(control_reg);
      i2c_send((FIRST_LED_DRIVER_ADR + i)<<1);
      i2c_send(value);
      i2c_stop();
    }
  }
  else // Nur ein LED-Treiber
  {
    i2c_start();
    i2c_send((FIRST_LED_DRIVER_ADR + device)<<1);
    i2c_send(control_reg);
    i2c_send((FIRST_LED_DRIVER_ADR + device)<<1);
    i2c_send(value);
    i2c_stop();
  }
}

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

Autor: Sven H. (nobody1984)
Datum:

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

Autor: Sven H. (nobody1984)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

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

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.