Forum: Mikrocontroller und Digitale Elektronik Keyboard / INT Problem


von Karl Katt (Gast)


Lesenswert?

Hallo!

Habe ein PS2 Keyboard an einen 8051 angeschlossen.
DATA auf P1.5
CLOCK auf /INT0 (P3.2)
Vcc und GND entsprechend

Nun mache ich folgendes:

EA = 1 (interrupts enable)
EX0 = 1 (int0 enable)
IT0 = 1 (react on falling edge)
CLK = 1   (keyboard only sends if clk & data are 1)
DATA = 1   (~)

Jetzt hab ich mir eine interrupt 0 funktion geschrieben,
die nix macht, außer das da ein breakpoint drin ist.

Problem ist, er springt dort nie rein. Sobald ich ne Taste
drücke müsste das keyboard doch ein clk signal senden und der
controller in die interrupt behandlung springen, oder?

Habe ich was vergessen?

Danke
Karl

von Benedikt (Gast)


Lesenswert?

Initialisierung vom Keyboard ?

von Tobi (Gast)


Lesenswert?


von Karl Katt (Gast)


Lesenswert?

Muss ich das so connecten wie auf der Seite von Tobi beschrieben mit
Kondensatoren oder geht es auch einfach die leitungen an den uC
anzuschließen so wie es in den atmel application notes z.b. beschrieben
steht?

Danke.

von Benedikt (Gast)


Lesenswert?

Da der 8051 quasi Open Collector Ausgänge hat, kannst du die Leitungen
direkt anschließen.
Wie gesagt: Einige Tastaturen funktionieren nur, nachdem sie
initialisiert wurden. D.h. nach dem Einschalten senden sie eine Meldung
an den PC, der darauf mit einer Bestätigung und meistens mit der
Initialiaiserung antwortet. Nur dann funktionieren die Tastaturen.

von Karl Katt (Gast)


Lesenswert?

Heißt quasi open collector ausgänge das ich sowohl ein signal von der
tastatur empfangen kann sowie ein signal vom uC auf die leitung legen
kann?
"D.h. nach dem Einschalten senden sie eine Meldung" -> müsste das
nicht schon den interrupt auslösen? Oder schalt ich die interrupts
vielleicht zu spät ein und krieg das signal deswegen nicht?

Danke

von Benedikt (Gast)


Lesenswert?

>Heißt quasi open collector ausgänge das ich sowohl ein signal von der
>tastatur empfangen kann sowie ein signal vom uC auf die leitung legen
>kann?
Ja, immer wenn ein Bit auf High gesetzt ist, ist es als Eingang
verwendbar.

Nach dem Selbststest der Tastatur sendet diese den Wert AA und zeigt
an, dass der Test erfolgreich war. Es müsste also eigentlich ein
Interrupt kommen. Poste mal den Code.

von Karl Katt (Gast)


Lesenswert?

sbit CLK = P3^2;
sbit DAT = P1^2;

void esr0_int() interrupt 0
{
   counter++;    //hier ist ein breakpoint
}

void main()
{
 IT0 = 1;
 EX0 = 1;
 EA = 1;

 DAT = 1;
 CLK = 1;

 while(1);
}

Ich hab den Code leider nicht hier, aber so ungefähr sieht er aus.
Hängt ne Tastatur dran, springt er nie zum breakpoint. Setz ich den
Interrupt per hand mit nem 10k pullup widerstand springt er bei
absteigender taktflanke rein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.