AVR PS/2 Bits verwerten ?

Gast #3252023
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren