Hallo, mit dem cypress FX3 möchte ich Daten von einem 16 Bit ADC auslesen. Dieser hat einen Spannungsbereich von 2.25 V. Die Daten sollen auf dem PC abgespeichert werden. Von Cypress habe ich dazu eine .exe bekommen die die Werte in ein txt file ablegt. Das Problem ist, dass die Umrechnung nicht ganz funktioniert. Wenn ich an den ADC 2.25 V anlege erwarte ich ja 7FFF oder 0 und 15 1er da er es im 2er komplement ausgibt, also dezimal 32767. In der text datei steht jedoch 127 255 was quasi dem 16 Bit Wert in 2 Bytes aufgeteilt und dann in dezimal umgerechnet entspricht. Ich habe das Programm samt Quellcode angehängt. Hat jemand eine Idee wo und wie ich den Code ändern muss um die richtigen Werte zu erhalten ? Grüße
:
Verschoben durch User
so nur mal überflogen:
1 | byte[] temp1 = new byte[Offset]; |
2 | |
3 | Buffer.BlockCopy(temp, 0, temp1, 0, Offset); // copy the contents received on temp[] to temp1[] |
4 | string res = string.Join("", temp1); // <------ HIER ****** |
5 | // Put all the data streamed to a single string |
6 | string file_name = "C:\\users\\mady\\desktop\\mady.txt"; // Write the string to mady.txt |
7 | System.IO.StreamWriter objWriter; |
8 | objWriter = new System.IO.StreamWriter(file_name); |
9 | objWriter.WriteLine(res); |
10 | |
11 | objWriter.Close(); |
das müßte das doch sein was du suchst. schauen ob Offset % 2 == 0 ist dann kannst du den nach short oder was du willst wandeln und ausgeben.
Danke schonmal für die Hilfe. Könnte mir jemand sagen wass ich konkret ändern muss ? Habe noch nicht viel Erfahrung mit Programmieren. Aber ich denke die Lösung ist relativ simpel.
ich bin kein C# Programmierer aber so könnte es gehn: http://mark-dot-net.blogspot.de/2013/03/how-to-convert-byte-to-short-or-float.html
1 | //byte[] temp1 = new byte[Offset]; // <--- das weg |
2 | short[] temp1 = new short[(Offset+1) / 2]; // <--- das hin |
3 | temp1[(Offset+1) / 2]= 0; // <--- das hin |
4 | |
5 | Buffer.BlockCopy(temp, 0, temp1, 0, Offset); // copy the contents received on temp[] to temp1[] |
6 | |
7 | string res = string.Join("", temp1); // <------ HIER ****** |
8 | // Put all the data streamed to a single string |
9 | string file_name = "C:\\users\\mady\\desktop\\mady.txt"; // Write the string to mady.txt |
10 | System.IO.StreamWriter objWriter; |
11 | objWriter = new System.IO.StreamWriter(file_name); |
12 | objWriter.WriteLine(res); |
13 | |
14 | objWriter.Close(); |
das '(Offset+1) / 2' soll heißen Wenn Offset gerade ist, ist auch das Ergebnis gerade Wenn Offset ungerade ist, wird das Ergebnis gerade. ABER: Wenn offset ungerade war, dann fehlt dir ein Wert, darum die eine Init im letzten Element mit '0'. Da mußt DU dir was einfallen lassen. ich hoffe es geht.(nicht getestet!!!!)
Hallo, so geht es noch einfacher: private static int StringToInt(string value) { var result = 0; if (!int.TryParse(value, out result)) { result = 0; } return result; } static void Main(string[] args) { var text = "127 255"; var valueList = text.Split(' '); var value1 = StringToInt(valueList[0]); var value2 = StringToInt(valueList[1]); var result = (value2 << 8 + value1); var textResult = string.Format("Hex: {0:X}", result); Console.WriteLine(textResult); } Gruß Frank
Günther schrieb: > Habe noch nicht viel Erfahrung mit Programmieren. Aber ich > denke die Lösung ist relativ simpel. Gut, dass du das mit deinem Wissensstand beurteilen kannst. Natürlich ist die Lösung simpel, wenn man eine Vorstellung von Zahlendarstellungen und -systemen hat. Deine beiden Zahlen (127 und 255) sind wie zwei Ziffern im 256er-System zu lesen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.