-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Rechnen mit zwei Byte...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.09.2005
    Beiträge
    25

    Rechnen mit zwei Byte...

    Anzeige

    Irgendwie steh ich gerade mal wieder total auf der Leitung und versteh nichts mehr.
    Mal mein Problem:
    Ich habe einen Analogwert (Spannung) eingelesen, der jetzt in LB(lowbyte) und LH(highbyte) gesperichert ist. Da ich den wert gern wieder ausgeben möchte, muss ich diesen ja wieder in eine Spannung zurückrechnen. Das heißt ich würde den eingelesenen Wert /1024(10bit) teilen und mit Vref multiplizieren, bei mir 5V. Soweit ist alles klar. Nur stellt sich mir gerade die Frage, wie ich das ganze mit 2Byte anstell, ein Byte wäre kein Problem, aber bei zwei setzt es aus bei mir. Vor allem da bei allen Sachen, die mir durch den Kopf gingen, immer sämtliche Nachkommastellen weg sind und das dann nicht mehr wirklich sinnvoll ist, da ich wenigstens zwei brauche.
    Das die Division durch log. Rechtsschieben funkt. ist auch klar, meine Problem liegt einzig und allein bei den zwei Byte. Vielleicht kann mir jemand das "einfach" erklären.
    Danke im voraus Tobias

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du meinst, du weißt nicht, wie man zwei byte shiftet ? oder wie man überhaupt mit zwei bytes rechnet ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.10.2005
    Ort
    Mönchengladbach
    Alter
    47
    Beiträge
    114
    Um welche Programmiersprache geht's denn? Wenn Du (von) C sprichst, definierst du eine int-Variable, die hat 16 Bit also zwei Bytes, und liest nicht ADCL und ADCR getrennt aus, sondern ADC als zwei Byte Wert.

    Wenn ADLAR=0 ist, solltest Du zuerst mit 5 multiplizieren, bevor Du durch 1024 teilst, dann verlierst du keine signifikanten Bits.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    07.09.2005
    Beiträge
    25
    @PicNick
    Ich hab überhaupt keine Idee im Moment wie ich mit zwei Byte die zusammengehören arbeiten soll, ich hab das alles mal gelernt aber leider zulange nicht gemacht und auch meine Unterlagen sind zum großenteil nicht mehr vorhanden (Hochwasser)
    @xanadu
    Sorry, es handelt sich um Assembler, also ich möchte das ganze in Assembler umsetzen, in C wär's natürlich einfacher.
    Auch wenn ich zuerst mit 5 multipliziere gehen mir doch am Ende die Nachkommastellen verloren. Zwei würden ja reichen, aber die brauch ich eben auch.
    Irgendwie musste man doch da erst die Kommastelle schieben und dann rechnen und am Ende für die Ausgabe zurück? War das nicht irgendwie so?

    Wenn man sich mal 5Jahre nicht mit einer Sache beschäftigen kann ist einfach jegliches Wissen weg, ein denkanstoß würde sicher auch schon sehr weiterhelfen...

    Danke Tobias

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ganz kurz: du findest bei den math-Befehlen immer auch eine Variante mit Carry, die brauchst du immer fürs zweite und weitere Bytes. z.B:
    r14:r15 16-Bit-Zahl
    wert 16-Bit-wert zu draufaddieren
    add r14, low(wert)
    adc r15, high(wert)

    r14:r15 shift-left
    clc clear carry
    rol r14 (2^^7 --> Carry)
    rol r15 (carry --->2^^0, 2^^7 --> Carry)

    das fällt dir schon wieder alles ein
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.10.2005
    Ort
    Mönchengladbach
    Alter
    47
    Beiträge
    114
    Zitat Zitat von The_Darkside
    Sorry, es handelt sich um Assembler
    Schade....

    Zitat Zitat von The_Darkside
    Auch wenn ich zuerst mit 5 multipliziere gehen mir doch am Ende die Nachkommastellen verloren. Zwei würden ja reichen, aber die brauch ich eben auch.
    Integer kann nur ganze Zahlen, insofern liegt es in der Natur der Sache, dass du die Nachkommastellen verlierst.

    URef * ADC ergibt einen Messwert mit der Einheit V/1024.
    URef * ADC / 1024 ergibt einen Messwer mit der Einheit (V/1024)/1024, also V.

    Wenn du den Messwert in der Einheit V/100 (also V mit zwei Nachkommastellen) haben möchtest, ergibt sich (V/1024)/100 => URef * ADC / 10,24. Da der Teiler ganzzahlig sein muss, heisst es also URef * ADC / 10, also musst du einen Fehler von über 2,5% nur aufgrund der Rechnung in Kauf nehmen.

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Na, ein bißchen mehr erweitern kann er schon, daß nicht gar so viel den Bach runtergeht. Aber es kommt auf die gewünschte Genauigkeit an. Den divisor (Uref * Extens.) / 1024 kann er ja schon vorher vom Kompiler ausrechen. bleibt also nur dieser Wert * ADC , auf zwei dezimalen runtergeteilt.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    07.09.2005
    Beiträge
    25
    Solangsam kommts wieder... das waren so die Teile die ich nicht mehr im Gedächtnis finden konnte .
    Danke erstmal, hab ich fürs WE ne ganze Menge zum probieren

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    61
    Beiträge
    1.058
    Hallo The_Darkside

    Wenn du den Kode für deine Berechnung in einer Hochsprache kodierst, dann compilierst und dir über eine Disassembler-Funktion die in den Tools im allgemeinen verfügbar ist den erzeugten Assemblerkode anschaust, so hättest du die Vorlage wie es in Assembler gelöst werden kann.
    MfG

    Hellmut

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    07.09.2005
    Beiträge
    25
    Das hab ich jetzt auch gemacht, hab das ganze jetzt wieder weitgehend begriffen, noch paar mal in verschiedener Form umgesetzt und dann gehts wieder ausm FF,

    Danke nochmal für die Tipps und die Hilfe

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •