-         

Ergebnis 1 bis 4 von 4

Thema: Taster Stromstoßschalter

  1. #1

    Taster Stromstoßschalter

    Anzeige

    Hallo Forum

    Möchte mit einem ATmega32 einen Stromstoßschalter realisieren, d. h.,
    wenn ich den Taster drücke sollen alle LEDs von PORTC leuchten. Bei
    nochmaltigen drücken des Tasters sollen alle LEDs wieder ausgehen.

    Verwende einen externen PullDown für die Taster.

    Habe schon einige Programme probert, jedoch ohne Erfolg.
    Vermutlich handelt es sich um einen Denkfehler.

    Hier mein derzeitiger Stand:
    Code:
    #include <avr/io.h>
    #define F_CPU 8000000UL
    #include <util/delay.h>
    #include <stdlib.h>
    #include <avr/interrupt.h>
    
    
    
    int main(void)
    {
        DDRC = 0xFF;
        PORTC =0xFF;
     
        DDRD =0x00;
        //PORTD =0xFF;  // PullUp aktivieren!!
    
        while(1){
         
            if(PIND & (1<<PD0) && PORTC == 0xFF)  
            {           
            PORTC = 0x00;
            }          
            if(PIND & (1<<PD0) && PORTC == 0x00)  
            {           
            PORTC = 0xFF;
            }  
        }   
    }
    Danke für eure Hilfe

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554

    Re: Taster Stromstoßschalter

    Hi ChristianP.,

    willkommen im Forum.
    Zitat Zitat von ChristianP.
    ... Vermutlich handelt es sich um einen Denkfehler ...
    Das liegt doch mehr an der Syntax, oder nicht?

    Bin ziemlich in Eile. Auf die Schnelle, aber nicht getestet:

    Code:
    #include <avr/io.h> 
    #define F_CPU 8000000UL 
    #include <util/delay.h> 
    #include <stdlib.h> 
    #include <avr/interrupt.h> 
    
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    // - - - Vorschlag - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     #define IsBitSet(ADDR,BIT)     (((ADDR)&(1<<BIT))?1:0) // Fragt Bit = 1?
                                      
     #define TASTER     0           // Taster auf PD0
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    int main(void) 
    { 
        DDRC = 0xFF; 
        PORTC =0xFF; 
      
        DDRD =0x00; 
        //PORTD =0xFF;  // PullUp aktivieren!! 
    
        while(1){ 
    //        if(PIND & (1<<PD0) && PORTC == 0xFF)  
                    // da sollte man entweder nicht mit Klammern sparen oder
                    // sich über die Prioritäten/Reihenfolgen der Operatoren
                    // bei der Abarbeitung im Klaren sein, daher :
          if (( IsBitSet ( PIND, TASTER )) && (IsBitSet (PINC, 1))) // Abfrage
            {            
            PORTC = 0x00; 
            }          
    //        if(PIND & (1<<PD0) && PORTC == 0x00)  
           else             // Wenn nicht gedrückt, dann ist er lose *ggg*
            {            
            PORTC = 0xFF; 
            }  
        }    
    }
    Ciao sagt der JoeamBerg

  3. #3
    Danke für die schnelle Antwort.
    Gibt es vielleich eine etwas einfachere Alternative? Habe schon alle Foren durchforstet, aber nicht fündig geworden.

    Danke für die Beiträge

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Du kannst einfach PORTC bei jedem Tastendruck invertieren:

    Code:
    #include <avr/io.h> 
    #define F_CPU 8000000UL 
    #include <util/delay.h> 
    #include <stdlib.h>            // braucht du eigentlich nicht
    #include <avr/interrupt.h> // die auch nicht
    
    int main(void) 
    { 
        DDRC = 0xFF; 
        PORTC =0xFF; 
      
        DDRD =0x00; 
        //PORTD =0xFF;  // PullUp aktivieren!! 
    
        while(1){ 
          
            if(PIND & (1<<PD0))  
            {
                 PORTC ~= PORTC;
                 _delay_ms(150); // entprellen     
            }  
        }    
    }
    Ist nicht getestet, sollte aber funktionieren.

    mfg
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

Berechtigungen

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