PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PCA9635 I2C Ansteuerung



led_freak
31.08.2010, 00:07
Hallo leute,

bin ein ziemlicher Neuling in dem Bereich und benötige Hilfe bei der Ansteuerung von 2 PCA9635 über I2C..

Controller:
ATMega32 16AU (16 MHz Quarz)
Adressen der I2C-Slaves:
W_PCA9635_0 = &H40
R_PCA9635_0 = &H41
W_PCA9635_1 = &H42
R_PCA9635_1 = &H43

Muss ich die Control Register immer beschreiben, oder reicht es das einmal zu tun?

Danke schonmal

Kampi
31.08.2010, 07:52
Soweit ich das im Datenblatt richtig gelesen habe, reicht es wenn du das Register 1x beschreibst, weil die Daten dann im Controll-Register gespeichert werden.

led_freak
31.08.2010, 09:04
Joa gut, nur wie kann ich einzelne Register beschreiben? Wie sende ich die Registernummer?

Kampi
31.08.2010, 09:29
Schau mal auf Seite 21 von dem Datenblatt
hier: http://www.nxp.com/documents/data_sheet/PCA9635.pdf

Dort siehst du einen Punkt der heißt Bus transactions. Dort siehst du wie du vorgehen musst wenn du einzelne Register beschreiben willst.
Erst sendest du ein I2C-Start. Danach schreibst du per I2C-Write die Adresse des Slaves auf den Bus (die Schreibadresse also mit 0 am Ende).
Nun wartest du auf ein Ack vom Slave. Nach dem Ack geht es weiter mit den 3 Bits fürs Auto-Increment. Je nachdem wie du das haben willst musst du die Bits utnerschiedlich setzen. Siehe dazu Seite 7 des Datenblattes. Die nächsten 5 Bits des Bytes sind dann die Adressen für das Register was du ansprechen willst. Danach wartest du wieder auf ein Ack vom Slave und dann sendest du deine Daten (1 Byte) und wartest erneut auf ein Ack. Wenn danach noch weitere Daten kommen sollten sendest du erneut 1 Byte ansonsten machst du ein I2C-Stop.
Fertig sieht das etwa so aus (musst du noch anpassen ist nur ein Schaubild):

I2C Start Startbefehl
I2Cw &H40, Ack Slaveadresse mit Ack
I2Cw 000 00001 Registeradresse, 3x0 für Auto-Increment aus und 00001 für Register D0
I2Cw Byte 1 Byte senden
I2C Stop Stop

021aet04
31.08.2010, 09:35
Du musst als erstes die Schreibadresse schreiben. Danach musst du das controllregister schreiben und danach. Bei diesem Link http://www.nxp.com/documents/data_sheet/PCA9635.pdf Auf Seite 21 ist sind die ist die Fig.11 ist der Schreibzyklus beschrieben.
Als Beispiel.

&H40 Schreibadresse
&H02 Register PWM 0
&HFF PWM 0 auf Maximum stellen

Edit: Da war einer schneller.

MfG Hannes

led_freak
01.09.2010, 08:36
Danke für die schnelle kompetente Hilfe.. Hab es hin bekommen..