- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 13

Thema: Taster entprellen?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230

    Taster entprellen?

    Hi
    Ich versuche eine Funktion zu bauen mit der ich bauen entprellt an PORT's Abfragen kann, nun leider funktioniert mein Programm nicht und ich weis nicht warum?

    Kann mir einer Tipps, geben wie ich mein Funktion testen könnte oder wo das Problem ist?

    Mein Setup ist AVR Studio 4, STK500 mit Atmega644 8MHz.


    Code:
    /*
    Funktion zum Tasten entprellen 
    taster([PORTx], ([PDx]|[PDy]|[PDz]|.usw ))
    
    Ich lese den PIND, PD0 ein und gebe ihn entprellt wider am PORTB aus.
    Test Bort ist das STK500 mit Atmega644 8MHz.
    PORTB ist auf LED's, und PORTD ist auf Taster geschaltet.
    
    */
    #include <avr/io.h>
    #include <stdint.h> 
    #ifndef F_CPU
    #warning "F_CPU war noch nicht definiert, wird nun mit 8000000 Hz definiert"
    #define F_CPU 8000000UL     /* Quarz mit 8000000 Hz  */
    #endif
    #include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */      
     
    //Funktions Prototypen
    
    uint8_t taster(uint8_t pinx, uint8_t px);
    
    
    int main (void)
    {
    
    DDRB = 0xff;        //PORTB Ausgang
    
    
    
        while(1)           //Hauptschleife
        {
    
            if(taster(PIND, PD0)) //Taster0 Abfragen 
            {
    
                            
                PORTB = PD0;  //LED0 Einschalten 
            }    
    
        }                //Hauptschleife Ende
    return 0;
    
    }    //Main Ende                
    
    
    //Funktion, taster([PORTx], ([PDx]|[PDy]|[PDz]|.usw ))
    uint8_t taster(uint8_t pinx, uint8_t px)
    {
    
        if( pinx == (1 << px))
        {
            _delay_ms(10);
        }
        
        else
        {
            return 0;
        }
    
        if( pinx == (1 << px))
        {
            return pinx;
        }
    
        else
        {    
            return 0;
        }
    
    }
    Danke
    by Ferdinand.
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    statt:
    if( pinx == (1 << px))
    versuch mal
    if( pinx & (1 << px))
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    Das tut auch nicht, zudem jetzt noch Ale LED's an sind.
    Ich vermute mal das liegt an DDRB = 0xff; das Ale LED's an sind.

    Neuer Code
    Code:
    /*
    Funktion zum Tasten entprellen 
    taster([PORTx], ([PDx]|[PDy]|[PDz]|.usw ))
    
    Ich lese den PIND, PD0 ein und gebe ihn entprellt wider am PORTB aus.
    Test Bort ist das STK500 mit Atmega644 8MHz.
    PORTB ist auf LED's, und PORTD ist auf Taster geschaltet.
    
    */
    #include <avr/io.h>
    #include <stdint.h> 
    #ifndef F_CPU
    #warning "F_CPU war noch nicht definiert, wird nun mit 8000000 Hz definiert"
    #define F_CPU 8000000UL     /* Quarz mit 8000000 Hz  */
    #endif
    #include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */      
     
    //Funktions Prototypen
    
    uint8_t taster(uint8_t pinx, uint8_t px);
    
    
    int main (void)
    {
    
    DDRB = 0xff;        //PORTB Ausgang
    
    
    
        while(1)           //Hauptschleife
        {
    
            if(taster(PIND, PD0)) //Taster0 Abfragen 
            {
    
                            
                PORTB = PD0;  //LED0 Einschalten 
            }    
    
        }                //Hauptschleife Ende
    return 0;
    
    }    //Main Ende                
    
    
    //Funktion, taster([PORTx], ([PDx]|[PDy]|[PDz]|.usw ))
    uint8_t taster(uint8_t pinx, uint8_t px)
    {
    
        if( pinx & (1 << px))
        {
            _delay_ms(10);
        }
        
        else
        {
            return 0;
        }
    
        if( pinx & (1 << px))
        {
            return pinx;
        }
    
        else
        {    
            return 0;
        }
    
    }
    Danke
    by Ferdinand.
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    Ich habe hier etwas gefunden.

    Nun möchte ich diesen Code ausprobieren "Debounce-Makro von Peter Dannegger" und habe ihn für diesen zwecke so abgeändert.
    Code:
    /*
       Testapplication
     */
    int main(void)
    {
      DDRD  &= ~(1<<PD0);
      PORTD |=   1<<PD0;
      
      for(;;){
        if( debounce( PIND, PD0 ) )
          PORTB ^= 1<<PD0;
        
      }
    }
    Ich möcht mit Taste 0 eine LED ein und aus schalten, aber es geht nicht, nun ich blick langsam auch nicht mehr durch hätte nicht gedacht das, das so schwer wird.

    Danke
    by Ferdinand
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Zitat Zitat von Ferdinand
    ... diesen Code ausprobieren "Debounce-Makro von Peter Dannegger" ... aber es geht nicht ...
    Zitat Zitat von mikrocontroller.net
    ... Makro arbeitet in der Originalversion mit active low geschalteten Tastern ...
    Wie sind Deine Taster geschaltet?
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    Da ich das STK500 verwende und ich mein das ich das schon mal Gelessen habe sind die, wen ich sie drücke auch auf GND gezogen.
    Aber du hast rech es könnte daran Ligen ich werde gleich mal nachlesen.

    Danke
    by Ferdinand
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    Also bei dem STK500 sind die Taster auf GND gezogen wen ich sie drücke, habe auch nachgemessen (ging schneller als lesen )

    Danke
    by Ferdinand.
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

Ähnliche Themen

  1. Taster entprellen für TTL-BCD-Zähler
    Von tobi.robotz im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 26.11.2009, 21:28
  2. Probleme mit Taster entprellen
    Von Mr Bean im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 08.05.2007, 18:12
  3. Entprellen von Taster
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 10.07.2006, 11:15
  4. Taster Entprellen mit Bascom
    Von hardstyleroxx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.01.2005, 17:41
  5. Taster entprellen
    Von RCO im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 14.10.2004, 13:59

Berechtigungen

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

Solar Speicher und Akkus Tests