-         

Ergebnis 1 bis 5 von 5

Thema: Taster Abfrage und Relais ansteuern?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.08.2007
    Beiträge
    10

    Taster Abfrage und Relais ansteuern?

    Anzeige

    Hallo, hab seit neusten das RN-Control Board und hab auch schon ein paar sachen zum laufen bekommen.z.b das LCD. So nun zu meinem Problem.

    Ich will über den Port A einen Schalter bzw. Taster abfragen woraufhin PortC Pin 3 auf high schaltet und mein relais für eine Sirene schaltet.

    Hier einmal der Code mit dem ich es probiert habe , es aber nicht klappen will .Hoffe ihr könnt mir weiterhelfen.
    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    #ifndef F_CPU
    #define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */
    #endif
    #include <avr/delay.h>      /* definiert _delay_ms() ab avr-libc Version 1.2.0 */
    #include <util/delay.h>     /* in der aktuellen Version in util/ */ 
     
     
    /* Einfache Funktion zum Entprellen eines Tasters */
    inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
    {
        if ( ! (*port & (1 << pin)) )
        {
            /* Pin wurde auf Masse gezogen, 100ms warten   */
            _delay_ms(50);  // max. 262.1 ms / F_CPU in MHz
            _delay_ms(50); 
            if ( *port & (1 << pin) )
            {
                /* Anwender Zeit zum Loslassen des Tasters geben */
                _delay_ms(50);
                _delay_ms(50); 
                return 1;
            }
        }
        return 0;
    }
     
    int main(void)
    {
        DDRA &= ~( 1 << PA1 );                 /* PIN PA1 auf Eingang (Taster)            */
        PORTA |= ( 1 << PA1 );                 /* Pullup-Widerstand aktivieren            */
        
        if (debounce(&PINA, PA1))             /* Falls Taster an PIN PA1 gedrueckt..    */
            PORTC = PINC ^ ( 1 << PC3 );  /* . Port PC3 an-
                                       bzw. ausschalten */
        
    }

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Datenrichtung für Port C steht noch auf Eingang?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    02.08.2007
    Beiträge
    10
    mh hab das jetzt mal geändert, geit aber immer noch nicht

    Code:
    int main(void)
    {
    
    	DDRC = 0xff; 
        DDRA &= ~( 1 << PA1 );                 /* PIN PA1 auf Eingang (Taster)            */
        PORTA |= ( 1 << PA1 );                 /* Pullup-Widerstand aktivieren            */
       
        if (debounce(&PINA, PA1))             /* Falls Taster an PIN PA1 gedrueckt..    */
            PORTC = PINC ^ ( 1 << PC3 );  /* . Port PC3 an-
                                       bzw. ausschalten */
    								   
    	else 
    	PORTC = PINC ^ ( 0 << PC3 );
       
    }[/quote]

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    versuch das mal so:
    Code:
     if (debounce(&PINA, PA1))             /* Falls Taster an PIN PA1 gedrueckt..    */ 
            PORTC  ^= ( 1 << PC3 );  /* . Port PC3 an- 
                                       bzw. ausschalten */ 
                                
       else 
       PORTC  &=~ (1<< PC3 );
    Wobei XOR keinen Sinn ergibt, weil solange Du PA1 drückst flattert PC3 wie bekloppt, mach dann besser PORTC |=(1<<PC3)

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    02.08.2007
    Beiträge
    10
    super dankeschön!, habs jetzt hinbekommen

Berechtigungen

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