-         

Ergebnis 1 bis 10 von 10

Thema: 3x4 Matrix Tastatur an I2C

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    21
    Beiträge
    175

    3x4 Matrix Tastatur an I2C

    Anzeige

    Hallo,

    ich habe vor, diese Matrixtastatur über einen PCF8574 an den I2C-Bus meines RP6 anzuschließen:
    http://www.conrad.de/ce/de/product/709840/

    Muss ich da Widerstände zwischen die Ports der Tastatur und die des PCF8574 geben (wenn ja, wie hoch) oder kann ich die Tastatur direkt dranhängen?

    lg
    Michi

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Die Tastatur ermöglicht ja nur eine einfache Spalten-/Zeilenauswertung.
    Wenn du das mit einem I/O-Expander machen willst, müßtest du dafür 7 I/O-Ports benutzen. Für jeden Port brauchst du noch einen Pullup-Widerstand (z.B. 4,7 kOhm) gegen VCC. Die Entprellung kannst du mit Software machen.

    Alternativ könnte man diese Tastatur gut analog mit nur einem ADC-Port auslesen. Dafür brauchts ein paar Widerstände.

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    21
    Beiträge
    175
    Hi,

    danke für deine Antwort.
    Ich habe schon mir zu der Alternative mit dem ADC-Port Gedanken gemacht, jedoch hätte das wie bei der M32 den Nachteil, dass immer nur eine Taste zur gleichen Zeit gedrückt sein kann.
    Mit 7-Ports kann ich zumindest 4 Tasten gleichzeitig auslesen.

    Die Pullup-Widerstände hänge ich dann zwischen Expanderport und Tastaturport, oder?

    lg
    Michi

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Hi

    PullUp Widerstände kommen zwischen Versorgungsspannung und Eingang.

    Du kannst mit einem ADC auch mehrere Taster gleichzeitig abfragen!

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Ein paar Tasten gehen über einen AD, aber 12 Tasten sind dann doch recht viel, wenn man auch noch zulassen will, dass mehrere gleichzeitig gedrückt werden.

    An einen 8 Bit Port-expander könnte man 12 Tasten auch als 2x6 Matirx anbringen und so bis zu 6 Tasten gleichzeitig drücken. Um beliebige Tastenkombination abzufragen könnte man bei der Matrix zu jeder Taste eine Diode in Reihe schalten.

    Dann würde es sich aber ggf noch anbieten doch alle Tasten einzlen anzuschließne und eine 12 (bzw. 16) Port Erweiterung zu nehmen.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    21
    Beiträge
    175
    Hallo,

    ja ich habe auch schon überlegt, eine 1x12 Matrix zu verwenden, aber da bräuchte ich dann einen 16Bit Portexpander (PCF8575),
    doch den krig ich in Österreich leider nirgens her

    Ich werde dann doch bei der 3x4 bleiben, denn mehr als 4 Tasten gleichzeitig benötigt man sowieso nicht
    und 2x6 Tastaturen sind ebenfalls schwer zu bekommen, so wie ich das nach meiner bisherigen Recherche einschätzen kann.

    lg
    Michi

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Hi

    Du kannst aber auch 2 8bit-PortExpander anschliessen.
    Gibt es z.B. bei eBay.at recht güsntig http://cgi.ebay.at/IC-PCF8574P-I-C-8...item255b535273

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Leute,

    bei den kleinen Bedientastaturen an Geräten, Handys ... spielt die Betätigung von mehreren Tasten gleichzeitig praktisch keine Rolle, da man sie meistens nur mit 1 Finger bedient.

    Stattdessen gibt es eine oder 2 Umschalttasten, mit denen man sozusagen die "Ebenen" der Tastenbelegung einblendet. Denkt z.B. an die Groß-/Kleinschreibung oder die Zahlen-/Buchstabenumschaltung bei Handys.

    Auf eine Auswertung von gleichzeitig gedrückten Tasten kann man also gut verzichten. Oder wofür braucht man das wirklich?
    Braucht man aber mehr als 12 Tasten, könnte man eine Taste softwaremäßig als Umschalttaste vorsehen. Man hätte dann 2 x 11 = 22 Funktionen.
    Nimmt man 2 Umschalttasten, hätte man 4 x 10 = 40 Funktionen.

    Gruß Dirk

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Die D.... hätten auch einen Schaltplan ins Datenblatt stellen können. Es ist eine 3x4-Matrix die man mit 7 Pins abfragen kann. Deshalb wohl auch die 7 Steckkontakte:

    http://www.google.de/search?q=s512j-bf7kuv

    Gruß

    mic

    Ach, jetzt ist mir auch der Aufbau der Platine klar:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken matrix3x4.jpg   googlemachtwitze.jpg  

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Eher zufällig habe ich einen PCF8574A rumliegen, eine 4x4-Tastatur und 'nen RP6. Und ich wollte schon immer mal in die I2C-Technik einsteigen. Hier meine Umsetzung der Aufgabe:

    Der PCF8574(A) kennt, anders als die AVRs, nur zwei Zustände an seinen Ausgängen. Eine "0" schaltet den Ausgang auf Low, eine "1" ist mit einem Eingang mit internem PullUp des AVRs vergleichbar. Die Spalten der Matrix sind mit den Bits 0 bis 3 des PCF8574 verbunden, die Zeilen mit den Bits 4 bis 7. Zur Abfrage schaltet man nacheinander die Bits 0 bis 3 auf Low und prüft dann jeweils, ob die High-Pegel der Bits 7-4 durch einen Tastenkontakt auf Low gezogen werden. Eigentlich sehr einfach, ich bin deshalb auch nicht der Erste, der das hinbekommen hat;)




    http://www.youtube.com/watch?v=tMIc6e9dLnY

    Das Programm auf Basis der RP6 I2C-Library:
    Code:
    // 4x4-Tastenmatrix an PCF8574A                                     5.11.2010 mic
    
    // http://www.roboternetz.de/phpBB2/zei...ag.php?t=56693
    
    #include "RP6RobotBaseLib.h"
    #include "RP6I2CmasterTWI.h"
    
    uint8_t c=0, leds=0;
    uint16_t tasten;
    
    uint16_t PollSwitch16(void)
    {
    	uint8_t i, j, x, temp;
    	uint16_t mask=0;
    
    	temp=I2CTWI_readByte(0b01110001);         // aktuelles Bitmuster sichern
    	for(j=0; j<4; j++)
    	{
    		I2CTWI_transmitByte(0b01110000, ~(1<<j)); // Pin j (0 bis 3) auf Low
    		sleep(2);           								// Warten auf Pegel
    		x=(I2CTWI_readByte(0b01110001)>>4); 		// Eingang 7-4 wird zu Bit 3-0 in x
    		for(i=0; i<4; i++)   							// Bits 0-3 überprüfen
    			if(!(x & (1<<i))) 							// Wenn Eingang low ist wurde die Taste gedrückt
    				mask += (1 << (i*4)) * (1<<j); 		// entsprechendes Bit in Maske setzen
    	}
       I2CTWI_transmitByte(0b01110000, temp);       // gespeichertes Bitmuster ausgeben
    	return(mask);
    }
    int main(void)
    {
       initRobotBase();
     	I2CTWI_initMaster(100);
    	startStopwatch1();
    	startStopwatch2();
       while(1)
       {
    		if(getStopwatch1() > 300)  // Lauflicht an Pin 0 bis 7 des PCF8574A
    		{
    			setStopwatch1(0);
    			I2CTWI_transmitByte(0b01110000, ~(1<<c));
    			c++;
    			if(c>7) c=0;
       	}
    
    		if(getStopwatch2() > 50) // Tastenabfrage
    		{
    			setStopwatch2(0);
    			tasten=PollSwitch16();
    			if(tasten)
    			{
    				writeInteger(tasten, 2); // Bitmuster des Keypads an Terminal ausgeben
    				writeChar('\n');
    				
    				leds=0; // Spielerei mit den Leds
    				if(tasten & (1<<0)) leds+=8; // Taste 1
    				if(tasten & (1<<1)) leds+=1;
    				if(tasten & (1<<2)) leds+=16;
    				if(tasten & (1<<3)) leds+=2;
    				if(tasten & (1<<4)) leds+=32;
    				if(tasten & (1<<5)) leds+=4; // Taste 6
    				setLEDs(leds);
    			}
    			else setLEDs(0); // Keine Taste gedrückt
       	}
    	}
       return(0);
    }
    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •