Ich möchte mit einem noch freien ADC-Eingang einen Joystick
mit gegebenen Anschlüssen einlesen. An den beiden Achs-Ausgänge
des Joysticks schalten jeweils GND-offen-5V. Das lässt sich leider auch
nicht ändern, sonst könnte ich die jetzigen Joystick-Ausgange
alle auf ein Pol legen, und die Taster über ein Reihennetzwerk
anschließen.
Nun sollte es doch dennoch möglich sein, durch einfache Überlegung
ein einfaches Widerstandsnetzwerk zu basteln, das eine möglichst
große Abstufung aller 9 Kombination liefert.
Z.B. so:
1
+ 5V
2
| ___ SW_A
3
+-|___|---+ -+-
4
R1 | | o---- 5V
5
----. | ___ |
6
| +-|___|--o-+--o
7
| ___ | R2 |
8
µContrl | +-|___|---+ | o---- GND
9
| | R3
10
ADC o---------+
11
| | ___ SW_B
12
| +-|___|---+ -+-
13
| R4 | | o---- 5V
14
| | ___ |
15
| +-|___|--o-+--o
16
----' ___ | R5 |
17
+-|___|---+ | o---- GND
18
| R6
19
+ GND
20
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
Wenn ich damit zB in ltSpice rumspiele komme ich nicht auf über 0.2V
für die kleinste Spannungsdifferenz. (z.B für R1-R6: 47k 22k 0 47k 47k)
Es müsste doch aber möglich sein, durch rein logische Überlegung
die Widerstandsverhältnisse für eine ausgewogene Spannungsverteilung
am ADC-Eingang zu bestimmen.
Wie macht man es am besten?
Schiko
Mit angenommen R1=10k, R3=0, R4=0, R6=10k ergeben sich (mit E96-Werten)
R2 = 6k19 und R5 = 10k2 als optimal.
Der kleinste Spannungsabstand ist 0.29470V.
Die Spannungen am ADC sind [2.5, 1.6776315789473684,
3.3223684210526319, 1.3829311885612152, 1.0879259483899426,
2.1545200154389059, 3.6170688114387843, 2.8454799845610941,
3.9120740516100572]
für die Schalterstellungen
SW_A SW_B
None None
None 0.0
None 5.0
0.0 None
0.0 0.0
0.0 5.0
5.0 None
5.0 0.0
5.0 5.0
Das war natürlich Brute Force + Startwerte nach Gefühl. Einen Ansatz
mit logischer Überlegung, der über Bauchgefühl hinausgeht, fände ich
auch interessant.
Tom K. schrieb:> Mit angenommen R1=10k, R3=0, R4=0, R6=10k ergeben sich (mit E96-Werten)> R2 = 6k19 und R5 = 10k2 als optimal.>> Der kleinste Spannungsabstand ist 0.29470V.
Großes WHOW!
Mit welchem Programm hast Du das berechnet?
> Das war natürlich Brute Force + Startwerte nach Gefühl. Einen Ansatz> mit logischer Überlegung, der über Bauchgefühl hinausgeht, fände ich> auch interessant.
Mein Bauchgefühl sagt mir, ich liege mit der Anordnung der Widerstände
prinzipiell falsch.
Logische Überlegung in Leitwert statt Widerstand:
Ist nur eine Achse angeschlossen, Teile ich mir
den Spannungsbereich in 3 Teile mit
6/6U--------------------
5/6U-- A 5V gedrückt----
4/6U--------------------
3/6U---A offen -------
2/6U--------------------
1/6U-- A GND gedrückt---
0/6U--------------------
Für die Mitte des obersten Bereichs (+5V gedrückt) muss das
Leitwertverhältnis 5:1 betragen (G1 + G2 / G6 = 5/1)
Bei G1=G6 ist G1=4*G1
Da wären dann bei R1=R6=100k und R2=25K gegeben.
Um die zweite Achse auszuwerten sollten die Drittel
wieder gedrittelt werden:
18/18U-------------------------------
17/18U-- A 5V gedrückt, B 5V gedrückt
16/18U--------------------------------
15/18U---A 5V gedrückt, B offen-------
14/18U--------------------------------
13/18U-- A 5V gedrückt, B GND gedrückt
12/18U--------------------------------
Hier muss das Leitwertverhältnis für die Spannung bei
(A 5V gedrückt, B 5V gedrückt) 17:1 betragen.
Oder anders ausgedrückt
(G1 + G2 + G5) / G6 = 17/1
(G1 + 4*G1 + G5) / G1 = 17/1
G5 = 12G1
Für (A 5V gedrückt, B GND gedrückt) wäre das ideale
Leitverhältnis 13:5
(G1 + G2) / (G5 + G6) = 5/13
Es ist aber genau der Kehrwert!
Was sagt mir das?
Eigentlich nur, dass ich prinzipiell auf dem Holzweg bin...
Michael Schikora schrieb:> Mit welchem Programm hast Du das berechnet?
Mit resistorswitchzeug.py im Anhang. Ich hatte irgendwann schon mal mit
der Brute-Force-Berechnung von optimalen Widerständen für mehrere Taster
an einem ADC gespielt und konnte das für dieses Problem anpassen.