- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Taster an Attiny45

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    Anzeige

    Powerstation Test
    im DDRx stellst du die 'richtung' des pins ein

    setzt (shiftest) du im DDRx an die stelle vom pin ne 1 hast du ihn als output deklariert, bei 0 (default) hast du ihn als input.

    @cat was kappierst du nicht?

  2. #12
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    dass ich mit DDRB = (1<<DDB1)|(1<<DDB3); led und taster als ausgang deklariere, der taster aber dann funktioniert. setze ich ihn mit DDRB=~(1<<DDB3); als eingang und schalte den pullup ein, klappt es nicht.

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    weil der taster am int0 hängt du du wahrscheinlich den int0-interrupt eingeschalten hast. sprich der interrupt wird wohl den pin, egal was im DDR steht, als input deklarieren sonst macht der int0 doch keinen sinn?

  4. #14
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    keine interrupts. hier der komplette code:
    Code:
    #include <avr/io.h> 
    #include <avr/iom8.h> 
    
    int main( void ) 
    { 
      DDRB   = (1<<DDB1)|(1<<DDB3);  // pin 1 & 3 als ausgang (!?)
      PORTB |= (1 << PB1);    //pullup
      PORTB |= (1 << PINB3); //pullup 
    
      while(1) 
      { 
    
        if( bit_is_clear(PINB, PB3)) 
             PORTB |= (1 << PB1); // led an 
        else 
             PORTB &= ~(1 << PB1); // led aus
      } 
    } 
    
    //EOF
    man kann zwar den status eines pins auch auslesen, wenn er als ausgang geschaltet ist, aber DDxn verhält sich irgendwie genau umgekehrt, als im datenblatt beschrieben.

    gruesse

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    Code:
    DDRB |= (1<<PB4) //output LED
    PORTB &= ~(1<<PB4) //set PB4 low, LED off
    
    DDRB &= (1<<PB1) //input switch
    PORTB != (1<<PB1) //pullup for switch
    
    while(1)
    {
       if (bit_is_clear(PINB, PB1)
          PORTB |= (1<<PB4); //turn LED on
       else
          PORTB &= ~(1<<PB4); //turn LED off
    }

  6. #16
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    ich will jetzt keinen streit mit dir, deshalb nur kurz:
    1. strichpunkte dazugemacht
    2. klammer geschlossen bei if()
    3. test: led 'glimmt' wegen pullup, taster hat keine wirkung

    dass du den code nicht getestet hast, liegt aufgrund der fehler nahe. woher nimmst du also die gewissheit, recht zu haben?

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    boah, wenn schon jemand copy&paste macht... für sowas hat man nen compiler :P

    1. hab nix da zum testen
    2. durch logisches denken

    versuch mal statt dem bit_is_clear () mein makro von oben

    Code:
    VALUEPB1 ((PINB & (1<<PB1)) > 0 ? (1):(0))
    irgendwo muss ja der fehler sein :P

  8. #18
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    soweit ich es jetzt (endlich) begreife, kann man die internen pull-ups nur verwenden, wenn der port als ausgang geschalten ist (a8 datasheet tabelle 20 seite 53). ansonsten ist ein externer pullup nötig.

    was soll eigentlich das hier bewirken?
    Zitat Zitat von blink
    PORTB != (1<<PB1) //pullup for switch
    damit vergleichst du die werte und verwirfst das ergebnis. erzähl den leuten halt bitte nicht so nen quark!

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    substituiere ! mit | tippfehler

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    24.10.2006
    Beiträge
    7
    Hallo,

    also ich könnte schwören, dass ich das auch schon ausprobiert habe den Eingang als Ausgang zu initialisieren. Aber es funktioniert jetzt zumindestens mit der Abrage des PB1.

    Taster nicht gedrückt -> Led an
    Taster gedrückt -> Led aus

    Komisch - verstehen tue ich das nicht, da ich einen exteren Pull Up Widerstand angeschlossen hatte, aber das Ergebnis zählt ja nur. Ich denke ich verzichte vorerst auf den Interrupt.

    Vielen Dank.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test