Projektname
Umbau von 2×2 LED Matrix Anzeigen aus Bahnhofsdisplays.
Informationen
Der Treff hat zwei große Bahnhofdisplays mit LED Matrix-Anzeigen und in der Summe 4 Bahnhofsuhren gespendet bekommen. Den Fortschitt beim entschlüsseln des Anzeige-Protokolls und die folgenden Projekte dokumentieren wir hier.
Linksammlungen für weitergehende Projekte:
- Game Boy Classic direkt mit dem Display verbinden (vorerst nur ein Pad)
Eigener Controller
Wir aktuell entwickelt. Siehe https://repos.ctdo.de/ctdo/dfi-led-matrix
Bilder
Kommunikation mit dem Display (Boardcomputer)
Baud: 19200
Erste Informationssammlung (Ohne CRC Informationen):
ID = 001D = 01H 001D = 30 30 31 XX XX XX = ID END = 1B? Status Abfrage 00000000 02 53 30 30 31 30 31 9C 03 02 53 30 30 31 30 31 .S00101...S00101 00000010 9C 03 .. Eine einzelne Anfrage schickt: 02 53 XX XX XX 30 31 9C 03 Anzeige löschen 00000000 02 44 30 30 31 30 31 8B 03 02 44 30 30 31 30 31 .D00X01...D00101 00000010 8B 03 .. Eine einzelne Anfrage schickt: 02 44 XX XX XX 30 31 8B 03 Zeile löschen ( Klingt komisch / Keine Zeile in der Anfrage zu sehen ) 00000000 02 5A 30 30 31 30 31 95 03 02 5A 30 30 31 30 31 .Z00101...Z00101 00000010 95 03 .. Eine einzelne Anfrage schickt: 02 5A XX XX XX 30 31 95 03 Text senden ( In diesem Fall ist der Text "TEST" und die Zeile "1" ) 00000000 02 49 30 30 31 30 31 31 30 31 1B 30 46 4C 31 54 .I00101101.0FL1T 00000010 45 53 54 B0 03 02 49 30 30 31 30 31 31 30 31 1B EST...I00101101. 00000020 30 46 4C 31 54 45 53 54 B0 03 0FL1TEST.. 31 30 31 31 30 31 1B 30 46 4C 31 54 45 53 54 CRC-8/DARC 0xB0 Hier mit Text "TEST" und Zeile "2" 00000000 02 49 30 30 31 30 31 31 30 32 1B 30 46 4C 31 54 .I00101102.0FL1T 00000010 45 53 54 B3 03 02 49 30 30 31 30 31 31 30 32 1B EST...I00101102. 00000020 30 46 4C 31 54 45 53 54 B3 03 0FL1TEST.. Hier mit Text "T" und Zeile "1" 00000000 02 49 30 30 31 30 30 38 30 31 1B 30 46 4C 31 54 .I00100801.0FL1T 00000010 FA 03 02 49 30 30 31 30 30 38 30 31 1B 30 46 4C ...I00100801.0FL 00000020 31 54 FA 03 1T.. Hier mit Text "T" und Zeile "2" 00000000 02 49 30 30 31 30 30 38 30 32 1B 30 46 4C 31 54 .I00100802.0FL1T 00000010 F9 03 02 49 30 30 31 30 30 38 30 32 1B 30 46 4C ...I00100802.0FL 00000020 31 54 F9 03 1T.. Eine einzelne Anfrage schickt: 02 49 XX XX XX 30 31 31 30 31 1B 30 46 4C 31 54 45 53 54 B0 03 FF = Fest XX = ID YY = Zeile TT = Text ("TEST") MM = Menge AA = Ausrichtung (L|Z|R) Menge = 7 + Anzahl an Zeichen FF FF XX XX XX MM MM MM YY YY FF FF FF AA FF TT TT TT TT ?? FF 02 49 30 30 31 30 31 31 30 31 1B 30 46 4C 31 54 45 53 54 B0 03 02 49 30 31 39 30 30 38 30 31 1B 30 46 5A 31 54 E5 03 - Vom PC (Text "T" Zeile "1" Adresse "19")
Text senden funktion in JS:
function crc (string) { var cr = 255; var charArray = string.split(''); for (var cx = 0; cx < charArray.length; cx++) { var stringValue = charArray[cx].charCodeAt(0); cr = cr ^ stringValue; } return (cr | 128); } function binStringToHex1(s) { var s2 = [], c; for ( var i = 0, l = s.length; i < l; ++i ) { c = s.charCodeAt(i); s2.push( (c >> 4 ).toString(16), (c & 0xF ).toString(16)); } String.prototype.concat.apply('',s2); return s2; } function generateCommand(address, row, direction, message) { var commandBegin = "I"; while (address.length < 3) { address = "0" + address; } if (row.length == 1) { row = "0" + row; } var messageWithoutLenghtAndCrc = row + String.fromCharCode(27) + "0F" + direction + "1" + message; var lengthOfMessageWithoutCrc = messageWithoutLenghtAndCrc.length + ""; while (lengthOfMessageWithoutCrc.length < 3) { lengthOfMessageWithoutCrc = "0" + lengthOfMessageWithoutCrc; } var messageWithoutCrc = commandBegin + address + lengthOfMessageWithoutCrc + messageWithoutLenghtAndCrc; var crcFromMessage = crc(messageWithoutCrc); var messageWithCrc = String.fromCharCode(2) + messageWithoutCrc + String.fromCharCode(crcFromMessage) + String.fromCharCode(3); return messageWithCrc; } console.log(binStringToHex1(generateCommand("19", "1", "Z", "Hello World!")).join('').toUpperCase());
Toller VB Code
befehl = "I" adresse = Trim(Str(adresseesse)) Do While Len(adresse) < 3 adresse = "0" + adresse Loop If Ausr(0).Value = True Then ausrichtung = "L" If Ausr(1).Value = True Then ausrichtung = "Z" If Ausr(2).Value = True Then ausrichtung = "R" string1 = Text1(0).Text zeile = Trim(Str(zei)) If Len(zeile) = 1 Then zeile = "0" + zeile string1 = zeile + Chr(27) + "0F" + ausrichtung + "1" + string1 laengeVonAllem = Trim(Str(Len(string1))) Do While Len(laengeVonAllem) < 3 laengeVonAllem = "0" + laengeVonAllem Loop string1 = befehl + adresse + laengeVonAllem + string1 CRC_bilden: crcVonBefehl = CRC(string1) befehlMitCRC = Chr(2) + string1 + Chr(crcVonBefehl) + Chr(3) Sende_Telegram befehlMitCRC, COMnr
Function CRC(S As String) As Byte Dim Cr, Cx Cr = 255 For Cx = 1 To Len(S) Cr = Cr Xor Asc(Mid(S, Cx, 1)) Next Cx Cr = Cr Or 128 CRC = Cr End Function