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
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