kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu

10.3 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 10.3-1: Layout für die Tastenmatrix

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

Bild 10.3-2: Verbindungsschema Tastenmatrix / Mikrocontroller.

BILDBESCHREIBUNG

Bild 10.3-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 10.3-1: Testprogramm für Tastenmatrix