Raspberry Pi 2 B: GPIO-Library für die Programmiersprache Icon

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    3/4 Forenbeiträge drehen sich momentan darum, dass irgendwelche Programme und Libraries für das neue Raspberry Pi 2 Modell B nicht funktionieren.

    Für diejenigen, die meine Icon-Tutorials durchgearbeitet haben und in der Programmiersprache Icon programmieren (wollen), ist schon vor einigen Wochen der Quellcode der GPIO-Library vorgestellt worden und wie dieser auf die Modelle A+ und B+ angepasst wird.

    Genauso funktioniert das auch für das neue RPi 2 Modell B...

    Wenn mir jemand die Ausgabe von

    Code
    cat /proc/cpuinfo


    schickt, dann kann ich den Quellcode aktualisieren und in diesem Thread posten.

    Beste GRüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (4. Februar 2015 um 21:43)

  • Raspberry Pi 2 B: GPIO-Library für die Programmiersprache Icon? Schau mal ob du hier fündig wirst!

  • Siehe dazu in den Spoiler am Anfang des Beitrags von Raspberry 2 erscheint - Beitrag#15 :fies:


    Und an dieser Stelle sei auch erwähnt das motom001 >> hier << ein vorläufigen Workaround für RPi.GPIO gepostet hat :thumbs1:

  • Hallo Meigrafd,

    :danke_ATDE:

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Jaja, ICON, der Hit unter den Programmiersprachen - wieselflinker Programmablauf (fast wie ASM), schnell verständlich, leicht zu kodieren.

    Spass beiseite, Ernst komm raus:
    Ist das eigentlich die Sprache, die es schon Jahrzehnte gibt und mal aus Algol (und *weißichimmomentnet*) entwickelt wurde? Irgendwann damals, als auch Cobol entstand?

    Das Beste(?) setzt sich halt nicht immer durch, leider. ;)
    Wobei mir C einfach lieber ist. Andere mögen Python. Warum einen Verlierer(?) aufleben lassen und alleine auf weiter Flur stehen? :)

    Nix für ungut,
    Gruß, mmi

  • Hallo MMI,

    zur Geschichte der Programmiersprache Icon:

    http://www.cs.arizona.edu/icon/faq.htm#lineage

    Es war SNOBOL, nicht ALGOL ;) - ist aber auch egal.

    Die letzte Version stammt vom Juni 2013. Die letzte Version für MAC OS vom July 2014.

    Somit handelt es sich sicherlich nicht um einen Verlierer, den ich hier aufleben lasse.

    Alle meine Anwendungen, die in der Industrie eingesetzt werden, basieren auf Icon. Und irgendwie kann ich nicht sagen, dass es schlecht läuft.

    Lazarus / Delphi basieren auf Pascal, das Niklaus Wirth um 1970 herum als OpenSource freigegeben hat. Pascal hat auch schon Jahrzehnte auf dem Buckel und ist trotzdem eine sehr gut auch für Programmieranfänger erlernbare Programmiersprache.

    Das gleiche gilt übrigens auch für Icon.

    Nichts für ungut!

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (12. Oktober 2017 um 00:34)

  • Hallo zusammen,

    ooops, da war noch was...

    Hier der Quellcode der GPIO-Library für die Programmiersprache Icon.

    Diese GPIO-Library unterstützt die Modelle A und B (jeweils PCB-Revisionen 1 und 2), A+, B+, Compute Module und den neuen RPi 2.

    Diese Library stellt folgende Befehle zur Verfügung:

    Setzen des Status von Pin pin auf Wert wert für die Dauer dauer [ms]. Spezifikationen für dauer sind optional.

    Code
    GPIO(pin, wert, dauer)

    Abfragen des Status von Pin pin

    Code
    wert := GPIO(pin)

    Schreiben eines Zeichens zeichen in die 7Segment-Anzeige für die Dauer dauer [ms]. Spezifikationen für dauer sind optional.

    Code
    SEGMENT7(zeichen, dauer)

    Neu ist die Funktion GPIO_board(). Diese Funktion liefert Informationen über das angetroffene Board, falls jemand Anwendungen entwickeln möchte, die die Board-Revision / Modell bei der Programmausführung berücksichtigen.


    Viel Spaß damit!

    Beste Grüße

    Andreas

    Dateien

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. Februar 2015 um 10:54)

  • Hallo zusammen,

    hier gibt's dann auch den Quellcode meiner in Icon geschriebenen GPIO-Library.

    Diese gilt jetzt auch für die Modelle
    - Zero
    - 3B

    Sollte jemand Fehlermeldunbgen erhalten, dass sein Modell nicht erkannt wird, dann benötige ich wie immer die Ausgabe von

    Code
    cat /proc/cpuinfo


    und ratz-fatz funktioniert die Library dann auch auf einem anderen Modell.

    Um aus dem Quellcode:


    zur GPIO-Library zu kommen, genügt ein F9 aus Geany heraus oder ein

    Code
    icont -c GPIO


    aus einem Terminal heraus, um die beiden Dateien GPIO.u1 und GPIO.u2 zu erzeugen, die dann mit

    Code
    link GPIO


    in Eure Programme eingebaut werden kann.

    Viel Spaß damit!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (26. März 2016 um 16:48)

  • Hallo zusammen,

    es wurde mal wieder eine neue Version der GPIO-Library fällig.

    An den bisherigen Funktionen habe ich nichts geändert - das war wohl alles bereits 2013 soweit ausgereift.

    Neue Datenstruktur:

    Code
    record gpio_alt(
                       pin,
                       func,
                       alt)


    [font="Courier New"]pin[/font] ist die Angabe eines GPIO-Pin nach GPIO-Notation.
    [font="Courier New"]func[/font] ist die Bezeichnung der Alternativfunktionalität, z.B. TXD
    [font="Courier New"]alt[/font] ist die Bezeichnung der Alternativfunktionalität, z.B. alt0

    Diese Struktur wird als Liste von der neuen Funktion [font="Courier New"]GPIO_find_function(functionality)[/font] zurückgegeben und lässt sich dann recht leicht auswerten (s. Beispielprogramm).


    Neue Funktionen:

    Code
    raspi_gpio(pin, mode, params)


    Ermöglicht einen alternativen Zugriff auf die GPIO-Pins. Unabhängig von den der eigentlichen Funktion [font="Courier New"]GPIO()[/font].
    Wenn kein Pin angegeben wird, dann erhält man bei [font="Courier New"]mode = "get"[/font] bzw.[font="Courier New"] "funcs"[/font] eine Übersicht über alle GPIO-Pins, deren Status (Programmierung als Input, Output und Wert), Alternativ-Funktionalitäten.

    Wenn ein Pin angegeben wird, dann bezieht sich die Rückmeldung nur auf diesen Pin. Irgendwie logisch.

    Interessanter wird's bei [font="Courier New"]mode = "set"[/font].

    Hier hat der Programmierer einen vollen Zugriff auf die Pins. Hier werden dann die Parameter genutzt. Diese liegen in einer Liste vor, was in Icon durch [] realisiert wird.

    Folgende Parameter werden ausgewertet:
    [font="Courier New"]"input"[/font]: Setzt den angegebenen Pin als Eingang
    [font="Courier New"]"output"[/font]: Setzt den angegebenen Pin als Ausgang
    [font="Courier New"]"alt0" ... "alt5[/font]": Setzt die entsprechende Alternativ-Funktionalität zum angegebenen Pin
    [font="Courier New"]"pullup"[/font]: Setzt den Pull-Up-Widerstand zum angegebenen Pin
    [font="Courier New"]"pulldown"[/font]: Setzt den Pull-Down-Widerstand zum angegebenen Pin
    [font="Courier New"]"nopull"[/font]: Deaktiviert Pull-Up- und Pull-Down-Widerstand
    [font="Courier New"]"HIGH"[/font]: Setzt einen als Ausgang gesetzten Pin auf HIGH, 1, oder 3,3 V
    [font="Courier New"]"LOW"[/font]: Setzt einen als Ausgang gesetzten Pin auf LOW, 0 oder 0 V

    Zu der etwas langatmigen Notation habe ich mich entschlossen, weil die damit entwickelten Programm eine gesteigerte Lesbarkeit erhalten.

    Code
    GPIO_find_function(functionality)


    Diese Funktion macht Vorschläge, unter welchen GPIOs sich eine gesuchte Alternativv-Funktionalität "versteckt". Diese Funktion ist für Fälle gedacht, in denen sich erst während der Laufzeit die genaue Pin-Belegung und -Nutzung herausstellt und man während der Laufzeit eines Programmes live sehen will, wie sich das alles verhält. Z.B. kann diese Liste in einem Listenfeld ausgegeben werden und der Anwender sucht sich z.B. Vorschlag 3 aus, um eine bestimmte Alternativfunktionalität umzusetzen.


    Beispiel-Programm:

    Ausgabe:

    Spoiler anzeigen


    GPIO 17: level=1 fsel=4 alt=0 func=FL1
    GPIO, DEFAULT PULL, ALT0, ALT1, ALT2, ALT3, ALT4, ALT5
    17, DOWN, FL1, SD9, DPI_D13, RTS0, SPI1_CE1_N, RTS1
    BANK0 (GPIO 0 to 27):
    GPIO 00: level=1 fsel=0 alt= func=INPUT
    GPIO 01: level=1 fsel=0 alt= func=INPUT
    GPIO 02: level=1 fsel=4 alt=0 func=SDA1
    GPIO 03: level=1 fsel=4 alt=0 func=SCL1
    GPIO 04: level=0 fsel=0 alt= func=INPUT
    GPIO 05: level=1 fsel=0 alt= func=INPUT
    GPIO 06: level=1 fsel=0 alt= func=INPUT
    GPIO 07: level=1 fsel=1 alt= func=OUTPUT
    GPIO 08: level=1 fsel=1 alt= func=OUTPUT
    GPIO 09: level=0 fsel=4 alt=0 func=SPI0_MISO
    GPIO 10: level=0 fsel=4 alt=0 func=SPI0_MOSI
    GPIO 11: level=0 fsel=4 alt=0 func=SPI0_SCLK
    GPIO 12: level=0 fsel=0 alt= func=INPUT
    GPIO 13: level=0 fsel=0 alt= func=INPUT
    GPIO 14: level=1 fsel=4 alt=0 func=TXD0
    GPIO 15: level=1 fsel=4 alt=0 func=RXD0
    GPIO 16: level=0 fsel=0 alt= func=INPUT
    GPIO 17: level=1 fsel=4 alt=0 func=FL1
    GPIO 18: level=0 fsel=0 alt= func=INPUT
    GPIO 19: level=0 fsel=0 alt= func=INPUT
    GPIO 20: level=0 fsel=0 alt= func=INPUT
    GPIO 21: level=0 fsel=0 alt= func=INPUT
    GPIO 22: level=0 fsel=0 alt= func=INPUT
    GPIO 23: level=0 fsel=0 alt= func=INPUT
    GPIO 24: level=0 fsel=0 alt= func=INPUT
    GPIO 25: level=0 fsel=0 alt= func=INPUT
    GPIO 26: level=0 fsel=0 alt= func=INPUT
    GPIO 27: level=0 fsel=0 alt= func=INPUT
    BANK1 (GPIO 28 to 45):
    GPIO 28: level=1 fsel=0 alt= func=INPUT
    GPIO 29: level=1 fsel=0 alt= func=INPUT
    GPIO 30: level=0 fsel=0 alt= func=INPUT
    GPIO 31: level=1 fsel=1 alt= func=OUTPUT
    GPIO 32: level=0 fsel=1 alt= func=OUTPUT
    GPIO 33: level=0 fsel=0 alt= func=INPUT
    GPIO 34: level=1 fsel=0 alt= func=INPUT
    GPIO 35: level=1 fsel=0 alt= func=INPUT
    GPIO 36: level=1 fsel=0 alt= func=INPUT
    GPIO 37: level=0 fsel=0 alt= func=INPUT
    GPIO 38: level=0 fsel=1 alt= func=OUTPUT
    GPIO 39: level=0 fsel=0 alt= func=INPUT
    GPIO 40: level=0 fsel=4 alt=0 func=PWM0
    GPIO 41: level=0 fsel=1 alt= func=OUTPUT
    GPIO 42: level=0 fsel=0 alt= func=INPUT
    GPIO 43: level=0 fsel=0 alt= func=INPUT
    GPIO 44: level=0 fsel=4 alt=0 func=GPCLK1
    GPIO 45: level=0 fsel=4 alt=0 func=PWM1
    BANK2 (GPIO 46 to 53):
    GPIO 46: level=0 fsel=0 alt= func=INPUT
    GPIO 47: level=0 fsel=1 alt= func=OUTPUT
    GPIO 48: level=0 fsel=7 alt=3 func=SD1_CLK
    GPIO 49: level=1 fsel=7 alt=3 func=SD1_CMD
    GPIO 50: level=1 fsel=7 alt=3 func=SD1_DAT0
    GPIO 51: level=1 fsel=7 alt=3 func=SD1_DAT1
    GPIO 52: level=1 fsel=7 alt=3 func=SD1_DAT2
    GPIO 53: level=1 fsel=7 alt=3 func=SD1_DAT3
    GPIO, DEFAULT PULL, ALT0, ALT1, ALT2, ALT3, ALT4, ALT5
    0, UP, SDA0, SA5, PCLK, AVEOUT_VCLK, AVEIN_VCLK, -
    1, UP, SCL0, SA4, DE, AVEOUT_DSYNC, AVEIN_DSYNC, -
    2, UP, SDA1, SA3, LCD_VSYNC, AVEOUT_VSYNC, AVEIN_VSYNC, -
    3, UP, SCL1, SA2, LCD_HSYNC, AVEOUT_HSYNC, AVEIN_HSYNC, -
    4, UP, GPCLK0, SA1, DPI_D0, AVEOUT_VID0, AVEIN_VID0, ARM_TDI
    5, UP, GPCLK1, SA0, DPI_D1, AVEOUT_VID1, AVEIN_VID1, ARM_TDO
    6, UP, GPCLK2, SOE_N_SE, DPI_D2, AVEOUT_VID2, AVEIN_VID2, ARM_RTCK
    7, UP, SPI0_CE1_N, SWE_N_SRW_N, DPI_D3, AVEOUT_VID3, AVEIN_VID3, -
    8, UP, SPI0_CE0_N, SD0, DPI_D4, AVEOUT_VID4, AVEIN_VID4, -
    9, DOWN, SPI0_MISO, SD1, DPI_D5, AVEOUT_VID5, AVEIN_VID5, -
    10, DOWN, SPI0_MOSI, SD2, DPI_D6, AVEOUT_VID6, AVEIN_VID6, -
    11, DOWN, SPI0_SCLK, SD3, DPI_D7, AVEOUT_VID7, AVEIN_VID7, -
    12, DOWN, PWM0, SD4, DPI_D8, AVEOUT_VID8, AVEIN_VID8, ARM_TMS
    13, DOWN, PWM1, SD5, DPI_D9, AVEOUT_VID9, AVEIN_VID9, ARM_TCK
    14, DOWN, TXD0, SD6, DPI_D10, AVEOUT_VID10, AVEIN_VID10, TXD1
    15, DOWN, RXD0, SD7, DPI_D11, AVEOUT_VID11, AVEIN_VID11, RXD1
    16, DOWN, FL0, SD8, DPI_D12, CTS0, SPI1_CE2_N, CTS1
    17, DOWN, FL1, SD9, DPI_D13, RTS0, SPI1_CE1_N, RTS1
    18, DOWN, PCM_CLK, SD10, DPI_D14, I2CSL_SDA_MOSI, SPI1_CE0_N, PWM0
    19, DOWN, PCM_FS, SD11, DPI_D15, I2CSL_SCL_SCLK, SPI1_MISO, PWM1
    20, DOWN, PCM_DIN, SD12, DPI_D16, I2CSL_MISO, SPI1_MOSI, GPCLK0
    21, DOWN, PCM_DOUT, SD13, DPI_D17, I2CSL_CE_N, SPI1_SCLK, GPCLK1
    22, DOWN, SD0_CLK, SD14, DPI_D18, SD1_CLK, ARM_TRST, -
    23, DOWN, SD0_CMD, SD15, DPI_D19, SD1_CMD, ARM_RTCK, -
    24, DOWN, SD0_DAT0, SD16, DPI_D20, SD1_DAT0, ARM_TDO, -
    25, DOWN, SD0_DAT1, SD17, DPI_D21, SD1_DAT1, ARM_TCK, -
    26, DOWN, SD0_DAT2, TE0, DPI_D22, SD1_DAT2, ARM_TDI, -
    27, DOWN, SD0_DAT3, TE1, DPI_D23, SD1_DAT3, ARM_TMS, -
    28, NONE, SDA0, SA5, PCM_CLK, FL0, -, -
    29, NONE, SCL0, SA4, PCM_FS, FL1, -, -
    30, DOWN, TE0, SA3, PCM_DIN, CTS0, -, CTS1
    31, DOWN, FL0, SA2, PCM_DOUT, RTS0, -, RTS1
    32, DOWN, GPCLK0, SA1, RING_OCLK, TXD0, -, TXD1
    33, DOWN, FL1, SA0, TE1, RXD0, -, RXD1
    34, UP, GPCLK0, SOE_N_SE, TE2, SD1_CLK, -, -
    35, UP, SPI0_CE1_N, SWE_N_SRW_N, -, SD1_CMD, -, -
    36, UP, SPI0_CE0_N, SD0, TXD0, SD1_DAT0, -, -
    37, DOWN, SPI0_MISO, SD1, RXD0, SD1_DAT1, -, -
    38, DOWN, SPI0_MOSI, SD2, RTS0, SD1_DAT2, -, -
    39, DOWN, SPI0_SCLK, SD3, CTS0, SD1_DAT3, -, -
    40, DOWN, PWM0, SD4, -, SD1_DAT4, SPI2_MISO, TXD1
    41, DOWN, PWM1, SD5, TE0, SD1_DAT5, SPI2_MOSI, RXD1
    42, DOWN, GPCLK1, SD6, TE1, SD1_DAT6, SPI2_SCLK, RTS1
    43, DOWN, GPCLK2, SD7, TE2, SD1_DAT7, SPI2_CE0_N, CTS1
    44, NONE, GPCLK1, SDA0, SDA1, TE0, SPI2_CE1_N, -
    45, NONE, PWM1, SCL0, SCL1, TE1, SPI2_CE2_N, -
    46, UP, SDA0, SDA1, SPI0_CE0_N, -, -, SPI2_CE1_N
    47, UP, SCL0, SCL1, SPI0_MISO, -, -, SPI2_CE0_N
    48, UP, SD0_CLK, FL0, SPI0_MOSI, SD1_CLK, ARM_TRST, SPI2_SCLK
    49, UP, SD0_CMD, GPCLK0, SPI0_SCLK, SD1_CMD, ARM_RTCK, SPI2_MOSI
    50, UP, SD0_DAT0, GPCLK1, PCM_CLK, SD1_DAT0, ARM_TDO, -
    51, UP, SD0_DAT1, GPCLK2, PCM_FS, SD1_DAT1, ARM_TCK, -
    52, UP, SD0_DAT2, PWM0, PCM_DIN, SD1_DAT2, ARM_TDI, -
    53, UP, SD0_DAT3, PWM1, PCM_DOUT, SD1_DAT3, ARM_TMS, -

    GPIO 17: level=0 fsel=0 func=INPUT
    GPIO 17: level=1 fsel=0 func=INPUT
    GPIO 17: level=0 fsel=0 func=INPUT
    GPIO 17: level=0 fsel=0 func=INPUT

    GPIO 17: level=0 fsel=1 func=OUTPUT
    GPIO 17: level=1 fsel=1 func=OUTPUT
    GPIO 17: level=0 fsel=1 func=OUTPUT
    GPIO 17: level=1 fsel=1 func=OUTPUT
    GPIO 17: level=0 fsel=1 func=OUTPUT
    GPIO 17: level=1 fsel=1 func=OUTPUT
    GPIO 17: level=0 fsel=1 func=OUTPUT

    GPIO 17: level=1 fsel=4 alt=0 func=FL1
    GPIO 17: level=1 fsel=4 alt=0 func=FL1
    GPIO 17: level=1 fsel=4 alt=0 func=FL1
    GPIO 17: level=0 fsel=5 alt=1 func=SD9
    GPIO 17: level=0 fsel=6 alt=2 func=DPI_D13
    GPIO 17: level=1 fsel=7 alt=3 func=RTS0
    GPIO 17: level=1 fsel=3 alt=4 func=SPI1_CE1_N
    GPIO 17: level=1 fsel=2 alt=5 func=RTS1

    Funktionalität TXD0 existiert als Alternativfunktionalität alt0 zu GPIO-Pin 14
    Funktionalität TXD1 existiert als Alternativfunktionalität alt5 zu GPIO-Pin 14
    Funktionalität TXD0 existiert als Alternativfunktionalität alt3 zu GPIO-Pin 32
    Funktionalität TXD1 existiert als Alternativfunktionalität alt5 zu GPIO-Pin 32
    Funktionalität TXD0 existiert als Alternativfunktionalität alt2 zu GPIO-Pin 36
    Funktionalität TXD1 existiert als Alternativfunktionalität alt5 zu GPIO-Pin 40

    Der Anhang enthält den Quellcode des Test-Programms sowie die GPIO-Library in compillierter Form. Nach dem Entpacken ist das Ergebnis in das Icon-Arbeitsverzeichnis [font="Courier New"]/home/pi/icon9_51/bin/[/font] zu kopieren.


    Viel Spaß damit und beste Grüße

    Andreas

  • Hallo zusammen,

    durch Hinzufügen weniger Zeilen und Verwendung entsprechender GPIO-Bezeichnungen läuft die GPIO-Library auch auf einem NVIDIA Jetson Nano.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

Jetzt mitmachen!

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