Gast
#76992
hallo, ich habe versucht eine tastatur an meinen atmel uC anzuschliessen
und werte das clock signal über einen interupt aus.
komischerweise erhielt ich bei jedem tastendruck immer einen anderen
Wert, der sich nach 11 Perioden widerholte. Es sieht so aus, als ob die
bits bei jedem tastendruck nach links geshiftet werden. Trotzdem sind
es aber 11 Perioden und nicht 8.
Nach einigem rumprobieren, hab ich dann auf den standart algorythmus
aus einem pdf-document zurückgegriffen, aber der fehler ist nach wie
vor der gleiche.
Wahrscheinlich handelt es sich um einen simplem Denkfehler, den ich
aber einfach nicht finden kann.
Also hier der code (Ausschnitt):
SIGNAL(SIG_INTERRUPT0) //wird aufgerufen beim interrupt auf int0
{
static unsigned char data; // Holds the received scan code
if ((bitcount < 11) && (bitcount > 2)) // Bit 3 to 10 is data.
Parity bit is ignored
{
data = (data >> 1);
if(bit_is_set(PIND, 3)) data = data | 0x80;
}
if((--bitcount) == 0) // All bits received
{
SendeChar(data);
data=0;
bitcount = 11;
}
}
bitcount ist global deklariert.
Wär echt nett, wenn sichs mal jemand anschauen könnete, Danke!