mikrocontroller.net

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


Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heinrich (Gast)
Datum:

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

Danke jedenfalls für deine Antworten :-)

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.