Hardware-UART auf 6 Datenbits einstellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hardware-UART auf 6 Datenbits einstellen

      Hallo zusammen,
      ich versuche für die Modellbahnsteuerung ein Datenwort mit 6 Bits zu senden. Wie kann ich das einstellen? In den Optionen/Kommunikation kann man es zwar eintragen, aber es funktioniert nicht. Der Wert 255 wird trotzdem gesendet. Auch dieZeile: Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 6 , Clockpol = 0 bringt nicht den gewünschten Effekt. Wie kann man das noch deklarieren?

      Gruß be-cool :(
    • Hallo,
      ich benutze einen AtMega32. Das Terminalprogramm zeigt mir an, dass ich 6 Datenbits empfange - überträgt aber trotzdem sauber die 255, was ja irgendwie nicht gehen sollte.

      Quellcode

      1. $regfile = "m32def.dat"
      2. $crystal = 16000000
      3. $hwstack = 80
      4. $swstack = 80
      5. $framesize = 64
      6. $baud = 38400
      7. Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 6 , Clockpol = 0
      8. 'Open "com1:" For Binary As #1
      9. Dim Wert(18) As Byte
      10. Dim Leer As Byte
      11. Dim Z As Byte
      12. Dim I As Byte
      13. Dim X As Byte
      14. Leer = 56
      15. '(
      16. Wert(1) = 63 ' Anfang Adresse 78 (1) Dampflok
      17. Wert(2) = 63
      18. Wert(3) = 0
      19. Wert(4) = 63
      20. Wert(5) = 0
      21. Wert(6) = 63
      22. Wert(7) = 0
      23. Wert(8) = 63
      24. Wert(9) = 0 ' Anfang Funktion = 0
      25. Wert(10) = 0
      26. Wert(11) = 0 ' Anfang Fahrstufe 7
      27. Wert(12) = 0
      28. Wert(13) = 0
      29. Wert(14) = 0
      30. Wert(15) = 0
      31. Wert(16) = 0
      32. Wert(17) = 63
      33. Wert(18) = 63
      34. ')
      35. Dim A As Byte
      36. Dim B As Byte
      37. A = 255
      38. B = 15
      39. Wert(1) = 0b00 ' Anfang Adresse 78 (1) Dampflok
      40. Wert(2) = 0b00
      41. Wert(3) = 0b111111
      42. Wert(4) = 0b00
      43. Wert(5) = 0b111111
      44. Wert(6) = 0b00
      45. Wert(7) = 0b111111
      46. Wert(8) = 0b00
      47. Wert(9) = 0b00 ' Anfang Funktion = 0
      48. Wert(10) = 0b00
      49. Wert(11) = 0b00 ' Anfang Fahrstufe 7
      50. Wert(12) = 0b00
      51. Wert(13) = 0b00
      52. Wert(14) = 0b00
      53. Wert(15) = 0b00
      54. Wert(16) = 0b00
      55. Wert(17) = 0b111111
      56. Wert(18) = 0b111111
      57. Wait 5
      58. Print 255;
      59. Print 15;
      60. Print A;
      61. Print B;
      62. Waitms 100
      63. ' ???
      64. Do
      65. For Z = 1 To 18
      66. Print Wert(z);
      67. Next Z
      68. Waitus 1250
      69. For X = 1 To 18
      70. Print Wert(x);
      71. Next X
      72. Waitus 1250
      73. For I = 1 To 18
      74. Print Leer;
      75. Next I
      76. Waitms 5
      77. Loop
      Alles anzeigen
    • Ok, ich mach mich mal schlau. Danke. Und die 255 kommen in einem Byte (binär 8* die 1) und das sollte die Serielle bei 6 Datenbits ja wirklich auf 2 Byte aufteilen. Ich dachte erkann nur Werte übertragen, die kleiner 64 sind. Irgendwo habe ich wahrscheinlich noch eine Blockade im Hirn.
    • Wie Michael schon schrieb, überträgt das Print Kommando die 255 als einzelne ASCII Ziffern '2' (ASCII=&H32), '5' (ASCII=&H35) und nochmal '5'.
      Da die Ziffern in ASCII alle unterhalb von 63 (dem Maximum bei 6-Bit) liegen, werden sie ganz normal übertragen.
      Den Wert &HFF (also 255) kannst du mit 6-Bit nicht übertragen, da nimmt der Print Befehl wieder die unteren 6-Bit, in dem Fall also &H3F (also 63).
      Da hilft auch kein Printbin.
    • Hallo,
      das Problem ist gelöst. Mein Balken vorm Kopf war, dass ich nicht wusste dass alle Werte vor dem Senden in ASCII gewandelt werden. Printbin macht genau das was ich will. Es geht um die Erzeugung von trinären Bits für die Steuerung der Märklin-Loks. Danke für die Tipps und Denkhinweise.
      Gruß be-cool a_22_9ac28a82
    • Franz schrieb:

      oder kannst du die 6-bit überhaupt nicht einstellen?
      Eigentlich zu spät aber. Falls mal ein AVR genutzt werden soll der keine 6 Bit Einstellung kann, wäre das auch kein Problem . Einfach 8 Bit senden und dafür sorgen das die oberen beiden Bits immer High sind. (0=192...63=255). Andersrum gehts leider nicht. Ein 8 bit Empfänger gerät aus dem Takt wenn mehr als ein (6bit)Byte hintereinander gesendet wird.