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: 175
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: 340
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: 214
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: 175
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) 13 mal betrachtet
sollte Ok sein, denke ich.

Schönen Abend
Frank

Antworten