Forum: PC-Programmierung Datenumrechnung C#


von Günther (Gast)


Angehängte Dateien:

Lesenswert?

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
von joiner (Gast)


Lesenswert?

Hallo!
Schau im Form1.cs Zeile 746
Im Array temp1 steht das ergebnis.

von Stephan (Gast)


Lesenswert?

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.

von Günther (Gast)


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

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!!!!)

von Frank L. (frank_l)


Lesenswert?

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

von Werner M. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.