Synaser auf dem Raspberry Pi,.. [gelöst]

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1619
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Synaser auf dem Raspberry Pi,.. [gelöst]

Beitrag von corpsman »

Guten Morgen allerseits,

Wie ja evtl schon bekannt, habe ich einen der RaspberryPi's ergattert und versuche diesen nun zum laufen zu bringen.

Bisher Erfolgreich in Betrieb genommen

die 17 GPIO Pins ( natürlich durch ein FPC Programm ) Lesen / Schreiben alles kein Problem ( Einzelne Pins lassen sich mit ca. 3,4 MHz toggeln )

Nun bin ich an der Seriellen Schnittstelle dran ( GPIO 14 / 15 )

In einer Konsole schaffe ich es auch, wenn ich mich als Root einlogge

Code: Alles auswählen

Last login: Wed Jul 11 16:59:24 2012 from 192.168.168.253
corpsman@raspberrypi ~ $ sudo su
root@raspberrypi:/home/corpsman# echo "asdasd" > /dev/ttyAMA0
root@raspberrypi:/home/corpsman#
Und am Anderen Ende kommt es an.
Da ich mit Synaser schon gute Erfahrungen gemacht habe ( siehe Klab ) wollte ich Synaser auch wieder auf dem Pi nutzen. Damit es Kompiliert musste ich folgendes ändern :

Code: Alles auswählen

// Synaser.pas Zeile 1900
procedure TBlockSerial.Purge;
var i:integer;
begin
  i:= TCIOFLUSH;
  {$IFNDEF FPC}
  SerialCheck(ioctl(integer(FHandle), TCFLSH, TCIOFLUSH));
  {$ELSE}
  //SerialCheck(fpioctl(integer(FHandle), TCFLSH, TCIOFLUSH)); // Fehler, da TCIOFLUSH kein Pointer ist.
  SerialCheck(fpioctl(integer(FHandle), TCFLSH, @i));
  {$ENDIF}
  FBuffer := '';
  ExceptCheck;
end;
Das Problem ist nun aber leider, dass ich auf die ttyAMA0 nicht verbinden kann :(

Code: Alles auswählen

uartname := 'ttyAMA0';
    writeln('Connect uart to ' + uartname + ' with 115 Kb.');
    If Not uart.connect(uartname, 115200, 8, 'N', 2, false, false) Then Begin
      writeln('Error on connect, exit now.');
      Halt;
    End;
Und hier die Consolen Ausgabe :

Code: Alles auswählen

corpsman@raspberrypi ~/projects/Uart $ sudo ./raspberry 
Starting RaspberryPi
This Demo shows how to use the uart interface on the Raspberry Pi
Press "Return" to start, "STRG+C" to cancel.
 
Init Uart.
Connect uart to ttyAMA0 with 115 Kb.
Error, could not connect to device error number : ERROR_FILE_NOT_FOUND
Error on connect, exit now.
Die Frage ist nun, habe ich in Synaser die "Umwandlung" richtig gemacht, und wenn nein wie gehts richtig, und überhaupt, hat jemand synaser, oder eine andere Uart Komponente schon zum laufen gebracht und kann mir hier helfen ?
Zuletzt geändert von corpsman am Mo 17. Mär 2014, 16:43, insgesamt 1-mal geändert.
--
Just try it

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Synaser auf dem Raspberry Pi,..

Beitrag von Scotty »

Ohne wirklich Ahnung zu haben: Warum nicht uartname := '/dev/ttyAMA0';?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Synaser auf dem Raspberry Pi,..

Beitrag von mschnell »

Versuch doch erstmal ganz klassisch eine einzelne Ausgabe ohne synaser mit Datei "/dev/ttyAMA0" öffnen und etwas darauf schreiben. Wenn das nicht klappt, kann synaser das auch nicht.

-Michael

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1619
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Synaser auf dem Raspberry Pi,..

Beitrag von corpsman »

So ich bin endlich zum testen gekommen.

Also wenn ich das "/dev/" vorne dran hänge geht mehr.

Mittels :

Code: Alles auswählen

var f:Textfile;
begin
  assignfile(f, '/dev/ttyAMA0');
  rewrite(f);
  writeln(f, 'Hello World.');
  closefile(f);
..
Kann ich am Anderen Ende etwas sehen. Mache ich das Gleiche mittels Synaser bekomme ich den Fehlercode 22 ( laut hier ist das "The device does not recognize the command.")

Ein Prinzipielles Schreiben scheint also zu gehen. Ich will aber schon lesen und schreiben.. Die Verbindungsparameter selbst müsste ich nicht mal verändert haben ( die Default 115200 KB reichen mir ).
--
Just try it

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1619
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Synaser auf dem Raspberry Pi,..

Beitrag von corpsman »

Für alle die Mitlesen

Man kann auf die Root Rechte verzichten, wenn man sich in die Gruppe tty einträgt :
sudo adduser tty <user>
Der Fehler scheint übrigens daher zu kommen, dass mein "Port" nicht richtig ist. Es liegt an diesen Zeilen :

Code: Alles auswählen

procedure TBlockSerial.Purge;
begin
  {$IFNDEF FPC}
  SerialCheck(ioctl(integer(FHandle), TCFLSH, TCIOFLUSH));
  {$ELSE}
  SerialCheck(fpioctl(integer(FHandle), TCFLSH, TCIOFLUSH)); // Hier kommt ne Fehlermeldung, weil ein Pointer Erwartet wird
  {$ENDIF}
  FBuffer := '';
  ExceptCheck;
end;
Unter http://www.freepascal.org/docs-html/rtl ... ioctl.html kann man sehen, welcher typ das sein soll ein "Termios", aber wie ich die Konstante von "2" auf das übersetzen soll habe ich leider noch nicht rausgefunden.

[edit]

Hehe, eine kleine Google suche gibt das hier http://forum.lazarus.freepascal.org/ind ... ic=16533.0 :

Code: Alles auswählen

{$IFNDEF MSWINDOWS}
procedure TBlockSerial.Purge;
begin
  {$IFNDEF FPC}
  SerialCheck(ioctl(FHandle, TCFLSH, TCIOFLUSH));
  {$ELSE}
    {$IFDEF DARWIN}
    SerialCheck(fpioctl(FHandle, TCIOflush, Pointer(PtrInt(TCIOFLUSH))));
    {$ELSE}
    SerialCheck(fpioctl(FHandle, TCFLSH, Pointer(PtrInt(TCIOFLUSH))));
    {$ENDIF}
  {$ENDIF}
  FBuffer := '';
  ExceptCheck;
end;
{$ELSE}     
Vom Pi Senden kann ich nun, aber empfangen kann ich nicht, hat da jemand ne Idee ?
--
Just try it

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1619
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Synaser auf dem Raspberry Pi,..

Beitrag von corpsman »

So hier das letze Puzzleteil zur Implementierung von Uart auf dem Pi.

Das Problem des Empfangens liegt an dem Console Login, wie man diesen deaktivieren kann steht hier
The first and main one is /etc/inittab

This file has the command to enable the login prompt and this needs to be disabled. Edit the file and move to the end of the file. You will see a line similar to

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Disable it by adding a # character to the beginning. Save the file.

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Will man den Boot log ebenfalls nicht haben kann optional noch
You can disable it by editing the file /boot/cmdline.txt

The contents of the file look like this

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Remove all references to ttyAMA0 (which is the name of the serial port). The file will now look like this

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
gemacht werden. Leider kommt dann immer noch ein kurzer Text beim einschalten, dieser ist aber mit ca. 20 Zeichen auch mit µ-Controllern gut ignorierbar ;).
--
Just try it

Antworten