Schieblehre - Arduino Versuchsaufbau

Teil 3 von 5

Das ist das ergebnis vom DataPin:

La. Nr. Dauer bit
0 5844924 0
1 75380 1
2 792 0
3 106732 1
4 840 0
5 119032 1
6 840 0
7 119032 1
8 844 0
9 119036 1
10 840 0
11 119036 1
12 892 0
13 118984 1
14 888 0
15 118988 1
16 892 0
17 118988 1
18 884 0
19 118996 1
20 884 0
21 119000 1
22 888 0
23 118992 1
24 892 0
25 118988 1
26 892 0
27 118992 1
28 892 0
29 118988 1
30 892 0
31 118992 1
32 888 0
33 119300 1
34 892 0
35 118688 1
36 888 0
37 119000 1
38 892 0
39 118996 1
40 892 0
41 119004 1
42 892 0
43 119000 1
44 888 0
45 119004 1
46 884 0
47 119008 1
48 892 0
49 119004 1
50 892 0
51 119004 1
52 892 0
53 119000 1
54 892 0
55 119004 1
56 892 0
57 119008 1
58 888 0
59 119004 1
60 892 0
61 119004 1
62 892 0
63 119000 1
64 892 0
65 119316 1
66 892 0
67 118700 1
68 884 0
69 119012 1
70 884 0
71 119016 1
72 892 0
73 119000 1
74 892 0
75 119008 1
76 892 0
77 119008 1
78 892 0
79 119008 1
80 892 0
81 119004 1
82 892 0
83 119008 1
84 888 0
85 119008 1
86 892 0
87 119008 1
88 892 0
89 119008 1
90 892 0
91 119008 1
92 884 0
93 119016 1
94 892 0
95 119008 1
96 888 0
97 119320 1
98 892 0
99 118700 1
100 892 0
101 119012 1

Teil 4 von 5

während der Werteausgabe hast Du den Meßschieber in Ruhe gelassen oder bewegt?

die werte haben sich nicht verändert also habe ich das teil bewegt um zu sehen ob es tut :slight_smile:

Welcher Wert stand auf dem Display?

Serieler Monitor Display
1 0,00 mm
1
1
1
1
100011001000101 89,94 mm
100011001000101
100011001000101
100011001000101
100011001000101
100011001000101
101110111110001 120,24 mm
101110111110001
101110111110001
101110111110001
101110111110001
101110111110001
101110111110001
110110101001111 139,91 mm/td]
110110101001111
110110101001111
110110101001111
110110101001111
110110101001111
1110110001101 37,82 mm
1110110001101
1110110001101
1110110001101
1110110001101

ach ja für die ausgane habe ich eine 2 Sekunden Pause gemacht ganz unten im Code
die werte Zappeln gar nicht auf dem Seriellen Monitor.

Nimm mal die Zeitspanne wieder ein wenig höher, wenn das noch funktioniert. Auf 120ms zum Bsp.

  • bei 120 geht gar nichts
  • wenn ich auf 111,3 hoch gehe (im Code 111300) dann bekomme ich gelegentlich noch einen wert ausgegeben, jedoch nicht immer, es sind viel zu lange pausen zwischen drin.
  • bei 300 kommt auch nichts
  • bei 400 kommt auch nichts.
  • bei 500 kommt auch nichts.
  • bei 600 kommt auch nichts.
    hier habe ich nur eine pause von 100ms drin stehen,

Teil 5 von 5

Du solltest auch danach nochmal statt 24 Bits nur 20 Bit einlesen einstellen.

20bit
Zeitspanne = 110 ms
Pause = 2 Sekunden unten im Code

Serieler Monitor Display
1 0,00 mm
1
1
1
1
1
1
10100110010001 53,20 mm
10100110010001
10100110010001
10100110010001
10100110010001
10100110010001
101011101100001 111,84 mm
101011101100001
101011101100001
101011101100001
101011101100001
101011101100001
111011110000001 152,96 mm
111011110000001
111011110000001
111011110000001
111011110000001
111011110000001

ich hoffe das ich jetzt nichts vergessen, das Forum sagt immer wider das irgend welche Skript nicht gehen und ich habe die teste alle 2 oder drei mal schreiben müssen.

Wenn ich was vergessen habe bitte melden dann mache ich das noch.

Hallo,

gut, ich guck mir das später mal, sieht auf alle Fälle konstant aus, womit wir was anfangen können.
Hab nur gerade mit mir selbst und meinem neuen Spielzeug zu kämpfen ...

Hallo,

nach einem BCD Code sieht es für mich nicht aus. Scheinbar hat Deiner nur eine geringere Auflösung wie meiner.
Deine Werte folgen einer Logik und die errechnete Auflösung von 200 Digits pro mm ist konstant. Wenn das BCD kodiert wäre käme laut meiner Meinung nur errechneter Müll raus.

Kannst das nochmal für 3 negative Displaywerte machen.
Und einmal das Display genau auf +1,000 einstellen und einmal genau auf -1,000 einstellen.

Danach bin ich mir dann sicherer in der Auswertung.

Meßschieber_Forum_BCD.zip (8.55 KB)

Oh man das das so ein Rissen Aufwand ist hätte ich nie gedacht.
ich hoffe nur das die anderen 4 die ich wenn das hier Klappt der selben Logik vollen.

das sind die 3 Negativen werte, und die jeweils bei einen mm (Positive und Negative)

Serieler Monitor Display
1000000000110000011001 -15,48 mm
1000000001110101110111 -37,71 mm
1000000011000011000001 -62,40 mm
11001001 1,00 mm
1000000000000011001001 -1,00 mm

meine anzeige hat nur 2 nachkomme stellen.

deine Excel habe ich mir angeschaut doch der Formel kann ich nicht ganz folgen.

EDIT: was ich noch vergessen habe zu fragen, welches neue Spielzeug hast du denn?

das andere was ich noch Fragen wollte kann man mit den Daten die ich da ermittelt habe
im Post #58 - 60 was anfangen? oder ist das Quatsch gewesen was ich da gemacht habe?

dachte das man so vielleicht prüfen kann ob es ein 4x7bit oder 2x24bit Signal ist.

Hallo,

mein neues Spielzeug ist ein AVR ISP mkII Programmer.

Du hast nur 2 Zeiten des Programmdurchlaufes vermessen. Und das wird regelmäßig wie der Rest gemacht, deswegen sind die Werte auch konstant. Nützt mir jetzt nichts. Ob das BCD oder 24Bit ist erkennt man daran auch nicht. Dazu müßte man einen Oszi anschließen oder einen Logik-Analyzer. Den Oszi haste zwar, kannst den aber anscheinend alleine noch nicht nutzen dafür. Deswegen brauch ich Meßwerte zum anschauen.

Ob ich morgen und/oder am WE dazu komme kann ich noch nicht sagen. Hab aber jetzt schon ein gutes Gefühl.

Mich wundert aber das Du mit der Exceltabelle nichts anfangen kannst. Du mußt doch eine Logik erkennen. Deine Binärzahlen sind in dezimale gewandelt und Deinem mm Displaywert zugeordnet. Man erkennt, größere Displaywert gleich größerer Binärwert. Richtung stimmt. Und wenn man prüfen möchte ob wirklich alles zusammen paßt, bricht man das runter auf Dezimalwert pro Millimeter. Der ist 200 Einheiten pro mm konstant. Was wir später auch zum umrechnen benötigen. Das wäre analog zum original Sketch.

Edit:
Nach auswerten Deiner neuen Daten, fällt auf, dass die negativen Werten einen Überlauf haben und 24Bit beanspruchen. Jetzt macht mir die 0mm Anzeige erneut Bauchschmerzen, es kann 1 sein oder vom Überlauf fehlt der große Rest. Deshalb bitte die for Schleife nochmal auf 30 erhöhen, also 30 Bits werden eingelesen und damit nochmal die 0 und jeweils 2 positive und negative Werte große und kleine mir geben.

Dein Spielzeug: ist das so ein teil mit den man Chips selber Programmiren kann?

ich dachte eigentlich das man so vielleicht erkennen kann um welchen Typen es sich handelt also das 224bit oder das 74bit Typ.

Excel Tabelle: was du da machst ist mir schon klar ich kann nur mit der Formel von "Raw Dezimal" nichts anfangen ich dachte das ich das zusammen rechnen muss. also 1001 = 9 bzw. 0100 = 2 usw.

die Formel die du da drin stehen hast verstehe ich nicht.

Daten keine 24Bit Auflösung sondern weniger: kann es sein das wir zu wenig abgreifen? oder zu viel abgreifen? und deshalb Falsche werte heraus kommen? bzw. sie ungenauer sind?

EDIT: ich bin nächste Woche in Berlin und nicht mehr am Rechner. daher müssen wir keinen Stress machen.
Würde es Sinn machen die Schieblehre noch am Oszilloskop auszumessen? und wenn ja was alles?
denn dann würde ich am Sa. den Schieber einen Kumpel mit geben der kann das dann bei dich in der Arbeit ausmessen und ich bekomme denn dann wenn ich aus Berlin wider da bin also die Woche drauf Mo. wider. so lange kann ich dann eh nichts machen.

Hey!

Du musst die letzte 1 von der binären Zahl löschen und hast das richtige Ergebnis in Dez.
1010011001000(1) --> 5320
1100100(1) --> 100

l00py:
Hey!

Du musst die letzte 1 von der binären Zahl löschen und hast das richtige Ergebnis in Dez.
1010011001000(1) --> 5320
1100100(1) --> 100

also lese ich eine Zahl zufiel mit aus?

habe jetzt die Seite hier gefunden: Binär-Dezimal Umrechner

irgend wie dachte ich das das anders gemacht wird.

von Links nach rechts die Stellen immer das Doppelte gezahlt werden.

Wert 124
bit 100

also Dezimal = 1

Wert 124
bit 110
also Dezimal = 3

Wert 124
bit 111
also Dezimal = 7

doch da kommt hier das Falsche Ergebnis raus.

Wert: 1 2 4 8 16 32 64 128
bit 1 1 0 0 1 0 0

Dezimal 1 + 2 + 16 = 19 jedoch hat "l00py" hier 100 raus bekommen und die Webseite oben auch.
ergo meine Rechnung Falsch und ich verwechsle das mit etwas anderem.
kann mir da jemand auf die Sprünge helfen?

EDIT: da das Auge auch gerne was hat, habe ich die neue Verkabelung inkl. Arduino mal mit rein gestellt :slight_smile:


Bildschirmfoto 2014-10-31 um 10.43.40.png

Hallo,

Danke 100py. Also wäre das doch BCD Code. Hatte die ganze Zeit, trotz das man das auf 200 pro mm runterbrechen konnte ein wenig Bauchweh, weil die Auflösung sehr gering wäre mit 200 und die Zeitspanne zwischen den Daten sehr hoch. Was eigentlich nicht auf eine ein 2x24 Bit Protokoll schließen lassen würde. Wir wußten es aber nicht besser. Allerdings, stimmt jetzt die Umrechnung nur, wenn statt 4 Bits nur 3 Bits vom BCD Code nimmt und in dezimal wandelt. Kann eigentlich auch nicht sein.

@ Mücke. Du rechnstest falsch um. Jeder binäre 4er Block steht für eine Ziffer der Anzeige. Die darfst Du nicht addieren, die schreibst Du nur zusammen hin und setzt das Komma richtig. Von hinten 2 Stellen.

Hey!

Du musst die letzte 1 von der binären Zahl löschen und hast das richtige Ergebnis in Dez.
1010011001000(1) --> 5320
1100100(1) --> 100

die 5320 sind Deine 53,20mm und die 100 ist Dein 1,00mm.

Um hier alle Eventualitäten auszuschließen, nimm Deinen Meßschieber mit zum Kumpel ans Oszi, mach paar scharfe Fotos, so gut wie möglich und notiere Dir dazu die Werte von der Anzeige. Damit wir wissen was was ist. Die for Schleife kannste erstmal wieder auf 24 setzen. Du wirst auf dem Oszi gleich erkennen ob das BCD oder 24Bit ist.

Die Raw Umwandlung ist nichts weiter wie eine Zahl von Binärcode nach dezimal zu wandeln, weil Excel mit der Funktion BININDEZ mit solchen großen Werte nicht rechnen kann. Die Formel ist aus dem Netz, nicht von mir.

Foto:
schön sauber aufgebaut. :slight_smile:

Hallo 100py,

Du meinst nicht löschen sondern 1 abziehen? Irgendwie haut das aber immer noch nicht hin. Entweder man rechnet mit 3 Bit oder mit 4 Bit. Gemischt geht nicht.

1010011001000(1)     53,20 mm

wie hast Du die Werte denn zerlegt, wenn ich das nachprüfe mit anderen Zahlen, stimmt nichts.

101 0011 0010 001     53,20 mm
 5    3    2   ??

an der letzten Stelle fehlt ein Bit.

Mit anderen Beispielen hauts auch nicht hin.

Hey Doc,

ich hab die nicht zerlegt.

Beispiel: 11001001 --> 1,00mm (Die fette 1 ignoriere ich)

Wenn du dann die Dezimalzahl durch 100 teilst, hast du den Wert vom Messschieber.

/edit/

10100110010001 53,20 mm

auch hier die fette 1 weg:

1010011001000(bin) = 5320(dez)

Bei den negativen Werten weiß ich aber auch noch nichts :confused:

Hallo 100py,

jetzt versteh ich das wie Du gerechnest hast. Das wäre ein völlig neuer Rechenansatz. Hatte beim BCD Code, ich gehe davon aus das es immer noch einer ist, immer gelesen, dass jede Ziffer einzeln übertragen wird. Das man die Wertigkeiten addieren kann und damit gleich den richtigen Wert hat ist mir neu. Aber gut zu wissen. Sieht dann eigentlich nicht mehr nach BCD Code aus, wenn man sich das so betrachtet. Vielleicht klappt das auch weil die Wertigkeit von max. 9 nie überschritten hier wird im BCD Code. Ich muß mich da neu reindenken. Aber Danke für den Hinweis!

Hey Doc,

vielleicht ist das ja auch so ne Mischung aus beidem?

Beim BCD gabs meine ich eine Ziffer die das ganze negiert, bzw. die höchste Ziffer(vom Wert her) gilt als negativ. Kann aber auch sein, dass ich gerade bei nem anderen Code bin.

Hast du eine Idee, wie wir die negativen Werte darstellen können?

//edit//

Sooooo :slight_smile: Danke euch beiden! Bin jetzt auf dem gleichen Stand wie Muecke. Sieht zwar nicht ganz so schick aus die Verdrahtung, aber bekomme die gleichen Werte angezeigt!

Kann es sein, dass die Schleife einmal zu oft durchläuft?

Zu den negativen Werten:

1000000000000101001001 = -1,64
Die letzte 1 ist zu viel. Warum auch immer. Bleiben wir bei:

100000000000010100100
Das Fette ist der "Code für das Minuszeichen"

Übrig bleibt also:
10100100
und das von bin in dez umgewandelt lautet: 164

Gruß

l00py

24bit umstellen:
Ok, Code ist wider auf 24bit umgestellt.

Oszilloskop:
Ok, werde das ihm morgen mitgeben, was soll er da genau alles raus lesen? das ich
ihm das mit geben kann?

Rechnung:
Das dachte ich mir schon das ich Falsch rechne. Jedoch komme ich bei euch gerade
auch nicht mehr mit, auf unterschiedliche Rechen wegen unterschiedlich rechnen und
das Selbe Ergebnis bekommen ? Ömm ?? JA, ich glaube es ist Besser wenn ich das Oszilloskop
dran hatte dann wird es vielleicht einfacher.

Foto:
Danke, habe beim Umbau bzw. aufräumen der Schaltung auch alle IC`s getestet auch der
der so extrem heiß geworden ist tut noch :slight_smile: (wenn ich auf Masse schalte
habe ich am Ausgang nicht 0,00V sondern 0,05V anliegen das stört glaube
ich aber nicht.)
mich hatte es extrem gestört das alles so instabil war also alles zusammen packen
und ordentlich machen :slight_smile:

Negative Werte:
Noch habe ich den Schieber hier, soll ich noch ein Paar Negative Werte einlesen?
als 20 und 24 bit?
würde das dann direkt in eine Excel Packen

Daten Interpretieren:
Könnte das hier Helfen?
Callipers with an Arduino / USB

Hey Muecke,

danke brauchst keine negativen Werte mehr einlesen. Hast ja schon genug und ich bekomm ja die gleichen wie du.

Deine Werte aus einem vorherigen Post:
Serieler Monitor Display
1000000000110000011001 -15,48 mm
1000000001110101110111 -37,71 mm
1000000011000011000001 -62,40 mm
11001001 1,00 mm
1000000000000011001001 -1,00 mm

Die letzte (fette) 1 streichen wir bei jedem Wert! Keine Ahnung, wie die dahin kommt. Ist aber falsch.

Zahlensysteme umrechnen

Fall 1: positiver Wert

11001001 1,00 mm

1100100 in die Seite eingesetzt ergibt 100. -->Passt

Fall 2: negativer Wert

1000000011000011000001 -62,40 mm

Außerdem streichen wir die 10000000 vorne. Im Sketch müsste das ungefähr so aussehen:
Wenn die erste Ziffer == 1, dann lösche alle darauf folgende "0"en. Die Anzahl der "0"en variiert.
Wenn die erste Ziffer == 1, dann setzte negativ=1;

Übrig bleibt dann noch: 1100001100000(bin) eingesetzt in die Umrechnungsseite ergibt das ganze 6240(dez).

Soweit verständlich?

Wenn die erste Ziffer == 1, dann lösche alle darauf folgende "0"en. Die Anzahl der "0"en variiert.

Das geht nicht. Die Breite der Zahl in Bit ist ja konstant. Man das in einer 32 Bit Variablen. Aber man nutzt die nicht alle.

Um zu testen ob man eine negative Zahl hat, fragt man ab ob das 23. 21. Bit (Zählen fängt mit 0 an) gesetzt ist. Und setzt dieses Bit dann auf 0.

Um die 1 am Anfang wegzubekommen schiebt man die ganze Zahl einfach um eins nach rechts.

hast du auch eine Schieber angeschlossen l00py? bei dir?

ich habe gerade mal einen ganzen Haufen Werte eingelesenen und in eine Excel eingetragen 24bit.

dabei ist mir aufgefallen bzw. noch von der verlinkten Seite im Kopf geblieben das ein bit Negative oder Positive definiert.

das würde nach der Reihe die ich eingelesen habe auch Sinn machen denn bei Negative ist immer die 1 zu beginn vorhanden.

da das Arduino jedoch führende 0en immer streicht sieht man die nicht bei Positiven werten das da eine 0 ist.

Messschieber_Daten.zip (25.2 KB)

Hallo,

na dann haben wir ja alle den gleichen Erkenntnisstand. Bin nämlich vorhin auch drauf gekommen das Bit 21 das Vorzeichen-Bit darstellt. Vom ungekürzten Binärwert ausgehend. Ihr habt demnach ein neues Protokoll. Stimmt mit dem hier überein.

Ohne Deine Erkenntnis mit dem umrechnen von heute morgen, 100py, wäre ich aber so schnell nicht darauf gekommen. Muß ich zugeben. :wink:

Das erste Bit (Bit 0) muß demnach nur eine Art Startsignal sein, brauchen wir ja nicht, also wie ich das mit meinem Code auslese.

Nur müssen wir die Erkenntnisse nur noch in sauberen Code schreiben. :slight_smile: Das wäre eine der leichteren Übungen.

@ Mücke: Deine Daten-Tabelle ist leer. Macht aber nichts. Wir wissen ja jetzt wie der Hase läuft. Wenn Du Dich selbst mit dem Oszi auseinandersetzen möchtest, kannste das mit zu Deinem Kumpel nehmen, der Dir das hoffentlich erklären kann. Also die Oszi Bedienung usw. Für das hier ist es nicht mehr notwendig.