Raspi GPIO Problem

Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Raspi GPIO Problem

Beitrag von DL3AD »

Hallo,

habe auf dem Raspi fpgpio bisher bei GPIO Eingangspins erfolgreich verwendet.

Nun wollte ich GPIOs als Aufgang verwenden und habe da dass Problem das die Pins nicht reagieren.
Erst wenn ich in der Console ein Pin manuel exportiere funktioniert mein Testprogramm(bis zum nächsten Neustart)
Manueller Export wie folgt gemacht:

sudo echo "16" > /sys/class/gpio/export

und hier mein Testprogram

Code: Alles auswählen

//GPIO Out Test
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  fpgpio;
 
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  mypin: TGpioPin;
 
implementation
{$R *.lfm}
{ TForm1 }
//Initialisierungen
procedure TForm1.FormShow(Sender: TObject);
begin
  mypin:= TgpioLinuxPin.Create(16);
  mypin.Direction:= gdOut;
end;
 
//Beenden
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  mypin.Destroy;
end;
 
//GPIO Ein
procedure TForm1.Button1Click(Sender: TObject);
begin
  mypin.Value := true;
end;
 
//Aus
procedure TForm1.Button2Click(Sender: TObject);
begin
  mypin.Value := false;
end;
 
end.


Pins als Eingang funktionieren ohne manuellen export .
Was mache ich falsch ?

Gruß Frank

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Raspi GPIO Problem

Beitrag von Timm Thaler »

Ich seh zwar nicht, was in der fpgpio passiert, aber ich vermute das übliche Problem: Ein Pin braucht nach Aktivierung (enable) bis zu 50msec, bis er zur Verfügung steht. Wird vorher versucht, den Pin von Eingang nach Ausgang zu schalten, bleibt er auf Eingang.

Also entweder 100msec Pause zwischen Enable und auf Ausgang setzen oder nach Enable alle 5msec abfragen, ob Pin enabled ist und dann auf Ausgang setzen, mit Timeout nach 20 erfolglosen Abfragen.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Raspi GPIO Problem

Beitrag von DL3AD »

... nein das ist nicht das Problem - ließ noch mal was ich schrieb

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Raspi GPIO Problem

Beitrag von Timm Thaler »

DAS ist genau das Problem: Wenn Du den Gpio manuell exportierst, ist danach genug Zeit, damit der Gpio in /sys/class/gpio angelegt wird. Wenn Du dann das Programm startest, kann es auf den bereits exportierten Gpio zugreifen. Wird die Wartezeit nicht eingehalten, versucht das Programm einen noch nicht angelegten Gpio auf Ausgang zu setzen und das geht nicht. Kurz darauf ist der Gpio dann angelegt und verfügbar, da der Befehl zum auf Ausgang setzen aber ins Leere lief ist der Gpio ein Eingang.

Allerdings habe ich oben statt "export" "enable" geschrieben, das hatte ich falsch in Erinnerung.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Raspi GPIO Problem

Beitrag von DL3AD »

ahh dann muss zwischen

Code: Alles auswählen

  mypin:= TgpioLinuxPin.Create(16);

und

Code: Alles auswählen

  mypin.Direction:= gdOut;

eine Verzögerung rein ?

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Raspi GPIO Problem

Beitrag von Timm Thaler »

Ja. Zumindest hab ich in den fpgpio nichts gefunden, dass vor dem SetDirection nochmal geprüft wird.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Raspi GPIO Problem

Beitrag von DL3AD »

... jo - es funktioniert
Vielen Dank für deine Hilfe.

Gruß Frank

Antworten