TXT 4.0 und VSC server

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Techum
Beiträge: 180
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: TXT 4.0 und VSC server

Beitrag von Techum » 09 Sep 2026, 22:27

Hallo Torsten
genau so mache ich es ja auch 😀
Es klappt trotzdem _noch_ nicht, wie es soll.
Ich teste also am Wochenende den C++ Code mit einem AS5600. Wenns funktioniert schicke ich den Code -
Ist irgendetwas zu beachten? Ich würde auslesen und den Winkel ausgeben.

ich hätte auch einen BMX055 hier, allerdings noch einen mit 10Pin Anschluss - für den Fall, dass Du in Erwägung ziehst, dass bei Deinem die I2C Schnittstelle spinnt.

Mehr habe ich an I2C noch nicht im Sortiment. Ggf macht noch jemand mit, vielleicht @Calliope?

Schönen Abend
Frank

Torsten
Beiträge: 345
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: TXT 4.0 und VSC server

Beitrag von Torsten » 10 Sep 2026, 07:19

Hallo Frank,
Techum hat geschrieben: ↑
09 Sep 2026, 22:27
Ich teste also am Wochenende den C++ Code mit einem AS5600. Wenns funktioniert schicke ich den Code -
Ist irgendetwas zu beachten? Ich würde auslesen und den Winkel ausgeben.
Ja, so machen wir's 🙂

Viele Grüße
Torsten

Benutzeravatar
calliope
Beiträge: 217
Registriert: 11 Mär 2025, 12:02

Re: TXT 4.0 und VSC server

Beitrag von calliope » 10 Sep 2026, 20:46

Techum hat geschrieben: ↑
09 Sep 2026, 22:27
Mehr habe ich an I2C noch nicht im Sortiment. Ggf macht noch jemand mit, vielleicht @Calliope?
Ich programmiere nur ROBO Pro Coding und die 3 aktuellen Controller. Alles andere war vor meiner fischertechnik Zeit.
Außerhalb von fischertechnik Controllern habe ich vom Heimcomputer Z 9001 bis Calliope aber auch schon viel gemacht.

Für I²C Programmierung bevorzuge ich die Datenblätter mit Register-Map und verwende fast nie Code Beispiele aus GitHub. Es geht nämlich meistens viel einfacher. Und funktioniert dafür auf TXT 4.0 und RX. Es wird nur das Projekt konvertiert.
I²C für Calliope, TXT 4.0 und RX Controller.
https://git.fischertechnik-cloud.com/users/i2c/projects

Techum
Beiträge: 180
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: TXT 4.0 und VSC server

Beitrag von Techum » 10 Sep 2026, 21:56

Hallo Torsten
Torsten hat geschrieben: ↑
10 Sep 2026, 07:19
Ja, so machen wir's 🙂
Läuft wie geschmiert:

Code: Alles auswählen

#include <cstdint>
#include <cstring>
#include <iostream>
#include <stdexcept>

#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>

constexpr uint8_t AS5600_ADDRESS = 0x36;
constexpr uint8_t RAW_ANGLE_REG = 0x0C;

int main()
{
    // Open the TXT 4.0 I2C bus
    int fd = open("/dev/i2c-3", O_RDWR);

    if (fd < 0) {
        perror("Cannot open /dev/i2c-3");
        return 1;
    }

    try {
        uint16_t previous = 0;
        bool havePrevious = false;

        while (true) {
            uint8_t reg = RAW_ANGLE_REG;
            uint8_t data[2] = {0, 0};

            // Combined write + read transaction
            i2c_msg messages[2];

            messages[0].addr = AS5600_ADDRESS;
            messages[0].flags = 0;
            messages[0].len = 1;
            messages[0].buf = &reg;

            messages[1].addr = AS5600_ADDRESS;
            messages[1].flags = I2C_M_RD;
            messages[1].len = 2;
            messages[1].buf = data;

            i2c_rdwr_ioctl_data transaction;
            transaction.msgs = messages;
            transaction.nmsgs = 2;

            if (ioctl(fd, I2C_RDWR, &transaction) < 0) {
                perror("AS5600 I2C read failed");
                close(fd);
                return 1;
            }

            uint16_t raw =
                (((uint16_t)data[0] << 8) | data[1]) & 0x0FFF;

            double angle = raw * 360.0 / 4096.0;

            if (havePrevious) {
                int delta = static_cast<int>(raw) -
                            static_cast<int>(previous);

                // Correct for 0° / 360° wrap-around
                if (delta > 2048)
                    delta -= 4096;
                else if (delta < -2048)
                    delta += 4096;

                const char* direction;

                if (delta > 0)
                    direction = "CW";
                else if (delta < 0)
                    direction = "CCW";
                else
                    direction = "STOP";

                std::cout
                    << "raw=" << raw
                    << "  angle=" << angle
                    << "  delta=" << delta
                    << "  direction=" << direction
                    << std::endl;
            }

            previous = raw;
            havePrevious = true;

            usleep(10000);  // 10 ms = 100 samples/second
        }
    }
    catch (...) {
        close(fd);
        throw;
    }
}
über SSH auf dem TXT4.0 gestartet
output from ssh
output from ssh
ssh_output.png (52.7 KiB) 1295 mal betrachtet
sollte Ok sein, denke ich.

Schönen Abend
Frank

Torsten
Beiträge: 345
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: TXT 4.0 und VSC server

Beitrag von Torsten » 16 Sep 2026, 22:05

Hallo Frank,

ich bin jetzt mit dem IC2 etwas weiter gekommen. Inzwischen kann ich beim fischertechnik Bewegungssensor erfolgreich die Beschleunigung online über den ftrobopy_server über i2c abfragen.

Ich habe die neueste Version (noch beta) auf github hochgeladen, mit einem Python-Beispiel für den BMX055.

https://github.com/ftrobopy/ftrobopy_server

Viele Grüße
Torsten

Techum
Beiträge: 180
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: TXT 4.0 und VSC server

Beitrag von Techum » 20 Sep 2026, 16:57

Hallo Torsten,
Torsten hat geschrieben: ↑
16 Sep 2026, 22:05
Ich habe die neueste Version (noch beta) auf github hochgeladen, mit einem Python-Beispiel für den BMX055.
Klasse!
Ich verstehe das so, dass andere Sensoren auch funktionieren sollten.
Ich habe es folglich gleich mit dem AS5600 versucht und zwar so:

Code: Alles auswählen

import ftrobopy

txt = ftrobopy.ftrobopy('192.168.2.100', 65000)

while True:
    data = txt.i2c_read(0x36, 0x0C, data_len=2, debug=True)
    print("data:", [hex(x) for x in data])
    print(type(data))
    raw_angle = ((data[0] << 8) | data[1]) & 0x0FFF
    angle = raw_angle * 360.0 / 4096
    print(raw_angle)
    print(angle)
Ergebnis
i2c_read, sendbuffer: B9 DB 3B 39 01 00 00 00 36 00 00 00 01 00 02 00 0C
i2c_read, receivebuffer: 87 FD 0D 90 02 00 00 00 01 00 02 00 00 00
data: ['0x0', '0x0']
<class 'bytes'>
0
0.0
...

Der ftrobopy_server antwortet, allerdings antwortet er immer mit 0, egal welcher Winkel anliegt.

Der Server logged es so:
I2C: 17 bytes read: b9 db 3b 39 1 0 0 0 36 0 0 0 1 0 2 0 c
I2C: sending bytes: 87 fd d 90 2 0 0 0 1 0 2 0 0 0
...

Viele Grüße und schönes Wochenende
Frank

Torsten
Beiträge: 345
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: TXT 4.0 und VSC server

Beitrag von Torsten » 20 Sep 2026, 23:11

Hi Frank,

welchen I2C-Port/Stecker auf dem TXT 4.0 verwendest Du ?
Derzeit ist noch der rechte Stecker mit /dev/i2c-3 im ftrobopy_server hardcodiert. Probier mal beide Seiten aus.

Viele Grüße
Torsten

Torsten
Beiträge: 345
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: TXT 4.0 und VSC server

Beitrag von Torsten » 21 Sep 2026, 09:56

Hallo Frank,

sorry, vergiss bitte meine letze Antwort, das war Quatsch!
(das I2C-Device ist immer bei /dev/i2c-3, egal welchen TXT 4.0 Stecker du verwendest)

Die I2C-Adresse des BMX055 (0x18) ist im ftrobopy_server versehentlich noch hardcodiert.

Heute abend kann ich die korrigierte Version auf github hochladen.

Viele Grüße
Torsten

Torsten
Beiträge: 345
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: TXT 4.0 und VSC server

Beitrag von Torsten » 21 Sep 2026, 21:18

Hallo Frank,

die nächste Test-Version steht auf github zur Verfügung.

Viele Grüße
Torsten

Techum
Beiträge: 180
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: TXT 4.0 und VSC server

Beitrag von Techum » 24 Sep 2026, 21:10

Hallo Torsten,
Torsten hat geschrieben: ↑
21 Sep 2026, 21:18
die nächste Test-Version steht auf github zur Verfügung.
Die neue Version läuft bestens.

Code: Alles auswählen

import ftrobopy
txt = ftrobopy.ftrobopy('192.168.2.100', 65000)
while True:
    # read AS5600 
    data = txt.i2c_read(0x36, 0x0C, data_len=2, debug=False)
    # get angle and convert into degrees
    raw_angle = ((data[0] << 8) | data[1]) & 0x0FFF
    angle = raw_angle * 360.0 / 4096
    # output
    print(angle)
Macht es den Server eigentlich langsam dass er jede I2C Kommunikation protokolliert?
Obwohl debug "False" ist, ist der ftrobopy_server sehr gesprächig:
ftrobopy_server_I2C.png
ftrobopy_server_I2C.png (35.92 KiB) 168 mal betrachtet
Wer wie ich nur "wichtige" infos sehen will, kann ftrobopy_server so starten (wahrscheinlich für die meisten hier "kalter Kaffee").
./ftrobopy_server >/dev/null
Gerade bei Winkelmessung will man ja ggf. viele Werte in kurzer Zeit lesen.

Vielen lieben Dank, Torsten!

Torsten
Beiträge: 345
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: TXT 4.0 und VSC server

Beitrag von Torsten » 24 Sep 2026, 22:00

Hallo Frank,

die "Gesprächigkeit" in Bezug auf die I2C-Kommunikation werde ich im ftrobopy_server demnächst abstellen.

Auf jeden Fall schonmal vielen Dank für deine Tests und Hinweise. Ich halte dich auf dem Laufenden.

Viele Grüße
Torsten

Techum
Beiträge: 180
Registriert: 25 Dez 2014, 20:50
Kontaktdaten:

Re: TXT 4.0 und VSC server

Beitrag von Techum » 27 Sep 2026, 19:04

Hallo Torsten
Torsten hat geschrieben: ↑
24 Sep 2026, 22:00
Auf jeden Fall schonmal vielen Dank für deine Tests und Hinweise. Ich halte dich auf dem Laufenden.
Ich / wir haben zu danken, perfekt.

Ist Dir ggf. folgender ftrobopy Fehler bekannt?
...site-packages\ftrobopy.py" , line 783, in updateConfig
buf = struct.pack('<Ihh B B 2s BBBB BB2s BB2s BB2s BB2s BB2s BB2s BB2s BB2s B3s B3s B3s B3s 16h', *fields)
struct.error: short format requires -32768 <= number <= 32767
Exception ignored in: <function tqdm.__del__ at 0x00000295676F0A40>
File "C:\Users\f-her\OneDrive\Python\ML_motor\.venv\Lib\site-packages\rich\console.py", line 2084, in _write_buffer
ImportError: sys.meta_path is None, Python is likely shutting down

Ich setze "power" auf einen Ausgang und stelle vorher nochmals sicher, dass der Wert erlaubt ist:
power = max(200, min(500, int(round(self.power))))

Das geht Zigtausendmal gut und dann kommt der Fehler. Läuft da ggf. ein Buffer voll?
Der ftrobopy_server läuft weiter, es scheint eher im ftrobopy selbst ein Problem zu sein.
Die Werte, die geschrieben werden sollen, sind ok:
Meine exception sagt mir: "Error applying power 295 , to magnet 3"
Nach dem ersten Fehler gibt es keine erfolgreichen Schreibvorgänge mehr.

Hintergrund:
Ich trainiere ein SOC Modell was das Timing für meinen Bürstenlosmotor lernen soll. Pro Umdrehung braucht es 4x3x2 Schreibvorgänge, solange der Motor langsam dreht, bei schnellerer Drehzahl werden Schreibvorgänge übersprungen. Die Zielgeschwindigkeit entspricht ca. 300 U/min. Zwar kommt die KI da noch nicht hin, sie probiert aber fleißig und schreibt freilich auch Werte.

3000 Trainingsschritte laufen - allerdings gibt es je nach erreichter Drehzahl pro Schritt etliche (ca. 10) Umdrehungen mit sagen wir mal 20 Schreibvorgängen pro Umdrehung. Größenordung bei Fehler könnte bei 600.000 liegen.

Was könnte ich als Workaround machen - mitzählen, ftrobopy programmtechnisch trennen und neu verbinden?

Schönen Abend
Frank

Antworten