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.
-
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 -
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 (