-
        

Ergebnis 1 bis 3 von 3

Thema: Probleme mit Taster entprellen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    33
    Beiträge
    240

    Probleme mit Taster entprellen

    Anzeige

    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.
    Code:
    #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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    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
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2006
    Ort
    Gratkorn
    Alter
    27
    Beiträge
    207
    Schau mal diese Routinen an: http://www.mikrocontroller.net/topic/6492

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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •