Pfad: Home => AVR_DE => Anwendungen => Tasten und Schalter an einem ADC
Key matrix Anwendungen von
AVR-Einzelchip-Mikrocontroller AT90S, ATtiny, ATmega and ATxmega
Tasten, Schalter und Widerstände an einem ADC-Eingang
Logo


Die gesamte Seite und zugehörige Unterseiten sind in diesem PDF-Dokument (35 Seiten, 1.3 MB) enthalten.

Tasten und Schalter an einem AD-Wandler-Kanal

Das ist die Seite, die hilft Portpins einzusparen und für weit wichtigere Zwecke einzusetzen als nur das Einlesen von Tasten und Schaltern. Der Trick, der hier beschrieben ist, besteht aus dem Anschließen von ein paar Widerständen und dem Messen von Spannungen mit dem AD-Wandler, um mithilfe von etwas Assembler Code daraus auf die gedrückten Tasten und Schalter zu schließen.

Wenn Du nähere Erläuterungen zur Funktionsweise von Widerstandsnetzwerken und ihre Berechnung brauchst, gehe auf die diversen Unterseiten.

Der Anschluss von mehreren Tasten und Schaltern an einen ADC-Eingang kann auf verschiedene Weise vorgenommen werden. Drei Optionen werden hier beschrieben, abhängig von der benötigten Hardware:
HardwareSeite
Widerstandstastenfeld Diese Lösung hier kann alle Hardwarekombinationen Link
n Tasten Wenn bis zu acht verschiedene Tasten angeschlossen werden sollen, von denen immer nur eine einzige gedrückt sein wird Link
Maeuseklavier Wenn Du bis zu vier Schalter hast, die gleichzeitig jeweils an oder aus sein können (wie ein DIP-Schalter oder Mäuseklavier) Link,
Tastenfeld Wenn Du ein Tastenfeld mit 12 Tasten in einer 3-mal-4-Matrix hast, bei der nur eine der Tasten gleichzeitig gedrückt sein kann und wenn Du lernen möchtest, wie man so was an einen AVR anschließt Link
... und wenn Du Kommandozeilen-Programme bevorzugst um die Widerstände anzunähern Link
... und wenn Du ein grafisches Anwendungsprogramm bevorzugst um die Widerstandswerte zu berechnen Link

Die Softwarelösung, die alles kann

Weil das Berechnen von Widerstandswerten für Tasten, Schalter und Tastenfelder in allen Fällen ganz ähnlich ist, gibt es mit jetzt diese Universallösung für alle Fälle (für Win64).

Die Anwendung ist kinderleicht:
  1. Das Ausklappfeld Type wählt zwischen Tasten (keys), Schaltern (switches) oder Tastenfeldern (keypads) aus,
    Typmenue Tastentyp Schaltertyp Tastenfeldtyp

  2. abhängig von der Typauswahl bietet das Ausklappfeld Size eine Größenauswahl an,
    Tastenanzahl Schalteranzahl Tastenfeldgroesse

  3. dann noch, wenn gewünscht, Widerstandseigenschaften und AD-Wandler-Eigenschaften aus den Ausklappfeldern wählen,
    Widerstandstoleranzen Widerstandsreihen ADC-Aufloesung
Beim Auswählen der letztgenannten Einstellungen kann man die Rückfrage sorglos bejahen, da der Default sowieso schon eingestellt ist.

Nachdem alles eingestellt ist, kann man mit dem Schaltfeld Iterate1 in Einzelschritten, mit dem Schaltfeld Iterate100 100 Schritte auf einmal Widerstände nähern.

Naeherungsfenster Im Nur-Lese-Fenster Difference wird der durchschnittliche Abstand zum Sollwert (in mV/V) angegeben. Er sollte bei erfolgreicher Näherung niedriger werden. Das Nur-Lese-Fenster Overlaps zeigt die Anzahl Überlappungen an, bei denen ein ADC-Wertebereich einer Taste in den ADC-Wertebereich einer anderen Taste hereinragt. Bei erfolgreicher Näherung sollte dieser Wert Null sein. Kriegt man das nicht hin, kann man (in der gezeigten Reihenfolge)
  1. den Lauf neu starten (mit dem Schaltfeld Restart),
  2. die Toleranz der Widerstände verringern,
  3. die Auflösung des ADC erhöhen, und/oder
  4. es mit einer höheren E-Reihe probieren.
Das Nur-Lese-Feld Steps zählt die Näherungsschritte, das Feld Success nur die erfolgreichen.

Die Gruppe Show

Show-Gruppe

öffnet diverse Ergebnisfenster:

  1. Resistors öffnet eine Fenster, das die Werte der Widerstände und ihre untere und obere Grenze anzeigt (abhängig von der eingestellten Toleranz),

    Widerstands-Fenster Klickt man auf irgendeinen der eingetragenen Werte, dann kann diese Tabelle als Textdatei (*.txt) gespeichert werden.

  2. Schematic öffnet ein Fenster mit dem Schaltbild:

    Schaltbild-Fenster Klickt man in das Fenster, kann das Bild entweder im Portable-Network-Graphic-Format (*.png) oder als Bitmap-Graphik (*.bmp) gespeichert werden.

  3. Results zeigt alle Zwischenwerte der Berechnung an, und zwar für alle Tasten und Schalterzustände. Angezeigt wird der Sollwert, der Ist-Wert sowie die untere und obere Grenze der Spannung (in mV/V) sowie die zugehörigen AD-Wandler-Werte mit Unter- und Obergrenze,

    Ergebnis-Fenster Wenn man auf irgendeinen der angezeigten Werte klickt, wird der Fensterinhalt entweder als Tabulator-getrennte (*.tsv) oder als Komma-getrennte (*.csv) Wertedatei abgespeichert. Diese Dateien können direkt in eine Tabellenkalkulation gefüttert werden, z.B. in Calc aus dem Open-Office-Paket (rechte Maustaste auf die *.tsv-Datei, Öffnen mit und Calc auswählen, Kommata und Leerzeichen als Trennzeichen abwählen, Tabulator anwählen) oder in Excel aus dem M$-Office-Paket (Leeres Blatt, *.tsv-Datei mit Drag-und-Drop auf Blatt ablegen).

    Die mit Tab getrennte Variante hat den Vorteil, dass sie das Dezimaltrennzeichen aus den System-Einstellungen des Betriebssystems entnimmt und daher Fließkommazahlen korrekt gelesen werden.

  4. Asm source stellt eine Assembler-Tabelle zur Verfügung, die als Include-Datei direkt in Assembler-Quellcode eingelesen werden kann,

    Assembler-Fenster Klickt man in das Fenster, kann man den Inhalt als *.inc speichern und im Quellcode mit .include "dateiname.inc" in den Code einlesen.

  5. All resp. None wählt alle bzw. keines der Fenster zur Anzeige aus.
Der Dateiname setzt sich in allen Fällen so zusammen:
"[type]_[size]_[resistor row]_[resistor tolerance%]_[ADC resolution]"
Name und Pfad können im Dialog beliebig geändert werden.

©2018 by http://www.avr-asm-tutorial.net