Lazarus & RaspberryPI & GPIO

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Lazarus & RaspberryPI & GPIO

Beitrag von hpt »

Servus Experten
Beim Experimentieren mit Lazarus am RPI-Gpio ist mir aufgefallen, dass nach einem Neustart vom RPI, nach dem 1. Mal starten einer Applikation z. B. nach den offiziellen Beispielen auf der Seite: http://wiki.freepascal.org/Lazarus_on_Raspberry_Pi/de - bei der Initialisierung der "direction" ein Fehler auftritt.
Beim ersten Start steht in der direktion --> in , anstatt "out" !

Konkret geht es um die unteren Zeilen, aber auch bei anderen Beispielen:

Code: Alles auswählen

procedure TForm1.FormActivate(Sender: TObject);
begin
  { Prepare SoC pin 17 (pin 11 on GPIO port) for access: }
  gReturnCode := fpsystem('echo "17" > /sys/class/gpio/export');
  LogMemo.Lines.Add(IntToStr(gReturnCode));
  { Set SoC pin 17 as output: }
  gReturnCode := [b]fpsystem('echo "out" > /sys/class/gpio/gpio17/direction');[/b]
  LogMemo.Lines.Add(IntToStr(gReturnCode));
end;
====================================================================

auch diese Art der Initialisierung liefert das gleiche Problem:

Code: Alles auswählen

  fileDesc := fpopen('/sys/class/gpio/gpio18/direction', O_WrOnly);
    gReturnCode := fpwrite(fileDesc, IN_DIRECTION[0], 2);
 
=====================================================================

1. Frage:
Woran kann das bitte liegen?

2. Frage
Wer hat schon Bit-Banging am GPIO des RPI mit Lazarus probiert und Erfahrung? Meine Spielereien zielen auf ein Lesen der "MISO"-Leitung von SPI ab.

Ein schönes Weinachtsfest wünscht HPT
Zuletzt geändert von Lori am Mo 22. Dez 2014, 20:59, insgesamt 1-mal geändert.
Grund: Highlighter

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lazarus & RaspberryPI & GPIO

Beitrag von Socke »

Kannst du bitte angeben, mit welchem Betriebssystem (Distribution, Linux-Kernel-Version) du arbeitest.
hpt hat geschrieben:Woran kann das bitte liegen?
Versuche bitte an den Richtungs-String noch einen Zeilenvorschub anzuhängen. Bei den FpWrite-Aufrufen bin ich mir gerade mit den Parametern nicht ganz sicher (ob Zeiger verwendet werden, etc.)

Code: Alles auswählen

gReturnCode := fpsystem('echo "out\n" > /sys/class/gpio/gpio17/direction');
//bzw.
fpwrite(fileDesc, 'out'#10, 4);
Ggf. muss bei direktem Schreibzugriff auf die Datei auch die NULL-Terminierung mitgeschrieben werden

Code: Alles auswählen

fpwrite(fileDesc, 'out', 4);
// oder
fpwrite(fileDesc, 'out'#10, 5);
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Re: Lazarus & RaspberryPI & GPIO

Beitrag von hpt »

Ich arbeite auf einem RaspberryPi mit Linux raspberrypi 3.12.28+ und probiere und probiere. Leider ohne Erfolg. Ich kontrolliere mit LXTerminal die Einträge in der "direction" nach dem Start. Es ist zuerst immer standartmäßig auf "in". Auch wenn ich mit deinen Vorschlägen teste. Erst beim 2. mal (ich habe es mit einem Zusatz-button realisiert) kann man auf Out setzen.

wbeppler
Beiträge: 131
Registriert: So 20. Jul 2014, 10:27
OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
CPU-Target: 8-64 bit
Wohnort: bodensee
Kontaktdaten:

Re: Lazarus & RaspberryPI & GPIO

Beitrag von wbeppler »

hi,
weil ich die tage auch mit raspberry rum mach, mein gedanke dazu (und natuerlich ne frage)

bist du root ? hats du rechte auf /dev/... ?

und nicht wegen dir sondern wegen meinem problem:
welcher lazarus version hast du ? (weil ich raspian verwene hab ich wohl nicht alle bedingungen fuer lazarus > 1.x.x, ich hab also 0.9.x und krieg wohl deshalb die synapse4 nicht zum laufen welche ich fuer serielle schnittstelle brauche, hast du synapse ?)


gruss

wolfgang :-)

hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Re: Lazarus & RaspberryPI & GPIO

Beitrag von hpt »

Mein Problem ist echt interessant, ich hab schon die Initialisierung in Formactivate und außerhalb mit Button manuell probiert, aber es gelingt nicht, nach dem Anlegen von gpio9 , auch gleich die "direction" mit out zu initialisieren. Es muß ein 2. mal hineingeschrieben werden. Aber warum? In den Beispielen steht es überall gleich hintereinander.....

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lazarus & RaspberryPI & GPIO

Beitrag von Socke »

hpt hat geschrieben:In den Beispielen steht es überall gleich hintereinander.....
Bei mir funktioniert das einwandfrei. Ich bin aber noch nicht dazu gekommen, meine Konfiguration mit deiner zu vergleichen.
Vielleicht hat das hiermit etwas zu tun: https://github.com/SAmeis/pascalio/issues/3 wobei die Aufteilung auf FormActivate und Button dem Kernel genug Zeit verschaffen sollte.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Re: Lazarus & RaspberryPI & GPIO

Beitrag von hpt »

Leider nein - daran - also ein Zeitproblem scheint es auch nicht zu sein. Habe mit Sleep(1000) sicher genug Zeit gelassen.
Aber Achtung:
Der Fehler tritt tatsächlich nur bei
1. einem Neustart des RaspberryPI
2. nur bei "OUTPUT" auf, da ja defaultmäßig in direction drinnen steht !
Scheint ein Problem zu sein!
Es tritt sicher auf, nur fällt es meist nicht auf, wenn man eine App das 2. mal startet.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lazarus & RaspberryPI & GPIO

Beitrag von Socke »

hpt hat geschrieben:Ich arbeite auf einem RaspberryPi mit Linux raspberrypi 3.12.28+
Ich habe bei mir nachgeschaut: ich verwende noch Linux raspberrypi 3.12.22+ #691 PREEMPT Wed Jun 18 18:29:58 BST 2014 armv6l GNU/Linux

Damit kann die Problemursache durchaus im Kernel liegen.
hpt hat geschrieben:Es tritt sicher auf, nur fällt es meist nicht auf, wenn man eine App das 2. mal startet.
Ist dann das jeweilige Verzeichnis /sys/class/gpio/gpioXX/ schon vorhanden oder wird der GPIO pin bei Programmende wieder zurückgesetzt? Falls nicht, bleibt die Richtung auch über den Unexport erhalten. Dann müsste aber das gleiche Problem mit der Richtung "in" auftreten.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten