Forum: Mikrocontroller und Digitale Elektronik PCA 9533 mit einem UNO ansteuern


von Michael M. (michael89)


Lesenswert?

Hi,
hoffe einer kann mir helfen.

Bin gerade irgendwie zu blöd dem IC(PCA 9533 Pin configuration for SO8) 
zu sagen,dass er beim
Ausgang LED0 - Wert X ( mit Wert mein ich on/off Zeit vom PWM-Signal)
Ausgang LED1 - Wert Y ( "" )

wollte die #include <Wire.h> Bib nehmen.

Kann mir einer ein Codebeispiel schrieben,
dass LED0 mit pwm(x) läuft
 und LED1 mit pwm(y)?

wäre euch sehr dankbar .. steh gerade aufem Schlauch -.-

Datenblatt vom 9533:
https://www.nxp.com/docs/en/data-sheet/PCA9533.pdf


Danke.

MfG
M.V

von Michael M. (michael89)


Angehängte Dateien:

Lesenswert?

Hi,

hier ist der Test-Code.(Anhang)
Wo ist der Fehler? Liegt das an der Wire.h ?

Das Programm sollte eigl. Ausgang-LED0 auf PWM0-Timer setzen. Nur an den 
Ausgang passiert gar nichts. Hoffe einer kann mir Helfen.

A5 = SCL
A4 = SDA

MfG
M.V

von andreasgf (Gast)


Lesenswert?

evtl B vergessen ?

byte data = B00110010; // Dein 8Bit Wert

Gruss
Andreasgf

von Michael M. (michael89)


Lesenswert?

Ja das B fehlte noch. Danke :)

Einstellungen werden immer noch nicht vom PCA9533 übernommen.
Hab mir mittlerweile mir die Signalverläufe auf mein Ozilluskop 
angeschaut.

Wenn ich 1)
  Wire.beginTransmission(add);
  Wire.write(LS0);
  Wire.write(LED);
  Wire.endTransmission();
benutze seh ich nur das erste Datenpaket. Wire.write(LS0) und 
Wire.write(LED) werden nicht mitgesendet.

wenn ich 2):
  Wire.beginTransmission(add);
  Wire.endTransmission();
  Wire.beginTransmission(LS0);
  Wire.endTransmission();
  Wire.beginTransmission(LED);
  Wire.endTransmission();
benutze seh ich alle drei Datenpakete hintereinander. Nur wird die 
"Einstellung" nicht vom PAC9533 übernommen.

wenn ich 3):
  Wire.beginTransmission(add);
  Wire.beginTransmission(LS0);
  Wire.beginTransmission(LED);
  Wire.endTransmission();
benutze seh ich nur das erste Datenpaket.

Bin mir auch ziemlich sicher das die Control Bytes stimmen. Also schick 
ich die Daten nach 2): aber am Ausgang passiert wieder nichts.

hoffe einer kann mir helfen.

p.s
Datenblatt vom 9533:
https://www.nxp.com/docs/en/data-sheet/PCA9533.pdf

MfG
M.V

: Bearbeitet durch User
von andreasgf (Gast)


Lesenswert?

Moin,

schon seltsam !
1.
Verdrahtung i.O ? SDA und SCL nicht vertauscht ?
PullUp Widerstände am Bus nicht vergessen ?

Ist die Adresse richtig ?
Such mal den Bus nach I2C Teilnehmern :
http://playground.arduino.cc/Main/I2cScanner

2.
Versuch mal ein Register vom 9533 zu lesen.

LG

von Wolfgang (Gast)


Lesenswert?

Michael V. schrieb:
> Wenn ich 1)
>   Wire.beginTransmission(add);
>   Wire.write(LS0);
>   Wire.write(LED);
>   Wire.endTransmission();
> benutze seh ich nur das erste Datenpaket.

Und wie sieht das aus? Passt das Adressbyte zu den Angaben im Datenblatt 
(Kap. 6.1 Device address) und kommt vom PCA9533 ein Ack?

Michael V. schrieb:
> Datenblatt vom 9533:
> https://www.nxp.com/docs/en/data-sheet/PCA9533.pdf

Die dauernde Verlinkung des Datenblattes kannst du dir dank der 
Forensoftware sparen, wenn du einmal statt irgendwelchen Zahlen die 
IC-Bezeichnung des PCA9533 passend nennst - dann wird über die 
ForumsDatenbank automatisch ein Link erzeugt.

von Michael M. (michael89)


Lesenswert?

andreasgf schrieb:
> schon seltsam !
  JAAAA

> 1.
> Verdrahtung i.O ? SDA und SCL nicht vertauscht ?
> PullUp Widerstände am Bus nicht vergessen ?
>
Leitungen sind richtig, PullUp vorhanden.

> Ist die Adresse richtig ?
> Such mal den Bus nach I2C Teilnehmern :
> http://playground.arduino.cc/Main/I2cScanner

Das kleine testprogramm sagt mir adresse 0x62 .. schonmal anders wie im 
Datenblatt.


> 2.
> Versuch mal ein Register vom 9533 zu lesen.
Kann die jetzt auch Auslesen aber irgendwie vertrau ich das ganze noch 
nicht so.

Wolfgang schrieb:
> Und wie sieht das aus? Passt das Adressbyte zu den Angaben im Datenblatt
> (Kap. 6.1 Device address) und kommt vom PCA9533 ein Ack?

Wenn ich die richtige Adresse benutzte kann ich auch wieder
>   Wire.beginTransmission(add);
>   Wire.write(LS0);
>   Wire.write(LED);
>   Wire.endTransmission();
benutzen. Er schickt alle 3 Bytes raus. Ja sieht so aus als wenn er ein 
Ack. mit schickt.

Danke das hat mir schonmal ein Stückchen weiter geholfen. Werd mal 
weiter rum spobieren.

p.s hab leider kein flashspeicher zu Hand, sonst würde ich die 
Ozilluskop Bilder mal online stellen.

von Michael M. (michael89)


Lesenswert?

Hi, ich bins nochmal.

kann den jetzt beschreiben und auslesen nur da passiert nichts.

  Wire.beginTransmission(0x62);
  Wire.write(0x11);                  // Hab diese Werte außem Datenbaltt
  Wire.write(0x97);                  // 8.2 Programming example
  Wire.write(0x80);
  Wire.write(0x00);
  Wire.write(0x40);
  Wire.write(0xE1);
  Wire.endTransmission();

Serieller Monitor: Auslesen

0              : Input Register
10010111       : PSC0    ""
10000000       : PWM0    ""
0              : PSC1    ""
1000000        : PWM1    ""
11100001       : LS0     ""

Wenn ich die Betriebsspannung weg nehmen und wieder anklemme und 
auslese:

Serieller Monitor: Auslesen

0              : Input Register
0              : PSC0    ""
10000000       : PWM0    ""
0              : PSC1    ""
10000000       : PWM1    ""
0              : LS0     ""
-----------
Daraus schließe ich das schreiben/lesen Funktioniert.

Irgendwer eine Idee wieso Der PCA9533 nichts ausgibt obwohl die Register 
gesetzt sind ?

von Wolfgang (Gast)


Lesenswert?

Michael V. schrieb:
> Das kleine testprogramm sagt mir adresse 0x62 .. schonmal anders wie im
> Datenblatt.

Im Datenblatt ist für den PCA9533/01 auch 0x62 als I2C Adresse 
angegeben, für den PCA9533/02 0x63.

Wo hast du denn geguckt?
Oder verwechselst du I2C-Adresse und Adressierungsbyte?

von Michael M. (michael89)


Angehängte Dateien:

Lesenswert?

Arbeite gerade das erte mal mit I²C-Bus.
Evtl ist irgendwo nur ein blöder Fehler.


> Im Datenblatt ist für den PCA9533/01 auch 0x62 als I2C Adresse
> angegeben, für den PCA9533/02 0x63.

In welchem Datenblatt hast du geguckt ?

> Wo hast du denn geguckt?
> Oder verwechselst du I2C-Adresse und Adressierungsbyte?

Hab hier geguckt:https://www.nxp.com/docs/en/data-sheet/PCA9533.pdf

Habs mal den Ausschnitt im Anhang gepackt wo ich geguckt hab.

PCA9533/01 slave address:
B 1100 0100 - 64 DEC

von Michael M. (michael89)


Angehängte Dateien:

Lesenswert?

naja.. ich bin mit mein Latein am Ende.

evtl. ist hier ja noch ein lieber Mensch unterwegs der mir dafür ein 
klein Code schreiben kann. Sonst muss ich das Projekt umarbeiten oder 
aufgeben was sehr schade wär.

Kann das sein das ich nur zu blöd bin die richtigen Bytes aus dem 
Datenblatt zu lesen?

Hab nochmal den Code angehängt wie ich das beschreibe und auslese.

Danke an alle die bisher geantwortet haben, sind ja ein Stück weiter 
gekommen.

MfG
M.V

von andreasgf (Gast)


Lesenswert?

Michael V. schrieb:
> Irgendwer eine Idee wieso Der PCA9533 nichts ausgibt obwohl die Register
> gesetzt sind ?

Hast du LED0 bis LED3 auch angeschlossen ?

LG

von Michael M. (michael89)


Lesenswert?

andreasgf schrieb

> Hast du LED0 bis LED3 auch angeschlossen ?
>
> LG

ich Ahne böses -.- ne nur Ozilluskop bisher dran gehalten.

werd ich nachem Abendbrot mal ausprobieren. Danke

MfG
M.V

von Wolfgang (Gast)


Lesenswert?

Michael V. schrieb:
> PCA9533/01 slave address:
> B 1100 0100 - 64 DEC

Das ist nicht die "slave address". Guck mal, auf welche Bits sich in der 
Abbildung die Klammer bezieht. Das R/W-Bit gehört nicht dazu. Die 
I2C-Adresse hat nach Definition nur sieben Bit.

von Michael M. (michael89)


Lesenswert?

Danke für die Hilfe funktioniert jetzt alles.

MfG
M.V

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.