Arduino UNO R3: Servo auf PCF8574 Erweiterung ansprechen

Hallo,

habe eine Frage zum oben genannten Thema:

Ich möchte lediglich einen MircoServo (SG90) auf einer PCF8574 Erweiterung ansprechen. Am Servo hängt zur Zeit keine Last.
Die einzelnen Pins kann ich ansprechen / abfragen. Aber Das reicht ja nicht, um einen Servo in einen entsprechenden Winkel zu fahren. Das einzige was ich rausbekomme ist ein kurzes zucken des Servo’s.

Habe schon mit der Servo.h versucht, aber das brachte mich letzten ende auch nicht weiter.

Anbei noch der Code, der natürlich nichts bringt:

#include <Wire.h>
#define PCF8574  0x27   


void setup()
{
  Wire.begin();
}

void loop(){
schreiben_PCF8574(PCF8574, B000001);
delay(5);
schreiben_PCF8574(PCF8574, B000000);   
delay(5);

delay(3000);
}


void schreiben_PCF8574(int I2C_Adresse, byte data)
{
  Wire.beginTransmission(I2C_Adresse);          // Connect
  Wire.write(data);                             // data Byte senden
  Wire.endTransmission();                       // Disconnect
  delay(1);
}  
    

byte lesen_PCF8574(int I2C_Adresse)
{
  byte data = 0xFF;
  Wire.beginTransmission(I2C_Adresse);        // Connect
  Wire.requestFrom(I2C_Adresse, 1);           // ein Byte (8 Bit) anfordern
  if (Wire.available()) data = Wire.read();   // Daten vorhanden?
  Wire.endTransmission(true);                 // Disconnect
  return data; 
  delay(1);
}

Weißt Du welches Signal der Servo erwartet?
Hast Du das am PCF8574 nachgebildet?
Grüße Uwe

Den Servo kannst du ganz nicht mit dem PCF8574 ansteuern.
Den Servo kannst du direkt am Uno anschließen und mit der servo-Lib ansteuern.

Danke für die Antworten: Habe gerade in einem Forum (Servo mit PCF8574 ansteuern - Roboternetz-Forum) folgendes entdeckt. Aber das wurde wohl nicht mit einem Arduino gemacht.

Das PCF funktioniert - habe es mit LED's und Tastern getestet.

Das man den Servo nur am Uno direkt betreiben kann, will ich irgendwie nicht so ganz glauben. Da es ja auch andere Shields mit i2c gibt.

uwefed:
Weißt Du welches Signal der Servo erwartet?
Hast Du das am PCF8574 nachgebildet?
Grüße Uwe

leider weis ich das nicht.

mit der Standart Servo.h bekomme ich auch alles brav hin... nur nicht mit der i2c erweiterung...

herbalmickey:
Das PCF funktioniert - habe es mit LED's und Tastern getestet.

Das man den Servo nur am Uno direkt betreiben kann, will ich irgendwie nicht so ganz glauben. Da es ja auch andere Shields mit i2c gibt.

Von nur steht da auch nicht. Es geht aber nicht mit dem PCF8574.
Du kannst einen PCA9685 Servo Driver nehmen.

Ich halte es für nahezu unmöglich, mit dem PCF8574 ein brauchbares Timing hin zu bekommen!
Und das hat nichts mit Arduino zu tun.

Du meinst sicher den PCA9685 und nicht den PCF8574

Hallo,

Ein Servo braucht ein HIGH mit einer Länge von 0,5 (Nullstellung) - 1,5 (180°) ms und dann ein LOW von 18ms. Das genaue Timing des HIGH Signal ist hier viel wichtiger als die Länge des LOW Signal. Dieses Signal kann ein Arduino selber erzeugen oder ein geeigneter IC wie der PCA9685.
Hier muss das Arduino das Signal am IC generieren, zB: über den I2C Bus.

Es gibt auch s.g SoftwarePWM die allerdings sehr ungenau ist, der PCF8574 kann kein PWM Signal generieren, Du kannst nur den Pin für die bestimmte* Zeit auf HIGH stellen und dann für 18ms auf LOW und dann wieder von vorne.

  • Die HIGH Pegel Zeit bestimmt die Position des Servo Motors, 0,5-1,5 ms.

Wenn Du wirklich den PCF8574 hast kannst Du ein Programm schreiben das dem IC "sagt" setze den Pin X für zB: 1ms auf HIGH und für 18ms auf LOW, ist allerdings sehr ungenau. Ein PCA9685 ist wesentlich genauer.

Grüße,
Donny
PS: Die servo.h lib ist nur für den gebrauch von Servo's am Arduino selbst bestimmt.