- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: PCA9635 I2C Ansteuerung

  1. #1

    PCA9635 I2C Ansteuerung

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    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.

  3. #3
    Joa gut, nur wie kann ich einzelne Register beschreiben? Wie sende ich die Registernummer?

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    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

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    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

  6. #6
    Danke für die schnelle kompetente Hilfe.. Hab es hin bekommen..

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test