Gast
#434932
Hallo zusammen!
Ich soll die Scancodes einer Tastatur in einem µC speichern und
anschließend an einen PC übertragen. Doch irgendwie wird nur Mist
übertragen.
Und zwar werte ich nach einer negativen Flanke des Clock- Signals den
Data Kanal aus und schreibe je nach dem eine 1 oder 0 in eine Variable.
Beim nächsten Interrupt schiebe ich dann die Variable und werte erneut
den Data Kanal aus. Die ISR sieht so aus:
int Feld[100];
int nte_taste=0;
int interruptzaehler=0;
ISR (INT1_vect)
{
interruptzaehler++;
if(nte_taste==99)return;
if(interruptzaehler==11)
{
interruptzaehler=1;
nte_taste++;
}
if (interruptzaehler>1 &&
interruptzaehler<9)Feld[nte_taste]=Feld[nte_taste]<<1;
if (interruptzaehler>1 && interruptzaehler<9 &&
(PIND&0x08)!=0x08)Feld[nte_taste]|=0x01;
if (interruptzaehler>1 && interruptzaehler<9 &&
(PIND&0x08)!=0x00)Feld[nte_taste]|=0x00;
}
Jedoch wird in Feld[x] immer das selbe geschrieben, denn beim Senden an
HyperTerminal wir immer 77 oder FF oder irgendwas ausgegeben.
Vielleicht hier noch die main() mit dem Übertragen an die UART. Ich weiß
katastrophal programmiert, aber es soll ja nur funktionieren. Es kann
nur an die UART übertragen werden wenn eine Taste an Pin PD2 gedrückt
wird:
int i=0;
char c[7];
int n;
main ()
{
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x17;
sei (); // Interrupts zulassen
DDRD = 0x00; // PORT D = Eingang
PORTD = 0xFF; // PORTD = PULL-UP
GICR=0x80;
MCUCR=0x08; // fallende Flanke an PD3
do
{
if ((PIND&0x04)!=0x04)
{
while(!(UCSRA & (1<<UDRE)));
{
i++;
if (i==99)i=0;
itoa (Feld[i],c,16);
for (n=0;n<1;n++)
{
UDR=(c[n]);
}
_delay_ms(10);
}
}
}
while (true); // Mainloop
}