PCA9685 auf externen Takt unschalten

Hallo,
ich benutze in meinem Modelleisenbahnprojekt mehrere PCA9685 die dann über L298 Module die Geschwindigkeit der Locks regeln. Wenn dann ein Zug auf einen Übergang zwichen Pca Modul1 und Pca Modul2 kommt, dann trifft er auf das gleiche Pwmmuster, aber mit unterschiedlichem Timing.
Deshalb möchte ich die PCA Module auf externen Takt umstellen und dann mit einen gemeinsamen Taktsignal versorgen. Mechanisch und elektrisch ist das Problem gelöst,
Aber mit der Umstellung im Mode1 Register komme ich einfach nicht zurecht.
In der Adafruit Lib. wird zwar auf das mode1 Register zugegriffen um einen Reset auszuführen, aber ich denke das es hier auch möglich sein Müsste die Bits für Externen Takt zu setzen. und hier ist mein Problem schon wieder: Wie geht das? ich kapiere es einfach nicht! Leider ist mein Englisch auch nicht das beste, so das ich mit der Erklärung im Datenblatt des PCA nicht zurechtkomme.
Danke jetzt schon für eure Tipps...
Herbert

Hallo Herbert,
ist der externe Takt denn auf der Platine herausgeführt oder verwendest Du eigene Platinen? Wenn "ja" könntest Du in Adafruit_PWMServoDriver.cpp anstelle

void Adafruit_PWMServoDriver::reset(void) {
 write8(PCA9685_MODE1, 0x0);
}

die im Datenblatt (Table 5. MODE1 - Mode register 1 (address 00h) bit description) vorgeschriebene Sequenz für Bit 6 übertragen. Also erst Bit 4, dann Bit 6.

Theoretisch könnte es so gehen, praktisch kann ich es mangels IC nicht probieren.

Damit willkommen im Forum!

Danke Agmue, ich verwende Module aus der Bucht, wobei der Ext.Clock pin auf ein Pad mit Masseverbindungen herausgeführt ist. Die Verbindungen zu trennen und einen Anschluß herzustellen ist kein Problem (gelöst).
Und jetzt mein Aber:
Wie macht man die erforderliche Umschaltung in der CCp? mein Englisch reich dafür einfach nicht aus....

Herby01:
Wie macht man die erforderliche Umschaltung in der CCp? mein Englisch reich dafür einfach nicht aus....

Ich würde dies versuchen:

void Adafruit_PWMServoDriver::reset(void) {
 write8(PCA9685_MODE1, 0x10);
 write8(PCA9685_MODE1, 0x40);
}

Danke, ich werde das mal versuchen wenn ich dann wieder an der Anlage bastele..

Hallo, leider funktioniert das nicht, Der intene Takt wird nicht ausgeschaltet!

Bitte um Hilfe...

Danke für Lösungsvorschläge. Ich habe das Problen gelöst.

in der Adafruit_PWMServoDriver.ccp habe ich folgend Änderung vorgenommen

void Adafruit_PWMServoDriver::reset(void) { // Externen Clock
write8(PCA9685_MODE1, 0x10);
delay(10);
write8(PCA9685_MODE1, 0x50);
delay(1000);
write8(PCA9685_MODE1, 0x0);
}

Herbert

Crossposting ist nicht immer gut.

Gruß Tommy

Hallo Herbert,
danke für die Rückmeldung :slight_smile: