kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz

9.27.1 Verwendung einer Tastenmatrix

  • Im folgenden soll eine Tastenmatrix zur Eingabe verwendet werden.
  • Die Matrix besteht aus vier Zeilen mit jeweils drei Spalten.
  • Als Anschlüsse gibt es für jede Zeile und für jede Spalte einen Pin.
  • Beim Drücken einer Taste, wird der zugehörige Zeilenpin mit dem zugehörigen Spalten Pin verbunden.
  • Wie kann nach Anschluß dieser Pins an die digitalen Ein/Ausgänge des Mikrocontrollers durch ein Programm die gerade gedrückte Taste bestimmt werden? - s. Vorlesung.
  • Hier ist zunächst das Layout für die Tastenmatrix:
BILDBESCHREIBUNG

Bild 9.27.1-1: Layout für die Tastenmatrix

  • Folgendes Schema zeigt, wie im testaufbau die Tastenmatrix mit dem Mikrocontroller verbunden wurde:
BILDBESCHREIBUNG

Bild 9.27.1-2: Verbindungsschema Tastenmatrix / Mikrocontroller.

BILDBESCHREIBUNG

Bild 9.27.1-3: Versuchsaufbau

  • Es soll nun ein Testprogramm vorgestellt werden, das die gerade gedrückte Taste am Hyperterminal anzeigt.
  • Der Trick des folgenden Programms besteht darin, nacheinander jede Spalte als Ausgang zu setzen, um dann zu prüfen, ob in igendeiner Zeile eine Reaktion erfolgt.
  • Dies ist nur der Fall, wenn eine Taste gerade gedrückt wird:
03_taster_matrix.zip - Download des nachfolgendne Projekts
//Die gedrückte Taste wird über RS232 angezeigt.
//Verbindung Tastenfeld - ATmega
//              1           PC1
//              2           PC2
//              3           PC3
//              4           PC4
//              5           PC5
//              6           PC6
//              7           PC7

//Taste  verbindet PCx mit PCy
//  1                4       1
//  2                4       2
//  3                4       3
//  4                5       1
//  5                5       2
//  6                5       3
//  7                6       1
//  8                6       2
//  9                6       3
//  *                7       1
//  0                7       2
//  #                7       3


#include <avr/io.h>

#define TAKTFREQUENZ 9216000

#include "RS232.h"

RS232 rs232;

int main(void)
{
    rs232.start(true,true);

//PC 1 2 3 als Ausgang
//PC 4 5 6 7 als Eingang
    DDRC = 0b00001110;

//Pullup für Eingänge
    PORTC |= 0b11110000; 

    rs232.sendeText("Test einer Taster-Matrix\n\r");
    while(true)
    {
        //PC1 auf Masse ziehen
        PORTC |= 0b00001110;
        PORTC &= 0b11111101;
        //prüfen, ob PC 4,5,6 oder 7 einen Low-Pegel aufweisen
        //prüfen, ob PC 4,5,6 oder 7 einen Low-Pegel aufweisen
        if( !(PINC & 0b00010000) )
            rs232.sendeText("1\n\r");
        if( !(PINC & 0b00100000) )
            rs232.sendeText("4\n\r");
        if( !(PINC & 0b01000000) )
            rs232.sendeText("7\n\r");
        if( !(PINC & 0b10000000) )
            rs232.sendeText("*\n\r");



        //PC2 auf Masse ziehen
        PORTC |= 0b00001110;
        PORTC &= 0b11111011;
        //prüfen, ob PC 4,5,6 oder 7 einen Low-Pegel aufweisen
        if( !(PINC & 0b00010000) )
            rs232.sendeText("2\n\r");
        if( !(PINC & 0b00100000) )
            rs232.sendeText("5\n\r");
        if( !(PINC & 0b01000000) )
            rs232.sendeText("8\n\r");
        if( !(PINC & 0b10000000) )
            rs232.sendeText("0\n\r");


        //PC3 auf Masse ziehen
        PORTC |= 0b00001110;
        PORTC &= 0b11110111;
        //prüfen, ob PC 4,5,6 oder 7 einen Low-Pegel aufweisen
        if( !(PINC & 0b00010000) )
            rs232.sendeText("3\n\r");
        if( !(PINC & 0b00100000) )
            rs232.sendeText("6\n\r");
        if( !(PINC & 0b01000000) )
            rs232.sendeText("9\n\r");
        if( !(PINC & 0b10000000) )
            rs232.sendeText("#\n\r");
    }
	return 0;
}
 

Code 9.27.1-1: Testprogramm für Tastenmatrix