- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Probleme mit Tasterschaltung

  1. #1
    Gesperrt Öfters hier
    Registriert seit
    21.05.2008
    Beiträge
    25

    Probleme mit Tasterschaltung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Moin,

    ich bin an einer einfachen 2 Tasterschaltung zugange mein erstes AVR projekt, leider will das Programm noch nicht ganz
    ich bekomme das mit den Eingängen nicht ganz hin. Die Leds habe ich vorher mit einem einfachen Led Testprogramm überprüft.

    Die schalter senden ein HIGH level Signal dazu habe ich 10KOhm widerstände verwendet

    Code:
    #define F_CPU 10000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    void PowerOn(){
    /**********Start Powerleds*******************/
      DDRB |= 1<<PB0;      /* set PB0 to output */
      DDRB |= 1<<PB1;      /* set PB1 to output */
      PORTB |= (1 << PB0); /* LED0 on           */
      PORTB |= (1 << PB1); /* LED1 on           */
    /********************************************/ 
    }
    
    
    void setPins(){
    /**************Input*************************/
      DDRB &= ~(1 << PB2); /* set PB2 to input*/  
      PORTB |= (1 << PB2);
      DDRB &= ~(1 << PB3); /* set PB3 to input*/
      PORTB |= (1 << PB5);
    /********************************************/
      
    /**************Ouput*************************/  
      DDRD |= 1<<PD6;      /* set PB6 to output */
      DDRD |= 1<<PD7;      /* set PB7 to output */
      PORTD &= ~(1<<PD6);  /* PD6  off          */                     
      PORTD &= ~(1<<PD7);  /* PD7  off          */
    /********************************************/
    }
    
    
    void eventhandler(){
    /**********Read Input PB2 and PB3*************/ 
      if( !(PINB & (1 << PB2)) ) {
        PORTD |= 1<<PD6;               /* LED on */
      }else {
        PORTD &= ~(1<<PD6);           /* LED off */
      }
      if(!(PINB & (1 << PB3)) ){
        PORTD |= 1<<PD7;               /* LED on */
      }else{
        PORTD &= ~(1<<PD7);           /* LED off */
      }
    }
    
    
    int main(void) {
      setPins();
      PowerOn();
      while(1) {
    //     eventhandler();
      }
      return 0;
    }
    Geändert von Tuxist (02.05.2012 um 14:51 Uhr)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    Und wenn der Taster nicht gedrückt ist, auf welchem Potential liegen die Eingänge dann?

    Es ist immer wichtig, die Eingänge auf definiertem Potential zu haben. Wenn der Taster gegen High schaltet, muss der Eingang sonst auf Low gezogen werden.

    雅思特史特芬
    开发及研究

  3. #3
    Gesperrt Öfters hier
    Registriert seit
    21.05.2008
    Beiträge
    25
    Die Taster sind direkt 5 VCC angeschlossen und an z.B. PB2 angeschlossen und an einem 10KOhm widerstand welcher an Masse angeschlossen ist.
    Klicke auf die Grafik für eine größere Ansicht

Name:	pendelschaltung.png
Hits:	10
Größe:	15,3 KB
ID:	22277
    Geändert von Tuxist (02.05.2012 um 14:30 Uhr)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    Kannst du das Verhalten kurz beschreiben. Sind die LEDs immer aus wenn du den Taster gedrückt hältst? Sind die Taster hardwareseitig entprellt?

    雅思特史特芬
    开发及研究

  5. #5
    Gesperrt Öfters hier
    Registriert seit
    21.05.2008
    Beiträge
    25
    Die Taster sind nicht entprellt das wollte ich später machen. Wenn ich die Bedingung auf "if((PINB & (1 << PB2)) )" setzte leuchten sie immer. Auf die Taster folgt keine Reaktion.

  6. #6
    Gesperrt Öfters hier
    Registriert seit
    21.05.2008
    Beiträge
    25
    Die Testplatine
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMAG0153.jpg
Hits:	13
Größe:	44,4 KB
ID:	22278

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Du aktivierst die internen Pull-Ups und hast externe Pull-Downs.
    Welchen Pegel soll das denn dann ergeben bei nicht gedrückter Taste?
    MfG
    Stefan

  8. #8
    Gesperrt Öfters hier
    Registriert seit
    21.05.2008
    Beiträge
    25
    habe ich wieder rausgenommen: PORTB |= (1 << PB2);wollte sehen ob vllt irgendwas mit den Widerständen nicht passt, habe ich aber gerade gerade nach gemessen sind in Ordnung.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    Wäre in dem Fall

    DDRB &= ~(1 << PB3); /* set PB3 to input*/ PORTB |= (1 << PB5);

    aber sowieso egal.

    Hast du den ISP Adapter immer angesteckt?
    Würde ich mal ohne testen. Ansonsten mal den Pegel an den Pins messen.

    雅思特史特芬
    开发及研究

  10. #10
    Gesperrt Öfters hier
    Registriert seit
    21.05.2008
    Beiträge
    25
    Habe den ISP Adapter abgesteckt leider ohne erfolg. Habe den Code nochmal über arbeitet und bereinigt.
    Code:
    #define F_CPU 10000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    void PowerOn(){
    /**********Start Powerleds*******************/
      DDRB |= 1<<PB0;      /* set PB0 to output */
      DDRB |= 1<<PB1;      /* set PB1 to output */
      PORTB |= (1 << PB0); /* LED0 on           */
      PORTB |= (1 << PB1); /* LED1 on           */
    /********************************************/ 
    }
    
    
    void setPins(){
    /**************Input*************************/
      DDRB &= ~(1 << PB2); /* set PB2 to input*/  
      DDRB &= ~(1 << PB3); /* set PB3 to input*/
    /********************************************/
      
    /**************Ouput*************************/  
      DDRD |= 1<<PD6;      /* set PB6 to output */
      DDRD |= 1<<PD7;      /* set PB7 to output */
      PORTD &= ~(1<<PD6);  /* PD6  off          */                     
      PORTD &= ~(1<<PD7);  /* PD7  off          */
    /********************************************/
    }
    
    
    void eventhandler(){
    /**********Read Input PB2 and PB3*************/ 
      if(!(PINB & (1 << PB2)) ) {
        PORTD |= 1<<PD6;               /* LED on */
      }else {
        PORTD &= ~(1<<PD6);           /* LED off */
      }
      if(!(PINB & (1 << PB3)) ){
        PORTD |= 1<<PD7;               /* LED on */
      }else{
        PORTD &= ~(1<<PD7);           /* LED off */
      }
    }
    
    
    int main(void) {
      setPins();
      PowerOn();
      while(1) {
        eventhandler();
      }
      return 0;
    }

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. pwm Probleme
    Von fatjoe im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 01.05.2007, 11:35
  2. Probleme mit DSL
    Von Panzer im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 08.07.2006, 15:02
  3. I2C Probleme
    Von tristate im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 27.10.2005, 23:17
  4. Probleme mit CAN
    Von ba4_philipp im Forum Elektronik
    Antworten: 14
    Letzter Beitrag: 25.10.2005, 23:05
  5. Probleme mit den AVR´s
    Von mcmonkey im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 23.02.2005, 19:21

Berechtigungen

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

Labornetzteil AliExpress