TTL-Pegel und deren Auswertung.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Hallo,

wer von euch hat schon mal mit TTL-Pegel etwas zu tun gehabt?

Ich habe einen USB TO RS232/485/TTL Konverter am Rechner hängen.
Den zapfe ich über USB an.

Am TTL-Eingang (RXD) habe ich eine Spannung von 0-10 hängen. Diese verfolge ich am Oszi mit.

Mein Code

Code: Alles auswählen

import serial

ser = serial.Serial(port='/dev/ttyUSB0', parity="N", bytesize=8, stopbits=2, baudrate=9600)
ser.flushInput()

while True:
    data = bytes.hex(ser.read())
    print(str(ser.read()) + " - " + str(data))
  
Als Ausgabe erhalte ich unterhalb von 5V einen leeren String.
>5V = b''
5V = b'\x00' - 00
6V = b'P' - 50
7V = b'T' - 54
8 - 10V = b'U' - 55

Dezimal wären das Werte von 80 - 85. Was sollte mir das sagen?

Gemessen bei 5000Hz
Wenn ich die Frequenz verändere, verändern sich die Werte im ganzen vollständig.

3000Hz = b'\x12' - 12

Gruß vom Ralf
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Bin gerade am denken.
Der Wert spielt ja an sich keine Rolle.
Kleiner 5 ist Low, größer ist High.
Benutzeravatar
grubenfox
User
Beiträge: 602
Registriert: Freitag 2. Dezember 2022, 15:49

kiaralle hat geschrieben: Freitag 4. Oktober 2024, 11:48 Hallo,

wer von euch hat schon mal mit TTL-Pegel etwas zu tun gehabt?
Hier... das ist aber schon sehr lange her. Mein erster Gedanke bei TTL: 0V Low /5V High
kiaralle hat geschrieben: Freitag 4. Oktober 2024, 11:48 Am TTL-Eingang (RXD) habe ich eine Spannung von 0-10 hängen. Diese verfolge ich am Oszi mit.
.. und bei 10V an TTL ist der zweite Gedanke: nun ist die Hardware kaputt
Gut, je nach Duty Cycle mag das noch gut gehen. Aber gesund ist das nicht....
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Hast in beiden Sachen recht.
Meine Hardware reagiert bei fallenden Pegel nahe 5V mit dem Signal High. Der Pegel muss 5,2V kurz übersteigen.
Konnte ich mit 1Hz schön verfolgen.
imonbln
User
Beiträge: 190
Registriert: Freitag 3. Dezember 2021, 17:07

kiaralle hat geschrieben: Freitag 4. Oktober 2024, 11:48 wer von euch hat schon mal mit TTL-Pegel etwas zu tun gehabt?
Hab ich schon mal gehört :)
kiaralle hat geschrieben: Freitag 4. Oktober 2024, 11:48 Am TTL-Eingang (RXD) habe ich eine Spannung von 0-10 hängen. Diese verfolge ich am Oszi mit.

10V normal sind bei TTL 5V, heute meisten mit LVTTL sogar nur 3,3V klingt etwas nach außerhalb der Spezifikation.
kiaralle hat geschrieben: Freitag 4. Oktober 2024, 11:48 ser = serial.Serial(port='/dev/ttyUSB0', parity="N", bytesize=8, stopbits=2, baudrate=9600)
Bist du dir sicher mit den 9600/8N2, zwei Stopbits sind eher ungewöhnlich 9600/8N1 ist wahrscheinlicher. Passt auch mehr zu dem Datenblatt.

Außerdem verwirrt deine Ausgabe etwas, bis du die Bedeutung der Bytes verstanden hast würde ich nicht das zweite Byte, als String vor dem ersten, welches du in Hex konvertiert hast, ausgeben. Btw von den Screenshots im Datenblatt würde ich 3 Bytes erwarten.

Änder mal Programm so ab und vielleicht wirst du dann Schlauer.

Code: Alles auswählen

import serial

ser = serial.Serial(port='/dev/ttyUSB0', parity="N", bytesize=8, stopbits=1, baudrate=9600)
ser.flushInput()

while True:
    data = ser.read(3)
    print(data.hex(' '))
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Hi,
habe wieder mal etwas Zeit.
Dein Programm habe ich mal übernommen.
Woher ich die Stopits = 2 habe ???? Ist mir nicht aufgefallen :-)

Als Ergebnis mit deinem Programm erhalte ich

00 00 00 bei jeden TTL-Signal
imonbln
User
Beiträge: 190
Registriert: Freitag 3. Dezember 2021, 17:07

Schade, aber letzten Endes ist der TTL Eingang des USB TO RS232/485/TTL auch nur eine serielle Schnittstelle, welche halt nur auf 5 V oder 3,3V läuft statt der üblichen 12V. Ich denke Du hast jetzt 2 Möglichkeiten, entweder Du erzählst und wie der Input des USB TO RS232/485/TTL erzeugt wird, also wo Du hin angeschlossen hast. Alternativ kannst Du auch den TTL Aufbau aus dem Datenblatt mit einem zweiten USB2TTL Konverter nachbauen, um so erstmal Dein Programm zu entwickeln.

Es könnte Dir auch helfen in einem Forum wie https://www.mikrocontroller.net/ nachzufragen, da die Personen dort mehr Erfahrungen mit TTL 2UART haben und wahrscheinlich besser helfen können.
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

entweder Du erzählst und wie der Input des USB TO RS232/485/TTL erzeugt wird
Ich erzeuge das Signal über einen Frequenzgenerator 0-5,25V, Rechtecksignal.
Das Signal muss hier etwas höher als 5V sein. Wenn der Pegel lällt, wird im TTL ein Signal ausgelöst.

Es wird auch kein verwertbare Information kommen, da ja nur Falling-High ein Signal auslöst.
Ansonsten, gibt es einfach kein Signal.

Hab mal das Skript etwas umgebaut und es zählt die Impulse hoch.
Wenn man mit der Frequenz höher geht, muss man die bautrate angleichen. Mit 9600 ist dann scheinbar nicht mehr viel zu reisen.

Code: Alles auswählen

import serial

ttl = 0
ser = serial.Serial(port='/dev/ttyUSB0', parity="N", bytesize=8, stopbits=1, baudrate=115200)
ser.flushInput()

while True:
    data = ser.read(3)
    # print(data.hex(' '))
    if data.hex(' ') == '00 00 00':
        ttl += 1
        print(ttl)


Die Anzahl der Bits wird hierbei uninteressant sein. Mehr wie 00 wird nicht kommen.

Eventuell baue ich mir mal einen TTL mit 3 Eingängen und kann so prüfen ob ein Inkrementeal-Geber pro Umdrehungen auch alle Signale ausgibt.

Ein Danke in die Runde.
imonbln
User
Beiträge: 190
Registriert: Freitag 3. Dezember 2021, 17:07

kiaralle hat geschrieben: Samstag 12. Oktober 2024, 13:53 ich erzeuge das Signal über einen Frequenzgenerator 0-5,25V, Rechtecksignal.
Es ist verdammt lange her das ich mir die Pegel auf einen UART mit der Einstellung 8N1 angesehen habe. Daher bin ich unsicher, ob ein Frequenzgenerator das mittel der Wahl ist um den USB TO RS232/485/TTL Konverter zu testen. Falls ich mich recht Erinnere war das Startbit Low Activ und das Stopbit ein Hight Signal.

Die Erwartung wäre also, wenn dein Versuchsaufbau funktioniert und der Frequenzgenerator die richtige Frequenz hat (ca 115,2 kHz, bei 115200 8N1), das dein Programm entweder 0x55 oder 0xAA empfängt. Je nachdem ob der High oder Low Pegel zuerst gesendet wird.
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Hi,
ich bin ja noch eine Antwort schuldig.

Dein Vorschlag mit der Frequenz konnte ich so nachbilden.

Gruß Ralf
imonbln
User
Beiträge: 190
Registriert: Freitag 3. Dezember 2021, 17:07

Je länger ich darüber nach denke, desto sicher bin ich mir das ein normaler Frequenzgenerator nicht in der Lage sein wird UART konforme Bytes zu erzeugen. Siehe zum Beispiel https://youtu.be/sTHckUyxwp8?si=2odQCoXSF2HlUM9P&t=153

Vielleicht kaufst du dir für kleines Geld ein 2 USB2TTL Konverter (die fangen bei AliExpress bei 2 Euro an und kosten auch bei Amazon meist nicht mehr als 10 Euro ) und Testes damit dein Programm.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1224
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich glaube es handelt sich hier um das typische XY Problem.
Das XY-Problem ist ein Kommunikationsproblem, welches hauptsächlich bei der Kundenbetreuung und ähnlichen Situationen auftritt. Hierbei wird das eigentliche Problem, X, von der Person, die Unterstützung sucht, verschleiert.
TTL sagt nur über den Signalpegel etwas aus (5V) und nichts über das Protokoll (UART).
Was hast du vor? Was willst du auswerten?

Bei TTL denke ich z.B. zuerst an Encoder, die den Gray-Code ausgeben.

Wenn das Protokoll nicht UART ist, kannst du mit UART auch nichts anfangen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

imonbln hat geschrieben: Sonntag 27. Oktober 2024, 19:23 Je länger ich darüber nach denke, desto sicher bin ich mir das ein normaler Frequenzgenerator nicht in der Lage sein wird UART konforme Bytes zu erzeugen. Siehe zum Beispiel https://youtu.be/sTHckUyxwp8?si=2odQCoXSF2HlUM9P&t=153

Vielleicht kaufst du dir für kleines Geld ein 2 USB2TTL Konverter (die fangen bei AliExpress bei 2 Euro an und kosten auch bei Amazon meist nicht mehr als 10 Euro ) und Testes damit dein Programm.
Ja das ist einleuchtend.
Der Frequenzgenerator erzeugt keine UART konforme Bytes.
Für einen speziellen Zweck war mein Test nicht gedacht.
Ist nur eine Schlachtwetterspielerei, 3... Bildungsweg.
Mit 58 darf man das :-)
Benutzeravatar
__blackjack__
User
Beiträge: 14002
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@kiaralle: Randbemerkungen zu den Quelltexten: Man sollte nicht mehr die API von `serial` verwenden die sich nicht an die Namenskonventionen hält. Also statt `flushInput()` verwendet man `reset_input_buffer()`.

Methoden sollte man auf den Objekten aufrufen und nicht auf der Klasse, also ``ser.read().hex()`` statt ``bytes.hex(ser.read())``.

Die Werte sind eher nicht als Hexadezimal- oder Dezimaldarstellung interessant, sondern als Binärdarstellung:

Code: Alles auswählen

In [267]: bin(0x50)
Out[267]: '0b1010000'

In [268]: bin(0x54)
Out[268]: '0b1010100'

In [269]: bin(0x55)
Out[269]: '0b1010101'
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Antworten