Pfad:
Home =>
AVR_DE =>
Anwendungen =>
Schalter und Tasten am ADC =>
Tasten am ADC => VR-RL-Tasten
This page in English:
 |
Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega and ATxmega
Vor-/Rückwärts und Rechts/Links-Tasten
|
Vor-/Rückwärts- und Rechts-/Links-Tasten an einem AD-Wandler-Kanal
1 Spezialtasten
Um ein Automodell zu dirigieren braucht man zwei Tastenpaare: eines das
Vorwärts und Rückwärts und eines das Links und Rechts
bewirkt. In der Mitte der beiden Tasten ist jeweils Niemandsland und es
wird entweder gar nix verändert oder auf Mittenstellung gestellt.
Zwei Spezialzustände sind noch zu berücksichtigen: wird die
Vorwärts- und die Rückwärts-Taste gleichzeitig gedrückt,
sollte das Modell stehenbleiben (Schnell-Stop). Der zweite Fall: Wenn
die Links- und die Rechts-Taste gleichzeitig gedrückt werden, sollte
das Modell in Mittenstellung gehen (richtungsneutral).
Um diese vier Tasten zu erkennen, braucht es vier Input-Pins oder halt
einen einzigen ADC-Pin. Der produziert bei den elf verschiedenen
Zuständen elf verschiedene Spannungspegel, aus dem dann Controller
sich das passende aussuchen und darauf reagieren kann. Es wird dabei
unterstellt, dass die Taster in Mittenstellung aus sind (entweder
AN-AUS-AN-Taster oder, noch besser, zwei separate Einzeltaster).
Da bei zwei gleichzeitig geschlossenen Tasten deren angeschlossene
Widerstände parallel geschaltet werden, ist die Aufgabe, die
Widerstandswerte optimal einzustellen, nicht trivial. Ich habe
dafür die Soll-Spannungen am ADC die linksstehende Tabelle
erstellt, um den elf Zuständen eindeutige Spannungen
zuzuweisen.
Die Software zum Ermitteln der Widerstandswerte
Die Software ist in Free-Pascal geschrieben. Der Source-Code ist
hier, die für Win64 kompilierte
Software ist hier erhältlich.
Sie ermöglicht
- die Auswahl der Widerstandsreihe (E12/E24/E48/E96),
Einstellung mit r,
- das Spielen mit den Widerstandstoleranzen 1, 2 und 5%,
Einstellung mit t,
- die manuelle Vorgabe von Widerstandswerten, Einstellung
mit den Tasten 1 bis 6, Eingabe in Ohm oder mit k (z. B.
1k5 oder 1K5) bzw. M (z. B. 1M2),
- das Nähern der Widerstandswerte in Einzelschritten
mit s,
- die Näherung in jeweils 100 Einzelschritten mit i,
- das Schreiben der Werte in eine Texttabelle.
Die an einem 8-ADC abzulesenden Werte und der durch die Toleranzen
verursachten Wertebereiche und die Anzahl der Überlappungen
der Spannungsbereiche können beobachtet werden (sollte bei
erfolgreicher Iteration Null sein). Für die Kontrolle mit dem
Voltmeter sind noch Nominal-Spannungen und die Sollspannungen bei
5V Betriebsspannung angegeben.
Bei der Iteration werden nur R1 bis R4 zufällig ausgewählt
und nach unten oder oben verändert, R5 kann nur manuell
geändert werden.
Mit der Taste w wird der derzeitige Zustand in eine Textdatei
geschrieben. Das Folgende zeigt deren Inhalt an einem Beispiel.
Resistor matrix for encoding Forw/Neutral/Backw and Left/Neutral/Right keys
---------------------------------------------------------------------------
Resistor matrix Res-Value Mode min - nom. - max Delta mV@5V mV-Sh
(+) (+) (+) (+) R1=10k Off-Off 0 - 0 - 5 0 0 0
| | | | R2=5k1 Bck-Off 63 - 64 - 64 0 1241 1250
- - - - R3=2k2 For-Off 99 - 101 - 102 22 1964 1550
|R| |R| |R| |R| R4=1k F+B-Off 125 - 127 - 128 -4 2471 2550
|1| |2| |3| |4| R5=3k3 Off-Lft 152 - 154 - 155 0 3000 3000
- - - - Bck-Lft 164 - 166 - 167 0 3233 3250
| O | | O | Row=E24 For-Lft 174 - 175 - 176 -2 3411 3450
o o o o Tol=1% Off-Rgt 196 - 196 - 197 -1 3837 3850
\ / \ / Bck-Rgt 200 - 201 - 202 0 3920 3925
o o For-Rgt 203 - 204 - 205 -1 3989 4000
| | Off-R+L 211 - 212 - 213 0 4138 4150
+--------+-O ADC Sum= 30
---- |
|--| R5 |-- + Overlaps= 0
---- Iteration steps= 100
Successful iteration steps= 25
(C)2020 by DG4FAC Last iteration step on= R2 (successful up)
; Assembler table
ResTable: ; First value: start of key, Second value: end of key plus 1
.db 0, 6 ; Off-Off, V= 0
.db 63, 65 ; Bck-Off, V= 1241
.db 99, 103 ; For-Off, V= 1964
.db 125, 129 ; F+B-Off, V= 2471
.db 152, 156 ; Off-Lft, V= 3000
.db 164, 168 ; Bck-Lft, V= 3233
.db 174, 177 ; For-Lft, V= 3411
.db 196, 198 ; Off-Rgt, V= 3837
.db 200, 203 ; Bck-Rgt, V= 3920
.db 203, 206 ; For-Rgt, V= 3989
.db 211, 214 ; Off-R+L, V= 4138
Mit der Assemblertabelle am Ende lässt sich bequem der Quellcode
für die Auswertung schreiben.
Noch ein paar Hinweise:
- Mit 5% Toleranz lässt sich keine nicht-überlappende
Widerstandskombination hinkriegen.
- Wer an den Sollwerten schrauben will, muss das im PascaL-Quellcode
in dem Array aeSh tun.
- Wer noch zusätzlich abfragen will, ob alle vier Tasten
gleichzeitig gedrückt, fügt diesen Zustand der
Assembler-Tabelle als zusätzlichen Eintrag an und muss die
Toleranzen von Hand rechnen.
Und nun noch eine Variation: warum nicht eine fünfte Taste
hinzufügen und die direkt mit der Betriebsspannung verbinden?
Diese Super-Taste, z. B. in der Mitte der vier Tasten, kann
als Not-Aus oder Alarm dienen. Wer so was braucht,
fügt die einfach hinzu, fügt in der Software noch eine
Abfrage hinzu, die das Entsprechende einleitet, wenn der ADC an
seiner Obergrenze ist (8 Bit: > 250). Das geht ratzfatz und
ist super-zuverlässig.
Viel Erfolg.
©2020 by http://www.avr-asm-tutorial.net