negative und positive Spannungen mit AVR ADC (ASM)

Gast #1117906
Lesenswert?

Hi,

ich wollte negative und positive Spannungen (-2.5V bis +2.5V).
Da gibt es ja die Möglichkeit, per OPV einfach 2.5V zu addieren und dann 
kann man wie gewohnt von 0V bis 5V messen.

Aber wie könnte man das in Assembler realisieren, dass zB am LCD -2.5 
bis +2.5 und nicht 0 bis 5 erscheint?
Mit dem 2er Komplement benötigt Assembler ja kein + oder - . Wie kann 
man dennoch das - visualisieren?
#1117915
Lesenswert?

Am universellsten ist sicherlich das 2-er Komplement zu benutzen.

Am einfachsten ist es wohl, einfach normal messen.
Kommt bei deiner Rechnerei ein Wert kleiner 2.5 raus, dann malst du ein 
'-' hin. Vom Messwert ziehst du auf jeden Fall noch 2.5 ab und gibst ihn 
aus.

Wenns nur darum geht, an der Anzeige etwas stehen zu haben, das so 
aussieht 'als ob', dann kann man das meistens einfacher faken.
Gast #1117922
Lesenswert?

also es sollte schon auch ein richtiger Wert raus kommen, kein Fake.

Ich hatte das ganze einfach die Woche mal getestet, 2.5V im Programm 
abgezogen, klappt im positiven Bereich gut.
Aber wenn die Spannung dann in den negativen Bereich kommt, kommt ein 
falscher Wert raus.
#1117933
Lesenswert?

> also es sollte schon auch ein richtiger Wert raus kommen, kein Fake.

Sagt ja auch keiner.
Aber: Kein Mensch merkt es wenn du die Ausgabezahl in mehreren Etappen 
zusammensetzt und intern nicht mit 2-er Komplement Darstellung 
arbeitest. Am Display muss nur das richtige rauskommen.

Mal angenommen, dein virtueller 0-Punkt liegt bei 25

Alles was über 25 liegt
   25 abziehen und als positive Zahl ausgeben

   aus 26 wird so 01, also 0.1 Volt
   aus 27         02       0.2
   aus 30         05       0.5
   ...

   passt

ist der Wert kleiner als 25, dann handelt es sich um eine negative 
Spannung. Also muss auf jeden Fall mal ein '-' aufs Display

   aus 24  muss werden 01  also 0.1 Volt, zusammen mit dem - steht dann
                                          am Display -0.1

   aus 23              02       0.2 Volt        -0.2
       22              03       0.3             -0.3
       20              05       0.5             -0.5
       15              10       1.0             -1.0

Gesucht ist also ein Zusammenhang, der aus

      24       1   macht
      23       2   macht
      22       3   macht

etc.

Na das ist doch nicht so schwer.  Wenn x dein Messwert ist, dann ergibt 
25 - x den Anzeigewert. Warum 25? Na weil, dein virtueller 0-Punkt bei 
25 lag.
Gast #1117936
Lesenswert?

Hi

Wenn du '2,5' von einem Wert '<2,5' abziehst bekommst du einen negativen 
Wert. Um den Betrag zu erhalten musst du das 2er-Komplement bilden und
'-' davorschreiben. Bei einen Register mit 'neg'. Wenn dein Ergebnis 
>8Bit ist (also mehrere Register) lässt sich das so 
realisieren(Pseudocode):

   com r1
   com r2
   ...
   com rn
   add r1,1
   adc r2,0
   ...
   adc rn,0

MfG Spess
Gast #1117956
Lesenswert?

Ahso, dann habe ich dich da falsch verstanden

>Wenns nur darum geht, an der Anzeige etwas stehen zu haben, das so
>aussieht 'als ob', dann kann man das meistens einfacher faken.

Dachte du meinst, ich will einfach nur ein - bei einer negativen 
Spannung haben, egal ob der Wert stimmt, nur dass es eben aussieht 'als 
ob' alles stimmt. Hab mich schon gewundert^^


Also könnte ich das so in der art mit BRMI machen? Oder muss ich 
schauen, ob die Ausgabe >= (1024:2=512) ist?

gemessener Wert - 25
BRMI negativ
normale Ausgabe

negativ: 25 - gemessener Wert
Minus bei Ausgabe hinzufügen
#1117965
Lesenswert?

Heinrich wrote:

> Also könnte ich das so in der art mit BRMI machen? Oder muss ich
> schauen, ob die Ausgabe >= (1024:2=512) ist?
>
> gemessener Wert - 25
> BRMI negativ
> normale Ausgabe
>
> negativ: 25 - gemessener Wert
> Minus bei Ausgabe hinzufügen

Im Endeffekt, wenn du jetzt deinen virtuellen 0-Punkt bei 512 liegen 
hast, landest du damit (fast) genau beim 2-er Komplement.

Wenn ist eine (vorzeichenlose) Zahl größer gleich 512. Wenn Bit 7 
gesetzt ist. Na, klingelts? Bit 7 == Vorzeichenbit

(Beim 2-er Komplement wäre dann alles genau anders rum.
 Zahlen kleiner 512 sind positiv, Zahlen > 512 sind negativ
 Aber vom Prinzip her ist es immer noch nichts anderes als weiter oben
 im Beispiel mit 25)
#1117997
Lesenswert?

Heinrich wrote:
>>Na, klingelts?
> Hm, ich weiss nicht so genau!
>
> Ist dann nicht
> BRCS - Branch if Carry Flag is Set
> das gleiche wie
> BRMI - Branch if Minus
> ?

Carry und Minus haben nicht das geringste miteinander zu tun.

Carry wird verändert bei Rechenoperationen und zeigt an, dass
ein Überlauf entstand oder ein Borgen notwendig war.

Das Negativ-Flag spiegelt den Inhalt von Bit 7 wieder.

OK, Wenn man so will, könnte man sagen, dass nach einer
8-Bit Rechenoperation

das Carry Bit  den Inhalt des 9.ten(!) Ergebnisbits wiedergibt
das Negativ-Bit den Inhalt des 8.ten Ergebnisbits wiedergibt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren