Digimatic Protokoll mit 328P auslesen von einer Messuhr

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Digimatic Protokoll mit 328P auslesen von einer Messuhr

      Hallo zusammen,
      nach längerer Abwesenheit habe ich ein neues Projekt im Auge.
      Es geht um ein Messystem welches anhand von Schaltpunkten eine Wegstrecke messen soll.
      Die meisten Features habe ich implementiert und das funktioniert soweit auch, aber die Messuhr die den Weg misst, arbeitet mit dem sogenannten Digimatic Protokoll.
      Hab es angehängt...

      Jetzt meine Frage, ich hab nix im Netz gefunden um dies mit BASCOM umzusetzen.
      Hat sowas schon mal jemand erfolgreich gemacht?
      Wäre super wenn mir da jemand helfen könnte dabei.

      Vielen lieben Dank bereits im Voraus!

      Gruß
      blacky
      Files
    • ich denk mal, mit shiftin , das du mit dem REQ triggerst, kriegst du die bits, die du dann weiterverarbeiten kannst. Mit shift in die passende Richtung schieben, zB.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • mit REQ das Einlesen starten, zunächst mit shiftin 2 bytes, dann gleich folgend mit shiftin die 4 bytes, die die gewünschten Daten enthalten und dann müsste man doch schon fertig sein. Achso, der Dezimalpunkt muss noch eingerechnet werden.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ok.. dafür sag ich schon mal danke!
      Ich bin noch nicht so weit das Programm zu zeigen aber ich denke ich werd erstmal nen Versuchsaufbau machen um die Messuhr auszulesen....
      Noch eine Frage, mit Shiftin kann ich ja jeden beliebigen Pin verwenden oder?

      Da die meisten anderen Schnittstellen bereits in Verwendung sind...

      Gruß
      blacky

      Anbei noch ein Bild der verwendeten Messuhr
      Files
      • Messuhr.jpg

        (9 kB, downloaded 106 times, last: )
    • Hallo Leute,
      sorry dass ich so lange gebraucht hab aber ich hab das Ding geknackt.
      Vorab schon mal Danke für die Hilfe von euch.
      Leider passt der Code von dir Mitch64 nicht auf dieses Protokoll.. Hat mich zig Versuche gekostet bis ich das endlich kapiert hab, trotzdem Danke dir!


      Anbei der Funktionsfähige Code:

      BASCOM Source Code: Auslesen Digimatic Code

      1. $regfile = "m32def.dat"
      2. $crystal = 8000000 'Interne 8MHz verwendet ohne 1/8
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. $baud = 19200 'Baudrate
      7. Config Portc.0 = Input 'Daten Eingang
      8. Config Portc.1 = Input 'Takt Eingang
      9. Portc = 1
      10. 'd1 4 Digits (4Bit) sind immer &HF
      11. Dim d1 As Byte 'd2 4 Digits (4Bit) sind immer &HF
      12. Dim d2 As Byte 'd3 4 Digits (4Bit) sind immer &HF
      13. Dim d3 As Byte 'd4 4 Digits (4Bit) sind immer &HF
      14. Dim d4 As Byte 'd5 4 Digits (4Bit) Vorzeichen des Wertes 1000 für -, 0000 für +
      15. Dim d5 As Byte 'd6 4 Digits (4Bit) 100er Stelle des Wertes
      16. Dim d6 As Byte 'd7 4 Digits (4Bit) 10er Stelle des Wertes
      17. Dim d7 As Byte 'd8 4 Digits (4Bit) 1er Stelle des Wertes
      18. Dim d8 As Byte 'd9 4 Digits (4Bit) 0.1er Stelle des Wertes '
      19. Dim d9 As Byte 'd10 4 Digits (4Bit) 0.01er Stelle des Wertes
      20. Dim d10 As Byte 'd11 4 Digits (4Bit) 0.001er Stelle des Wertes
      21. Dim d11 As Byte 'd12 4 Digits (4Bit) Dezimalpunkt, ist hier nicht implementiert da immer gleich
      22. Dim d12 As Byte 'd13 4 Digits (4Bit) Masseinheit, 0000 = mm, 0001 = inch
      23. Dim d13 As Byte 'Ergebnisausgabe als Vorzeichenbehafteter Wert
      24. dim Erg as Single 'Rechenvariable für Zwischenergebnisse
      25. dim zw as single
      26. '****************************************************Mainloop***********************************************************
      27. Do
      28. '**************Daten 4 Bit weise einlesen***********************************
      29. Shiftin PinC.0 , Pinc.1, d1, 7 , 4
      30. Shiftin PinC.0 , Pinc.1, d2, 7 , 4
      31. Shiftin PinC.0 , Pinc.1, d3, 7 , 4
      32. Shiftin PinC.0 , Pinc.1, d4, 7 , 4
      33. Shiftin PinC.0 , Pinc.1, d5, 7 , 4
      34. Shiftin PinC.0 , Pinc.1, d6, 7 , 4
      35. Shiftin PinC.0 , Pinc.1, d7, 7 , 4
      36. Shiftin PinC.0 , Pinc.1, d8, 7 , 4
      37. Shiftin PinC.0 , Pinc.1, d9, 7 , 4
      38. Shiftin PinC.0 , Pinc.1, d10, 7 , 4
      39. Shiftin PinC.0 , Pinc.1, d11, 7 , 4
      40. Shiftin PinC.0 , Pinc.1, d12, 7 , 4
      41. Shiftin PinC.0 , Pinc.1, d13, 7 , 4
      42. '**************Alle Werte in ein Byte um 4 nach rechts verschieben**********
      43. shift d1, right, 4
      44. shift d2, right, 4
      45. shift d3, right, 4
      46. shift d4, right, 4
      47. shift d5, right, 4
      48. shift d6, right, 4
      49. shift d7, right, 4
      50. shift d8, right, 4
      51. shift d9, right, 4
      52. shift d10, right, 4
      53. shift d11, right, 4
      54. shift d12, right, 4
      55. shift d13, right, 4
      56. '***********Berechnung der einzelnen Werte mit deren Potenzen****************
      57. Erg = d6 * 100
      58. zw = d7 * 10
      59. Erg = Erg + zw
      60. zw = 0
      61. Erg = Erg +d8
      62. zw = d9 * 0.1
      63. Erg = Erg + zw
      64. zw = 0
      65. zw = d10 * 0.01
      66. Erg = Erg + zw
      67. zw = 0
      68. zw = d11 * 0.001
      69. Erg = Erg + zw
      70. zw = 0
      71. '****************Berücksichtigung des Vorzeichens****************************
      72. If d5 = 8 then
      73. Erg = Erg * -1
      74. endif
      75. '****************Ausgabe Serielle Schnittstelle******************************
      76. Print Fusing(Erg , "#.###")
      77. Loop
      78. End
      Display All
      Anmerkung:
      Ich habe die Verschiebung des Dezimalpunktes hier nicht variabel implementiert, da meine Messuhr den Punkt immer an der gleichen Stelle hat.
      Ebenso habe ich festgestellt, dass manche der Pakete in der Spezifikation sehr irreführend dargestellt werden!
      Die Werte aber stimmen wenigstens... :)
      Wers brauchen kann, gerne :)
      Sollte noch jemand Verbesserungsvorschläge haben, immer her damit.

      Gruß
      blacky