Gast
#2198489
Hallo allerseits,
ich habe ein Problem, das mich schon zur Verzweiflung gebracht hat. Ich
versuche einen einfachen Taster zu simulieren, indem ich vorerst den PIN
mit Masse verbinde. Schalter sollen an die Pins 0, 1 und 2 von PORTC
kommen. Ich verwende folgende selbstgeschrieben Routinen:
void initPortCin()
{
DDRC &= ~(_BV(0)|_BV(1)|_BV(2)); //PortC als Eingang
PORTC |= _BV(0)|_BV(1)|_BV(2); //PullUp Widerstände an
}
Abfragen tu ich das ganze mit folgender Funktion. Diese Funktion gibt
den invertierten PORT-Wert zurück. wenn also PC0 gedrückt wird, soll
0x01, PC1 0x02 und PC3 0x03 zurückgegeben werden. Ist eine Taster länger
gedrückt, soll 0xFF zurückgegeben werden. Leider funktioniert das ganze
zwar auf meinem Programmierboard mit high-aktiver-schalter logik
(Pollin), aber mit low-aktiver gehts nicht mehr. Am Port außen habe ich
sonst nichts angeschlossen, außer einem Draht den ich ggf. an GND lege.
unsigned char waitforKey_C()
{
unsigned char ret;
unsigned int i=0;
unsigned int k=0;
while(PINC==0xFF) {;}
ret=PINC;
_delay_ms(25);
while(PINC!=0xFF)
{
i=i+1;
if(i==1000)
{
i=0;
k=k+1;
}
//etwa 3 Sekunden
if(k==800)
{
i=0;
k=0;
ret=0xFF;
}
}
return ~ret;
}
Ich hoffe hier ist einer so findig sich in fremden Code einzulesen und
erkennt vielleicht mein Problem.
Grüße Dennis R.