Guten tag,
ich versuche gerade eine PS/2 Tastatur an meinem Atmega644-PA-PU zum
laufen zu bringen. Mein Problem ist wie ich aus den Bytes den Scanncode
heraus finden kann ? Zum Beispiel für a = 1C
Hier mein bisheriger Code:
1 | /*
|
2 | * keyboard.c
|
3 | *
|
4 | * Created: 23.07.2013 14:47:48
|
5 | * Author: repac3r
|
6 | */
|
7 |
|
8 |
|
9 | #include <avr/io.h>
|
10 | #include <avr/interrupt.h>
|
11 |
|
12 | uint8_t bCounter;
|
13 | uint8_t bStatus; //1->Start, 2->Data, 3->Pairty, 4->Stop
|
14 | char kbd_data[8];
|
15 |
|
16 | ISR(PCINT0_vect)
|
17 | {
|
18 | if(bStatus == 0)
|
19 | {
|
20 | if(PINC &(1<<PC4))
|
21 | {
|
22 | bStatus = 1; //Startbit
|
23 | }
|
24 | }
|
25 | else if(bStatus == 1 || bStatus == 2)
|
26 | {
|
27 | if(bCounter <= 7)
|
28 | {
|
29 | if((PINC &(1<<PC2)))
|
30 | {
|
31 | kbd_data[bCounter] = 1;
|
32 | bCounter++;
|
33 | }
|
34 | else
|
35 | {
|
36 | kbd_data[bCounter] = 0;
|
37 | bCounter++;
|
38 | }
|
39 |
|
40 | }
|
41 | else
|
42 | {
|
43 | bStatus = 3;
|
44 | }
|
45 | }
|
46 | else if(bStatus == 3)
|
47 | {
|
48 | //Pairty witd nicht benutzt
|
49 | bStatus == 4;
|
50 | }
|
51 | else if(bStatus == 4)
|
52 | {
|
53 | bStatus = 0;
|
54 | bCounter = 0;
|
55 | }
|
56 | }
|
57 |
|
58 | int main(void)
|
59 | {
|
60 | bStatus = 0;
|
61 | bCounter = 0;
|
62 |
|
63 | sei(); //Interrupts aktivieren
|
64 |
|
65 | PCICR |= (1<<PCIE0); //Pin Change Interrupt 0 aktivieren
|
66 | PCMSK0 |= (1<<PCINT0); //Interrupt auf PCINT0
|
67 |
|
68 | DDRA &= ~((1<<PA0) | (1<<PA1)); //Ausgänge definieren (externe 4,7k Pullups aktiv)
|
69 | while(1)
|
70 | {
|
71 | //TODO:: Please write your application code
|
72 | }
|
73 | }
|