Raspberry Pi 3: GPIOs mit BCM2835-Lib. ansprechen

  • [font="Sans-serif"]Hallo zusammen![/font]
    [font="Sans-serif"]Seit ein paar Tagen habe ich meinen neuen Raspberry Pi 3 (mein erster Raspi).
    [/font]
    [font="Sans-serif"]Er läuft unter "Raspian Jessie" [/font][font="Sans-serif"]("Generated [/font][font="Sans-serif"]2016-05-27" [/font][font="Sans-serif"]v[/font][font="Sans-serif"]on "https://github.com/RPi-Distro/pi-gen").[/font]
    [font="Sans-serif"]Soweit funktioniert auch alles, w[/font][font="Sans-serif"]as ich bisher getestet habe.
    [/font]
    [font="Sans-serif"]Ich möchte den Raspi in C programmieren (GNU-Tools).[/font]
    [font="Sans-serif"]Für den "BoardCom 2837" habe ich im Netz keine Bibliotheken gefunden. Deshalb hab' ich mir die "C library for Broadcom BCM 2835" (v1.5) von "http://www.airspayce.com/mikem/bcm2835" installiert (soll ja auch mit dem BCM2836 des Pi 2 funktionieren).[/font]
    [font="Sans-serif"]Unter Examples, auf der gleichen Seite, habe ich die Datei "blink.c" genommen, unwesentlich angepasst (siehe Quellcode) und in "Geany" erfolgreich kompiliert und gelinkt.[/font]
    [font="Sans-serif"]Mit "sudo" lässt sich das Programm auch ohne Fehlermeldung starten und es sieht alles danach aus, als ob es in der Endlosschleife (siehe Quellcode) das tut was es soll. Was mir nun noch fehlt zu meinem Glück ist, dass der GPIO11 auch seinen Pegel ändert.
    [/font]
    [font="Sans-serif"]Um andere Fehlerquellen auszuschließen, habe ich mit den Shell-Kommandos[/font]
    [font="Courier New"]echo 11 > /sys/class/gpio/export[/font]
    [font="Courier New"]echo out > /sys/class/gpio/gpio11/direction[/font]
    [font="Courier New"]echo 1 > /sys/class/gpio/gpio11/value[/font]
    [font="Courier New"]echo 0 > /sys/class/gpio/gpio11/value[/font]
    [font="Sans-serif"]die Sache getestet.
    Hiermit funktioniert es wie es soll – GPIO11 wechselt seinen Pegel zwischen 0 und 3,3 Volt.[/font]

    [font="Sans-serif"]Hat jemand eine Idee was hier schiefläuft? Sind der BCM2835 und der BCM2837 womöglich nicht genug kompatibel?[/font]

    [font="Calibri, sans-serif"][font="Sans-serif"]Hier mein Quellcode:[/font][/font]


    [font="Courier New"]#include <bcm2835.h>
    #include <stdio.h>

    #define PIN RPI_GPIO_P1_11

    int main(int argc, char **argv)
    {
    if (!bcm2835_init()) {
    printf("\nFehler in bcm2835_init()");
    return 1;
    }

    /* Set the pin to be an output
    ****************************/
    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

    while (1) { /* Blink */
    bcm2835_gpio_write(PIN, HIGH); // Turn it on
    delay(1000); // wait a bit

    bcm2835_gpio_write(PIN, LOW); // turn it off
    delay(1000); // wait a bit
    }

    return 0;
    }[/font]

  • Servus,

    Code bitte immer in code-tags posten ( rechts oben in der Leiste, das Symbol mit <> ).

    Hast Du mal eine andere lib ausprobiert?
    Ich für meinen Teil bin schon vor langer Zeit auf die pigpio-Lib ausgewichen, nachdem mich wirinigPi und die Lib von Mc Cauley fast zur Verzweiflung getrieben haben ...
    Die Lib kannstt Du mittlerweile mit apt-get install pigpio installieren.
    Homepage ist: http://abyz.co.uk/rpi/pigpio/cif.html

    Hast Du mal überprüft, ob das mit der Pin-Nummerierung auch stimmt? Hat die bcm-Lib evtl. auch so eine Schote wie das in Python der Fall ist (use phys. Pin # - BCM-Numbering) ?

    cu,
    -ds

  • [font="Sans-serif"]Hallo [/font][font="Sans-serif"]dreamshader,[/font]

    [font="Sans-serif"]die "[/font][font="Sans-serif"]pigpio-Lib" hatte ich noch gar nicht entdeckt.[/font]
    [font="Sans-serif"]Dann werd' ich's zuerst mal damit versuchen.[/font]

    Danke für den Tipp!

  • Ich kenne die Library zwar nicht, aber versuch's mal mit
    #define PIN RPI_V2_GPIO_P1_23 // Entspricht BCM GPIO Pin 11
    statt
    #define PIN RPI_GPIO_P1_11

    Erklärung: "echo 11 > /sys/class/gpio/export" etc. setzt BCM GPIO Pin 11 und das wiederum entspricht Pin 23 am Raspberry Pi 3 Pinout. Da sich die Pin-Belegungen bei den verschiedenen Raspberry Pi-Varianten immer wieder mal änderten, haben die verschiedenen Libraries auch teilweise ihre eigenen Systeme eingeführt. Wenn ich das richtig verstehe, verwendet die von dir verwendete Library eine Variante, welche sich auf die Pinout Belegung am Raspberry und nicht auf das BCM GPIO Pin bezieht. Für den Raspberry Pi 2 (und soweit ich weiss, auch den Pi 3) wir die Enum durch ein eingeschobenes V2 erweitert und die Zahl am Ende bezieht sich auf das Pin am Pinout.

    Genaueres findest du hier: http://www.airspayce.com/mikem/bcm2835/…2db4e57736d0939

    Ich hoffe, dass dir das weiterhilft.

  • [font="Sans-serif"]Hallo pgloor,

    danke für [/font][font="Sans-serif"]Deinen Tipp.
    M[/font][font="Sans-serif"]it der Konstanten "PIN RPI_V2_GPIO_P1_23" statt "PIN RPI_GPIO_P1_11" hat's leider auch nicht funktioniert.
    Da scheint sich beim RPi 3 noch etwas anderes geändert zu haben.

    Ich bin aber mittlerweile mit der "pigpio-Lib" voll zufrieden - nochmals Dank an dreamshader :) [/font][font="Sans-serif"]!
    Ich musste sie nicht einmal installieren, war offenbar in meiner Jessie-Distribution schon enthalten.[/font]


    [font="Sans-serif"]Wen'[/font][font="Sans-serif"]s interessiert - hier eine Übersicht zum Thema[/font][font="Sans-serif"]: http://elinux.org/RPi_GPIO_Code_Samples#pigpio
    [/font]
    [font="Sans-serif"]Grüße![/font]


  • ... Ich musste sie nicht einmal installieren, war offenbar in meiner Jessie-Distribution schon enthalten.

    Da ist auch der Socket-server von pigpio bereits auf dem System, mit dem Du die GPIOs quasi fernsteuern kannst ( -> click <- ).
    Bitte, prima dass es jetzt klappt.
    Viel Spass noch mit dem RPi ...
    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!