I2CExamples.project funktioniert nicht

JJoe
2016-04-04
2020-04-30
  • JJoe - 2016-04-04

    Hallo,
    ich habe einen Roboterarm gebaut, der mit RC Servos angetrieben wird. Ich habe ein Python-Programm geschrieben und die Hardware funktioniert. Nun will ich den Arm mit CoDeSys programmieren und versuche erste Schritte mit den mitgelieferten Beispielsprojekten. Das I2C Soft Motion Beispiel funktioniert aber das I2CExamples Programm bringe ich nicht zum Laufen. Was mache ich falsch?

    Joachim

     
  • eschwellinger

    eschwellinger - 2016-04-04

    Hi,
    das muss gehen.
    mit
    sudo raspi-config
    device tree
    i2C
    SPI
    enabled?
    Dann muss das Beispielproject : "c:\Users\<deinwindowsusername>\CODESYS Control for Raspberry PI\3.5.8.10\Examples\SoftMotion Servo Example.project"
    gehen wenn alles korrekt angeschlossen ist, wovon ich ausgehe.
    (Im Gerätebaum alles grün)</deinwindowsusername>

    Grüße
    Edwin

     
  • JJoe - 2016-04-05

    Hallo Edwin,
    vielen Dank für Deine Tips. Leider haben sie mich auch nicht weitergebracht.
    Die Situation ist folgende:
    1. Mit dem Python Programm und dem Adafruit Hat funktionieren alle 6 Servos so wie sie sollen. Das heißt für mich, dass die Hardware ok ist.
    2. Das SoftMotion Servo Example funktioniert mit einem Servo in Port 0 auch.
    3. Ich habe in das I2CExamples Programm noch einen MCP23017 eingefügt (siehe Anhang). Das Einlesen der Eingänge vom 23017 funktioniert auch.

    Leider weiß ich nicht mehr weiter. Hast Du vielleicht noch eine Idee, was ich noch probieren kann?

    Viele Grüße
    Joachim

    IMG: PWM23017.jpg

     
  • JJoe - 2016-04-05

    PS: Welche Funktion hat axEnable im Function_Block AdafruitPwm??

     
  • JJoe - 2016-04-09

    Hallo Edwin,
    Sie hatten Recht mit der Aussage "es muss funktionieren". Nachdem mir einen Oszi besorgt hatte sah ich, dass das PWM-Signal immer 1ms lang war, obwohl beim CoDeSys- Debugging Werte von 1.0 bis 2.0 angezeigt wurden, entsprechend der Programmzeile "Adafruit_PWM.alrPWM[0] := 1.5 + 0.5*SIN(t);". Durch Zufall habe ich mir noch einmal die Beschreibung für alrPWM angesehen. Dort wurde klar angegeben, dass die Werte nur zwischen 0 und 1 (=1ms ... 2ms) liegen sollten. Ob diese Programmzeile nun im Originalbeispiel so gestanden hat, oder zufällig durch mich abgeändert wurde, kann ich nicht mehr beurteilen. Jedenfalls laufen meine Servos jetzt wie ich es mir wünsche.

    Vielen Dank noch einmal für Ihre Unterstützung.

    Joachim

     
  • JJoe - 2016-04-09

    Hallo Edwin,
    man darf den Tag nicht vor dem Abend loben. Von meinen sieben Servos kann ich mit dem I2CExamples Programm nur 4 ansteuern. Die anderen bewegen sich nicht. Kann es sein, dass das Beispielsprojekt nur für 4 Servos angelegt ist? Wenn ja, was kann ich machen um die restlichen Seervos einzubinden?

    Viele Grüße
    Joachim

     
  • eschwellinger

    eschwellinger - 2016-04-11

    Hi,

    wir hatten ne Applikation die 8 verwendet.. das muss gehen.

    Grüße
    Edwin

    IMG: Servos.jpg

     
  • JJoe - 2016-04-13

    Hallo Edwin,
    vielen Dank für die Antwort. Das Soft-Motion Beispiel funktioniert bei mir auch. Ich habe aber Probleme mit dem I2CExamples.project. Ich würde gern das Programm verwenden, um die Servos mit "Adafruit_PWM.alrPWM[0] := 0.5;" einzeln ansprechen zu können. Es lassen sich aber leider nur die ersten vier Servos ansteuern. Danach rührt sich nichts mehr. Wie muss ich das Programm erweitern, um die restlichen Servos (4 ... 6) ansprechenzu können?

    Viele Grüße
    Joachim

     
  • eschwellinger

    eschwellinger - 2016-04-13

    Hallo Joachim,

    versuch es mal so:

    Adafruit_PWM.axEnable[4]:=TRUE;
    Adafruit_PWM.axEnable[5]:=TRUE;
    Adafruit_PWM.axEnable[6]:=TRUE;
    Adafruit_PWM.axEnable[7]:=TRUE;

    Adafruit_PWM.alrPWM[0] := 1.5 + 0.5SIN(t);
    Adafruit_PWM.alrPWM[1] := 1.5 + 0.5
    SIN(t);
    Adafruit_PWM.alrPWM[2] := 1.5 + 0.5SIN(t);
    Adafruit_PWM.alrPWM[3] := 1.5 + 0.5
    SIN(t);
    Adafruit_PWM.alrPWM[4] := 1.5 + 0.5SIN(t);
    Adafruit_PWM.alrPWM[5] := 1.5 + 0.5
    SIN(t);
    Adafruit_PWM.alrPWM[6] := 1.5 + 0.5SIN(t);
    Adafruit_PWM.alrPWM[7] := 1.5 + 0.5
    SIN(t);

    die ersten 4 sind per Default "enabled" so wie es in der Lib aussieht,
    die Lib ist ja ne "Library" d.h du kannst dir jederzeit den CODE anschauen entweder im BibliotheksManager direkt oder mit CODESYS die Bibliothek öffnen.
    finden tut man die hier:
    "c:\Users\<deinwindowsusername>\CODESYS Control for Raspberry PI\3.5.8.10\Libraries\I2C_AdafruitPWM.library" </deinwindowsusername>

    Grüße
    Edwin

    IMG: EnablePWM.jpg

     

    Related

    Talk.ru: 1
    Talk.ru: 2
    Talk.ru: 3
    Talk.ru: 5
    Talk.ru: 7

    • bpalacio - 2020-04-30

      Hello:
      I'm doing a project with an adafruit pwm card to manipulate two DC motors with the L298N driver but I can't get it to work. Do you have an example where you can configure the PWM 0 output.

      Thank you

       
  • JJoe - 2016-04-16

    Hallo Edwin,

    jetzt scheint alles zu funktionieren. Noch einmal herzlichen Dank für Deine Unterstützung!

    Viele Grüße

    Joachim

     

Log in to post a comment.