Hallo liebe Gemeinde,
Zunächst einmal Sorry des ich ein neues Thema eröffne obwohl es darüber schon eins gibt, aber das andere Thema ist zwei Jahre alt und ist mit einer Diskusion ob Messschieber oder Schiebelehre im Sande verlaufen.
Nach dem ich lange gesucht hab wie man einen Messschieber ausliesst und leider nichts gefunden hatte was mir weitergeholfen hatte musste ich mir selbst helfen. Die Anschlussbelegung hab ich im Internet gefunden, soweit so gut aber einen Code für das auslesen hatte ich nicht wirklich gefunden. Denn die meisten die einen MS auslesen schreiben in ASM und dann meist auch nur für die Ausgabe an einem Pc in dem dann auch die berechnung stattfindet. Viele seiten auf die verwiesen wird sind übrigens auch schon lange vom Netz.
Da ich nicht wusste mit welchem Pegel und welcher Taktrate die signale kommen, hab ich kurzerhand mein M16 und das Glcd als Oszi(hab leider kein richtiges) eingerichtet und konnte mir erstmal einen ersten Eindruck vom Clock und Daten verschaffen. Da die Ausgänge recht hochohmig sind und ein sehr kleinen Pegel haben habe ich zwei OAmps vorgeschalten. Nachdem das erledigt war, konnte der M16 auch daten lesen, zu meiner überraschung waren die Daten fast im Klartext.
Das heisst bei meinem MS ist bit2 bis bit21 der messwert in mm dem nur noch die Kommastelle und das Vorzeichen angehängt wird. Bit1 ist bei 0 = mm und bei 1 = inch, bit22 setzt das Vorzeichen.
So nun zu meiner eigentlichen Frage ich habe unten im Code ein Format vergeben mit ..."#.##".... leider stört mich das immer der ganze Wert hin und her springt wenn sich die Wertgrösse von Einstellig vorm Komma auf Zwei bzw dann auch auf Drei stellen ändert. Kann man da irgendwelche "platzhalter" einbauen ohne führende nullen?
Das zweite, ich hatte vorher "Ergebn" as signle was mir irgendwann mal die Drehzahl anzeigen soll, wenn ich als single nehme wird mir der wert auch hier mit Kommastelle ausgegeben ich konnte es nur abstellen in dem ich "Ergebn" als integer dimensioniere. Warum ist das so???
Dann meine letzte Frage gibt es eine andere möglichkeit "Bit22" aus "M" zu entfernen als wie unten im Code mit dem hin und herschieben der werte? Mit M = NBit.22 hab ich probiert das geht nicht da meldet der Compeiler ein problem.
Der Code, bitte nicht den Kopf abreissen ist erstmal nur ein Grundgerüsst was nur einen MS ausliesst.
Danke euch schon mal
Gruss Matthias
Zunächst einmal Sorry des ich ein neues Thema eröffne obwohl es darüber schon eins gibt, aber das andere Thema ist zwei Jahre alt und ist mit einer Diskusion ob Messschieber oder Schiebelehre im Sande verlaufen.
Nach dem ich lange gesucht hab wie man einen Messschieber ausliesst und leider nichts gefunden hatte was mir weitergeholfen hatte musste ich mir selbst helfen. Die Anschlussbelegung hab ich im Internet gefunden, soweit so gut aber einen Code für das auslesen hatte ich nicht wirklich gefunden. Denn die meisten die einen MS auslesen schreiben in ASM und dann meist auch nur für die Ausgabe an einem Pc in dem dann auch die berechnung stattfindet. Viele seiten auf die verwiesen wird sind übrigens auch schon lange vom Netz.
Da ich nicht wusste mit welchem Pegel und welcher Taktrate die signale kommen, hab ich kurzerhand mein M16 und das Glcd als Oszi(hab leider kein richtiges) eingerichtet und konnte mir erstmal einen ersten Eindruck vom Clock und Daten verschaffen. Da die Ausgänge recht hochohmig sind und ein sehr kleinen Pegel haben habe ich zwei OAmps vorgeschalten. Nachdem das erledigt war, konnte der M16 auch daten lesen, zu meiner überraschung waren die Daten fast im Klartext.
Das heisst bei meinem MS ist bit2 bis bit21 der messwert in mm dem nur noch die Kommastelle und das Vorzeichen angehängt wird. Bit1 ist bei 0 = mm und bei 1 = inch, bit22 setzt das Vorzeichen.
So nun zu meiner eigentlichen Frage ich habe unten im Code ein Format vergeben mit ..."#.##".... leider stört mich das immer der ganze Wert hin und her springt wenn sich die Wertgrösse von Einstellig vorm Komma auf Zwei bzw dann auch auf Drei stellen ändert. Kann man da irgendwelche "platzhalter" einbauen ohne führende nullen?
Das zweite, ich hatte vorher "Ergebn" as signle was mir irgendwann mal die Drehzahl anzeigen soll, wenn ich als single nehme wird mir der wert auch hier mit Kommastelle ausgegeben ich konnte es nur abstellen in dem ich "Ergebn" als integer dimensioniere. Warum ist das so???
Dann meine letzte Frage gibt es eine andere möglichkeit "Bit22" aus "M" zu entfernen als wie unten im Code mit dem hin und herschieben der werte? Mit M = NBit.22 hab ich probiert das geht nicht da meldet der Compeiler ein problem.
Der Code, bitte nicht den Kopf abreissen ist erstmal nur ein Grundgerüsst was nur einen MS ausliesst.
Code:
$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Dim Z As Byte
Dim X As Byte
Dim Y As Byte
Dim M As Long
Dim V As Long
Dim Mes As Single
Dim Ergeb As String * 6
Dim Ergebn As Integer
Ergebn = 3000 ' wert für drehzahl _ weil wird noch nicht erfasst
Config Portc.0 = Input 'Daten
Config Portc.1 = Input 'Takt
Portc = 1
Config Graphlcd = 240 * 128 , Dataport = Portb , Controlport = Portd , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
'**********************Grafik*****************************************
Cls
Cursor Off
Wait 1
Locate 1 , 1 : Lcd " Maschinenkoordinaten "
Circle(150 , 90) , 1 , 255
Waitms 100
For X = 150 To 220
Pset X , 90 , 255
Waitms 10
Next
Line(215 , 87) -(220 , 90) , 255
Line(215 , 93) -(220 , 90) , 255
Locate 13 , 36 : Lcd "X"
For Y = 90 To 20 Step -1
Pset 150 , Y , 255
Waitms 10
Next
Line(147 , 25) -(150 , 20) , 255
Line(153 , 25) -(150 , 20) , 255
Locate 4 , 24 : Lcd "Z"
X = 150
Y = 90
For Z = 1 To 35
Incr X
Decr Y
Pset X , Y , 255
Waitms 15
Next
Line(178 , 59) -(185 , 55) , 255
Line(182 , 61) -(185 , 55) , 255
Locate 8 , 29 : Lcd "Y"
'********************************************************************************
Do
Shiftin Pinc.0 , Pinc.1 , M , 6 , 24 'Auslesen der Datenleitung 1.ten 24 bit
M = 0 'werden verworfen (enthalten wohl absolutwerte)
Shiftin Pinc.0 , Pinc.1 , M , 6 , 24 'Auslesen 2.ten 24 bit
Locate 16 , 1 'nur mal zur anzeige was gelesen wurde - hat mir beim berechnen sehr geholfen
Lcd Bin(m)
V = M ' da ich das Vorzeichen und den messwert seperat bearbeiten muss
Shift V , Right , 21 '22 bit enthält info über das vorzeichen, also schieben bis der messwert weg ist, v = 0 Positiver bereich und v = 1 negativer bereich
Shift M , Left , 11 'das Vorzeichen Bit muss weg , also 11 Schritte nach links schieben bis das "bit 21" am linken ende der long variable steht
Shift M , Right , 12 ' nun den Inhalt wieder Zurück schieben aber um 12 Stellen da das erste Bit nur die Info, 0 = mm bzw 1= inch= enthält
If V = 0 Then ' ist v = 0 dann messwert positiv berechnen, der Messwert kommt als ganzzahl und muss für die kommastelle berechnet werden
Mes = M / 100
Else ' bei v = 1 mit negativen werten rechnen
Mes = M / -100
End If
Ergeb = Fusing(mes , "# . ##") ' festlegen des Ausgabeformates
Locate 4 , 1 : Lcd " X = " ; Ergeb ; " mm " ' Ausgabe
Locate 6 , 1 : Lcd " Y = " ; Ergeb ; " mm "
Locate 8 , 1 : Lcd " Z = " ; Ergeb ; " mm "
Locate 10 , 1 : Lcd " n = " ; Ergebn ; " U/min "
Waitms 1
Loop
End
Danke euch schon mal
Gruss Matthias