-         

Ergebnis 1 bis 9 von 9

Thema: Ich bruache hilfe beim Taster auswerten.

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.09.2009
    Ort
    Geilenkirchen
    Beiträge
    419

    Ich bruache hilfe beim Taster auswerten.

    Anzeige

    Also, ich möcghte einen Taster auswerten, der an einer seite am atmegapin und internem pullup ist und am anderen an masse.
    Aber irgendwie funktioniert das nicht.
    Die zeit verändert sich nach frücken des tasters nicht.
    Code:
    #include <avr/io.h>  
    #define F_CPU 1000000
    #include <util/delay.h> 
    #include <stdint.h>
    
    int main(void)
    {
     int time = 14;
     int second = 0;
     int time_e = 0;
     int time_z = 0;
     
    
    
    DDRB = 255;
    DDRA = 225;
    DDRD = 0;
    PORTD = 255;
    while(1) 
    {
    
    
    
    
    if (PINB == (PINB & 00010000))// hier ist das problem
    {
    time--;
    }
    
    if (PINB == (PINB & 00100000))// hier ist das problem
    {
    time++;
    }
    
    time_z =(time/10);
    time_e = time - (time_z*10);
    
    
     if (time_z == 6)
     {
    
     PORTA = 0b00111111;
     
     }
      if (time_z == 5)
     {
     PORTA = 0b00011111;
     }
       if (time_z == 4)
     {
     PORTA = 0b00001111;
     }
        if (time_z == 3)
     {
     PORTA = 0b00000111;
     }
         if (time_z == 2)
     {
     PORTA = 0b00000011;
     }
          if (time_z == 1)
     {
     PORTA = 0b00000001;
     }
          if (time_z == 0)
     {
     PORTA = 0b00000000;
     }
      if (time_e==9)
    {
     PORTA = PORTA + 0b01000000;
     PORTB = 0b11111111;
     }
     else if (time_e==8)
    {
     PORTB = 0b11111111;
     }
    else if (time_e==7)
    {
     PORTB = 0b01111111;
     }
     else if (time_e==6)
    {
     PORTB = 0b00111111;
     }
     else if (time_e==5)
    {
     PORTB = 0b00011111;
     }
     else if (time_e==4)
    {
     PORTB = 0b00001111;
     }
      else if (time_e==3)
    {
     PORTB = 0b00000111;
     }
      else if (time_e==2)
    {
     PORTB = 0b00000011;
     }
       else if (time_e==1)
    {
     PORTB = 0b00000001;
     }
        else if (time_e==0)
    {
     PORTB = 0b00000000;
    }
    
     _delay_ms(1000);
     second ++;
     if (second == 60)
     {
     time --;
     second = 0;
     }
    
     
    }
    }
    Das ziel des ganzen ist eine Eieruhr.
    Ich habe links 9 led´s fpür die minuten und rechts für 10 minuten.
    Dann muss man addieren wieviel zeit noch bleibt.
    also z.b. links 4 und rechts 2 wären 24 minuten.
    Man soll die Zeit nun mit den tastern einstellen können.
    Aber das geht halt aus irgendwelchen Gründen nicht.
    Ich hoffe, dass ihr mir weiterhelfen könnt.

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Code:
    if (PINB == (PINB & 00010000))// hier ist das problem
    Zwei Dinge, über die du nachdenken solltest:

    1) "00010000" ist keine binäre Konstante, sondern eine oktale.

    2) Und wenn es eine binäre wäre, würde der Ausdruck prüfen, ob alle Bits Null sind, bis auf PB4, dessen Zustand wäre egal. Ich denke nicht, dass das das ist, was du willst.
    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    0b fehlt noch davor würd ich sagen
    (PINB & 0b00010000) !==0
    bin nicht ganz fit in c

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Du hast auch Port A und B auf Ausgang gestellt und Port D auf Eingang mit PullUp.
    Mit Port D machst du aber nichts.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.09.2009
    Ort
    Geilenkirchen
    Beiträge
    419
    Danke euch 3 die taster funktionieren jetzt.
    Ich habe beide zu port D gemcht.
    Und jertzt habe ichd aran gedacht, dass alle oins mit pullup wiederstand spannung haben.

    Jetzt habe ich noch 2 probleme:
    1. wie kann ich eine 2. schleife extra für die taster machen? die dann parrallel zu der anderen läuft?
    Also, damit man nicht immer 1 sekunde den t aster drücken muss bis es aktzeptiert wird.
    2.
    die led´s an porta pin 2,3,4 und 5 leuhten viel schwächer so, als wenn der atmega einen wiederstand an den pin gemcht hätte.
    Und es ist derfinitiv kein hardware fehle rich ahbe 1k ohm wiederstände benutzt so wie an allen led pins.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Da wirst du dich mit den Timer auseinander setzen müssen.
    Einen Takt mit 1/10sec machen und daraus alles ableiten.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.09.2009
    Ort
    Geilenkirchen
    Beiträge
    419
    Ich habe ne viel leichtere Lösung gefunden.


    _delay_ms(200); /5 mal weniger warten
    second ++;
    if (second == 300) / 5 mal öfters zählen bis zu einer sekunde.
    {
    time --;
    second = 0;

    Timer und interrupts werde ich meiden, da verstehe ich überhaupt nichts.
    Jetzt bleibt nur noch das problem mit dfen led´s, wenn es keine lösung durch das programm gibt muss ich einfach die wiederstände geghen draht austauchen.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Wie sind denn die LED`s angeschlossen? Die sollten mit den Widerstand
    an + xyz Volt und mit den Ausgängen dann mit GND geschaltet werden.
    Die Ausgänge können nur bei LO genügend Strom liefern. 1 k R`s
    sind auch etwas sehr hochohmig, da kommt bei 12 V Versorgung schon
    recht wenig bei den LED`s an....Außer Du hast LED`s die schon bei
    ~ 2 mAh gut leuchten, die gibt es auch, sind aber teurer. Dafür muß
    der µC dann aber weniger Arbeiten.

    Gruß Richard

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.09.2009
    Ort
    Geilenkirchen
    Beiträge
    419
    einfach amtega ausgang---1kohm wiederstand---led---gnd.
    Ja meine brauchen nur 2 ma aber 7 cent, da sgeht doch.

Berechtigungen

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