Forum: Mikrocontroller und Digitale Elektronik negative und positive Spannungen mit AVR ADC (ASM)


von Heinrich (Gast)


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?

von Karl H. (kbuchegg)


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.

von spess53 (Gast)


Lesenswert?

Hi

1.Nennt sich Summierer. Benötigt aber auch negative Versorgungsspannung 
für OV.

2. Du subtrahierst vom ADC-Wert einen Wert, der 2,5V entspricht.

MfG Spess

von Heinrich (Gast)


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.

von Karl H. (kbuchegg)


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.

von spess53 (Gast)


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

von Heinrich (Gast)


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

von Karl H. (kbuchegg)


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)

von Heinrich (Gast)


Lesenswert?

>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
?

von Karl H. (kbuchegg)


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

von Heinrich (Gast)


Lesenswert?

OK. Ich schau mir das nochmal in Ruhe an und probiers dann einfach mal 
zu programmieren.

Danke jedenfalls für deine Antworten :-)

von Heinrich (Gast)


Lesenswert?

Hi,

wollte nur sagen, dass es zu klappen scheint. Ging ja schneller asl 
erwartet gg.

Danke nochmal, Karl Heinz, du hast mir sehr weiter geholfen .

So, gute Nacht

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.