Juhuuuu, es funktioniert

So halbwegs zumindest...
Wenn ich 'ne Batterie an die Messpunkte setze, dann krieg ich tatsächlich einen Wert ausgespuckt

Allerdings ist der Ausgegebene Wert nicht der den ich erwartet hätte...
Hab ne Batterie, die meinem Multimeter nach 3,165Volt anzeigt.
Wenn ich diese Batterie (3,165V) an meine Schaltung (DVM) anschließe, bekomme ich die Zahl 169 auf den Segmentanzeigen ausgespuckt.
Ich hätte erwartet, das der DVM eine Zahl um die 644 anzeigt.
Sooo, warum hätte ich die Zahl ~644 erwartet?
Weil der ADC als Referenz den AVcc hat und AVcc hat 5,03 Volt.
Meine Batterie
(ist so'n Mignon-Doppelpack) hat eine Spannung von 3,165 Volt
Wenn Referenz 5,03V ist und Messspannung 3,165V und bei 10Bit 1024 Stufungen gegeben sind, dann sollte doch eigentlich ~644 als Ergebnis angezeigt werden.
5,03V - 1024
3,165V - x
-----------------
3,165 x 1024 / 5,03 = 644,32604373757455268389662027833
Bei mir zeigt es aber den Wert 169 an...
Wenn ich nun nur eine einzige Batterie an die Messpunkt halt dann zeigt mir meine DVM-Schlatung ungefähr den halben Wert an, also die Zahl 83.
Obwohl ich auch hier, logisch gesehen, die Zahl 84,5 erwartet hätte, wenn Kommastellen nicht darstellbar sind, dann wenigstens die Zahlen 84 oder 85... Beide Batterien meines Doppelpackes haben die selbe Spannung.
Ich kann ja auch die Referenzspannungsquelle ändern auf "Internal", dann habe ich eine Referenzspannung von 2,56 Volt...
Wenn ich nun (über Internal) vergleiche, dann bekomme ich den Wert 335 ausgespuckt.
Auch hier hätte ich erwartet, das (wenn die gleich folgende Rechnung stimmt) ein Wert von 1266 angezeigt wird, denn:
3,165 x 1024 / 2,56 = 1266
Hmmm..., kann aber auch sein, weil mein DVM nur drei Stellen hat, das der DVM die tausender Stelle nicht darstellen kann...
Wenn mein DVM 4 Segmentanzeigen hätte, dann könnte auch der Wert 335 möglicherweise 1335 sein...
Geht aber nicht, weil ja die vierte Segmentanzeige fehlt, also fehlt auch die 1 von 1335, also wird nur die 335 angezeigt...
Wenn das so wäre, könnte ich an dem Tripo solange dran drehen bis ich den Wert 266 angezeigt bekomme, dann wäre alle eigentlich korrekt, weil ja nicht 226 sondern 1226 gemeint ist, aber nicht darstelbar, da die vierte Segmentanzeige in meiner Schaltung fehlt...
Tut mir Leid, wenn ich etwas verwirrend schreibe
Meint ihr, das es an dem Code liegt, oder eher an dem Widerstand (R5 = 33 KOhm) der zwischen dem Tripo und dem posititiven Messpunkt liegt?
So sieht aktuell mein Code aus:
Code: Alles auswählen
$regfile = "m8def.dat"
$framesize = 100
$swstack = 100
$hwstack = 100
$crystal = 1000000
Config Portb = Output 'Die 8 Kathoden der Segmentanzeigen (a,b,c,d,e,f,g,P.)
Config Portc.0 = Input 'ADC - Messpunkt
Config Portd.2 = Output 'Anode der 1. Stelle vor dem Komma
Config Portd.3 = Output 'Anode der 2. Stelle nach dem Komma
Config Portd.4 = Output 'Anode der 3. Stelle nach dem Komma
$lib "mcsbyteint.lbx"
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Ziffer As Byte 'Variable
Dim Zeit As Byte'Variable
Dim Wert As Word'Variable
Dim S As String * 3 'Variable
Dim Ar(4) As Byte 'Variable
Set Portd.2 'Anzeige 1 aus
Set Portd.3 'Anzeige 2 aus
Set Portd.4 'Anzeige 3 aus
Wert = 000
Do
Wert = Getadc(0)
S = Str(wert)'Wert in Zeichenkette umwandeln
S = Format(s , "000")'Auf drei Stellen formatieren
Str2digits S , Ar(1) 'In die drei einzelnen Stellen splitten
For Zeit = 0 To 50 'Multiplexen: Anzeige mit 50 mal 6 Milisekunden, also 0.3 Sekunden pro Wert
Portb = Lookup(ar(4) , Daten) ' Die erste Stelle ausgeben
Reset Portd.2 ' Einschalten
Waitms 2 ' Zwei Millisekunden lang...
Set Portd.2' Und wieder aus
Portb = Lookup(ar(3) , Daten) ' Die zweite Stelle ausgeben
Reset Portd.3 ' Einschalten
Waitms 2 ' Zwei Millisekunden lang...
Set Portd.3' Und wieder aus
Portb = Lookup(ar(2) , Daten) ' Die dritte Stelle ausgeben
Reset Portd.4 ' Einschalten
Waitms 2 ' Zwei Millisekunden lang...
Set Portd.4' Und wieder aus
Next Zeit
Loop
End
Daten:
Data &B11000000 'Stellt die Zahl 0 dar.
Data &B11111001 'Stellt die Zahl 1 dar.
Data &B10100100 'Stellt die Zahl 2 dar.
Data &B10110000 'Stellt die Zahl 3 dar.
Data &B10011001 'Stellt die Zahl 4 dar.
Data &B10010010 'Stellt die Zahl 5 dar.
Data &B10000010 'Stellt die Zahl 6 dar.
Data &B11111000 'Stellt die Zahl 7 dar.
Data &B10000000 'Stellt die Zahl 8 dar.
Data &B10010000 'Stellt die Zahl 9 dar.
Data &B00001110 'Stellt den Buchstaben F dar.