PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Taster entprellen



Mr Bean
08.05.2007, 17:58
Hallo

Ich hab heute Mittag meine ersten Schritte in GCC gewagt. Hab davor meinen Mega8 mit Assambler programmiert. Ich hab da noch probleme meinen Schalter zu entprellen. Aber zuerst mal ein paar Fakten zu meinem Aufbau. Die LED`s sind an Port D0-D7 und werden mit logisch 0 eingeschalten. Der Schalter ist an Port C3 und schaltet den eingang auf GND. Ich hab das mit folgendem Code probiert. Hab da den debounce Teil aus dem Tutorial rein kopiert.

#include <avr/io.h>
#include <inttypes.h>
#include <avr/delay.h>

#define F_CPU 4000000UL

inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)

{

if(!(PINC & (1<<PINC3)))

{
_delay_ms(100);


if(!(PINC & (1<<PINC3)))

{
_delay_ms(100);
return 1;
}

}

return 0;
}


int main(void)
{

DDRD = 0xff; // Port für LED`s als Ausgang schalten
DDRC = 0b11110000; //Port C0-C3 als Eingänge (Schalter)


PORTC |= (1<<PC0); //interne Pull Up`s für Schalter 1 aktivieren


if(debounce(&PINC, PC3)) //Wenn Schalter betätigt > LED`s aus.

{
PORTD =0x00;
}


if(PINC &(1<<PINC3)) //Wenn Schalter inaktiv > LED`s an.

{

PORTD =0xff;
}

return 0;

}

Ich hab das soweit hin bekommen daß er den Schalter entprellt, aber die LED`s erst verzögert einschalten. Das wollt ich eigentlich auch nicht.
Kann mir da vielleicht jemand helfen, auch wenn das eine recht einfache Frage ist. (Ich hab heute auch schon gesucht, aber leider nichts passendes gefunden).

MFG

Bean

izaseba
08.05.2007, 18:07
Was ist das für eine Entprellroutine?
Angenommen, man kann _delay... wirklich mit 100 mS vorladen, setzt Du den µC für 200ms aufs Eis...

Ich Nutze immer einen Timer, seh einfach zu, daß Du einen Timer hast, der irgendwie alle 100 mS einen Interrupt macht, da prüfst Du Deinen Taster und setzt einen Flag , den Du wiederum in main prüfst.
Ich hatte auf diese Weise noch nie Problemme mit Tasten...
Gruß Sebastian

Razer
08.05.2007, 18:12
Schau mal diese Routinen an: http://www.mikrocontroller.net/topic/6492

Wen man sie verstanden hat, sind sie wirklich easy und funktionieren wunderbar :)