Hi,
ich habe offensichtlich ein Verständnisproblem mit dem
keyboard-interface des AT89C51ED2. Es ist eine einfache 2x3
Tastaturmatrix angeschlossen.
Das Atmel-Testprogramm erkennt keine Taste, da kein Interrupt ausgelöst
wird.
Woran kann das liegen? Den SPI-Bus benutze ich auch, später, wenn die
Tasten
erkannt werden...
Verschiedene KBE, KBLS Registerkombinationen habe ich schon probiert...
Danke für etl. Tipps
RABIS
1
// SDCC
2
#include<AT89C51ED2.h>
3
// ...
4
5
unsignedintkeypressed;/* key pressed value */
6
__bitvolatilekey_flag;/* software flag */
7
8
voidmain()
9
{
10
EA=1;/* enable interrupts */
11
/* init keyboard */
12
KBE=0xFF;/*Enable all P1 I/O as keyboard IO */
13
KBF=0x00;/* Clear all keyboard flags */
14
IEN1|=0x01;/* Enable keyboard interupt */
15
16
while(1)/* endless */
17
{
18
if(key_flag)/* keyboard occur */
19
{
20
printf_fast("keypressed: %x\r\n",keypressed);
21
key_flag=0;/* reset softaware flag */
22
}
23
}
24
}
25
26
/**
27
* FUNCTION_PURPOSE:keyboard_interrupt. Save pressed key
R. B. schrieb:> Das Atmel-Testprogramm erkennt keine Taste, da kein Interrupt ausgelöst> wird.
Da hatter auch recht, High auf High ergibt keine Änderung.
Du müßtest erstmal P1.0 - P1.2 auf Low setzen.
Erst dann ändern sich beim Drücken P1.3 oder P1.4.
Peter
@ Peter
Bis jetzt habe ich P1.3 und P1.4 auf low gesetzt und R1 und R2
weggelassen.
Dann werden zumindest alle Tasten (doppelt) erkannt.
Danke vorerst, Deinen Tipp werde ich heute ausprobieren.
Atmel-Support ggrrrhhh.
RABIS
R. B. schrieb:> Dann werden zumindest alle Tasten (doppelt) erkannt.
Willkommen in der realen Welt der Mechanik, Taster prellen nunmal.
Deshalb nimmt man den Keyboard-Interrupt nur zum Aufwachen aus dem
Powerdown.
Das Einlesen und Entprellen macht man dann in der üblichen Weise mit dem
Timerinterrupt.
R. B. schrieb:> Atmel-Support ggrrrhhh.
Der Support wird Dir kaum beim Programmieren lernen helfen.
Er ist für konkrete Probleme mit dem Chip zuständig, z.B. wenn Du einen
Bugreport hast.
Peter
R. B. schrieb:> Bis jetzt habe ich P1.3 und P1.4 auf low gesetzt und R1 und R2> weggelassen.
Wie rum, ist egal.
Ich hatte nur andersrum geschrieben, damit die 2 Pullups nicht nutzlos
sind.
Peter
Hier mal ne gute Beschreibung, die ich gefunden habe:
http://mikrocontroller.rahm-home.de/docfiles/Uebungen/4_7_6_Matrixtastatur_mit_Interrupt.pdf
Ich bin davon ausgegangen, dass die Keyboard-Steuerung im AT89C51ED2
"intelligent" ist und Entprellung, Dekodierung und Multiplex übernimmt.
Zu der Annahme hat mich die Application Note ANM071 für den TSC80251G1
von Atmel verleitet.
Die "normale" Keyboardmatrix hatte ich schon.
Gruß
RABIS
R. B. schrieb:> Ich bin davon ausgegangen, dass die Keyboard-Steuerung im AT89C51ED2> "intelligent" ist und Entprellung, Dekodierung und Multiplex übernimmt.> Zu der Annahme hat mich die Application Note ANM071 für den TSC80251G1> von Atmel verleitet.
Nö, da steht doch:
"In the demonstration software, timer 1 is used to manage the debounce
delay."
Ein stupides Warten ist allerdings kein sehr zuverlässiges Entprellen,
wird aber leider oft so gemacht.
Peter