Zahl als 12 Bit speichern



  • ich lese einen Wert über ein Edit ein. Der Bereich liegt von 0 bis 2,5 Volt. Dieser soll als 12 Bit Zahl in 2 Byte gespeichert werden. Im höheren Byte sind nur die unteren 4 Bits zu verwenden (0x00 bis 0x0F). Wie leg ich die Werte in die 2 Byte. Ich brauch die beiden Bytes, da ich sie getrennt an die RS232 sende.

    int amplitude = StrToFloat(txtEingabeAmplitude->Text) * 4096/2.5;
       Label4->Caption = amplitude;
    
       char send[] = {'9',amplitude, amplitude/0xFF};
       serialInterface.SendData(send,3);
    

    Wie trenn ich nun den Wert amplitude auf die beiden Bytes auf? Was haltet ihr von meinem Code? Oder kann man das besser machen?



  • Ungefähr so

    char high = (amplitude & 0xf00) >> 8;
    char low = amplitude & 0xff;
    
    std::string send = "9";
    send += high;
    send += low;
    
    serialInterface.SendData(send.c_str(), send.length());
    

    rudpower schrieb:

    Was haltet ihr von meinem Code? Oder kann man das besser machen?

    z.B. erstmal prüfen, ob in txtEingabeAmplitude->Text wirklich eine Zahl steht ?

    Das

    amplitude/0xFF
    

    sieht auch etwas suspekt aus, auch wenn es in dem Fall wohl das gleiche wie ein bitweises Und macht.



  • z.B. erstmal prüfen, ob in txtEingabeAmplitude->Text wirklich eine Zahl steht ?

    Das brauch ich in diesem Fall nicht, da ich eine Komponente (LMDTools) verwende, bei der man das Eingabeformat über eine Eigenschaft festlegen kann. So kann man nur Floats eingeben.


Anmelden zum Antworten