Fischertechnik unter Linux

Hallo,

ich möchte unter Linux mein serielles Interace von Fischertechnik mit C ansteuern.
Dazu habe ich bis jetzt die serielle Schnittstelle göffnet(mit fopen("/dev/ttyS0", „a“)
und dann versucht mit fprintf an die Schnittstelle was zu senden. Allerdings klappt das nicht so recht.
Ich habe nämlich keine Ahnung wie ich binär, hex oder dezimal Sachen an das Interface sende. Außerdem auch nicht, ob, wenn ich was an die Schnittstelle sende, das wirklich jeweils nur ein Byte ist(sieh dazu die Beschreibung und Mail). Da kann mir doch bestimmt jemand helfen, oder?

Folgend eine Beschreibung, von wem, weiss ich leider nicht mehr(flog auf meiner Platte rum)
und eine Mail:

Ansteuerung des fischertechnik Intelligent Interface Art.-Nr. 30402

1.1 Einstellung des Interfaces

Baudrate 9600
Bit 8
Parity no
Stopbits 1

1.2 Kommunikation

Zur Ansteuerung des Interface sind grundsätzlich zwei Bytes an das serielle
Interface zu schicken. Das erste Byte ist der Interfacebefehl
(s.u.) und das zweite Byte enthält den Motorzustand.
Der Motorzustand beschreibt, welche Motoren in welcher Richtung gestartet
werden sollen. Je nach Interfacebefehl antwortet das Interface mit einem
oder drei Bytes.

  1. Byte: Interfacebefehl
    Binär hex dezimal Beschreibung
    11000001 C1 193 nur E/A-Zustand
    11000101 C5 197 E/A-Zustand und Analogwert EX
    11001001 C9 201 E/A-Zustand und Analogwert EY

  2. Byte: Motorzustand

Bits Beschreibung
1 Motor 1 links
2 Motor 1 rechts
3 Motor 2 links
4 Motor 2 rechts
5 Motor 3 links
6 Motor 3 rechts
7 Motor 4 links
8 Motor 4 rechts

Es ist dabei möglich alle 4 Motoren gleichzeitig zu starten. Wird jedoch das
linke und rechte Bit eines Motors gleichzeitig gesetzt, so läuft der Motor
nicht an, bzw. die Lampe leuchtet nicht.

1.3 Antworten des Interfaces:

auf Befehl Antwortbytes Beschreibung
193 ein Byte jedes Bit entspricht dem Wert des Eingangs
197 drei Bytes 1. Byte s.o. 2. und 3. Byte Analoginput EX
201 drei Bytes 1. Byte s.o. 2. und 3. Byte Analoginput EY

Generell sollte die Programmierung in Schleifen erfolgen. Wenn das Interface
nicht ca. alle 300 ms einen Steuerbefehl erhält, so schalten die Motoren
sich selbständig aus.

Die Mail:

Hallo,

das Programmieren des seriellen Interfaces Fischertechnik ist unter Linux
zusammen mit C garnicht so schwierig.

Als erstes ist die serielle Schnittstelle zu programmieren:
9600Bd, 8 Datenbit, 1 Stoppbit, keine Parität (9600 Bd, 8N1)

#include

#define SER_SPEED_9600 B9600
#define SER_0 „/dev/ttyS0“

Als zweites kann die Steuerung mit 3 Befehlen vorgenommen werden:
Das Kommando C1 sendet den Motorstatus und empfängt die 8 EA-Zustände
Das Kommando C5 sendet den Motorstatus , empfängt die 8 EA-Zustände
und 2 * 8 Bit Analog EX
Das Kommando C9 sendet den Motorstatus , empfängt die 8 EA-Zustände
und 2 * 8 Bit Analog EY
1.Byte Interfacebefehl ( -> senden)

C1 nur EA-Zustand
C5 EA-Zustand + Analog EX
C9 EA-Zustand + Analog EY
2.Byte Motorzustand ( -> senden)
76543210
00000000 alle Motore aus
00000001 Motor 1 links
00000010 Motor 1 rechts
00000011 ist zu vermeiden !
.
. etc.
3. Antworten des Interfaces (

Hallo,

ich möchte unter Linux mein serielles Interace von
Fischertechnik mit C ansteuern.

Vielleicht hilft Dir der Link weiter:
http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/i…

Gruß

Fritze

Hallo,

ich möchte unter Linux mein serielles Interace von
Fischertechnik mit C ansteuern.
Dazu habe ich bis jetzt die serielle Schnittstelle göffnet(mit
fopen("/dev/ttyS0", „a“)

Neben Frite’s Link ist der hier wahrscheinlich auch noch interessant: http://www.easysw.com/~mike/serial/

Gruß
Andreas

Vielen Dank, beim überfliegen(gelesen wird offline) schienen mir die zu fragenden Punkte aus dem Weg geräumt sein(ich habe was von daten auf schnittstelle schreiben gelesen).

Hört sich vielleicht nicht so überzeugend an, ist es aber in jedem Fall,

Vielen Dank
leon burkard