-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: AtMega32 - Delay wird bei Tasterdruck nicht richtig ausgelöst

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    27
    Beiträge
    108

    AtMega32 - Delay wird bei Tasterdruck nicht richtig ausgelöst

    Anzeige

    Hallo!

    Also folgendes, ich habe gerade einen Taster an meinen AtMega32 angeschlossen und wollte damit bisschen die herumexperimentieren. In weiterer Folge soll daraus (total unkreativ) ein Anstoßsensor für meinen Roboter realisiert werden.

    So, ich habe den Taster an PB0 angeschlossen und möchte jetzt einfach bei Tastendruck eine LED ausgehen lassen, diese dann eine Sekunde ausgeschaltet lassen und danach wieder einschalten. Das war das Ziel.

    Hier dazu mein Code:
    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define LEDRED PD6
    #define Bumper1 PB0
    
    #ifndef F_CPU
    #define F_CPU 8000000
    #endif
    
    
    int main(void)
    {
        //DDRB |= (0<<Bumper1);
        DDRD |= (1<<LEDRED) | (1<<PD7);
        
        //PORTB |= (0<<Bumper1);
        PORTD |= (1<<LEDRED);
        
            
        while(1)
        {
            if(PINB & (1<<PINB0)) //wenn Taster gedrückt
            {
                PORTD &= ~(1<<LEDRED);
                _delay_ms(1000); //warte 1 sek
            }
            else
            {
                PORTD |= (1<<LEDRED); 
            }                        
        }
    }
    Die LED geht auch brav an und wieder aus, sowie geplant, allerdings eben nur so lange, wie der Taster gedrückt ist.

    In der Theorie sollte das Programm doch eingentlich an dieser Stelle
    Code:
    if(PINB & (1<<PINB0)) //wenn Taster gedrückt
            {
                PORTD &= ~(1<<LEDRED);
                _delay_ms(1000); //warte 1 sek
            }
    für 1 Sek verharren und damit die LED ausgeschaltet lassen, bevor dann der Zyklus fortgesetzt wird, oder?
    Warum bleibt die LED nicht an?

    LG
    Geändert von ijjiij (23.07.2012 um 15:02 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von debegr92
    Registriert seit
    16.10.2011
    Alter
    25
    Beiträge
    104
    Blog-Einträge
    3
    Hallo ähh phuu naja egal...
    Also kann es den sein, dass dein ATmega gar nicht mit der Frequenz läuft, die du angegeben hast? Ist denn wirklich ein 8MHz Quarz neschlossen? Sind die Fuses des ATmegas auch alle so eingestellt, dass dieser mit 8MHz läuft? Was auch noch sein kann, dass F_CPU schon vor deinem Code definiert wurde, heißt deine redefinition wird nicht übernommen.

    Grüße
    Dennis
    Besucht doch auch meinen Blog über unser gemeinsames Hobby www.greguhn.de
    Roboter über das Smartphone steuern? Na klar! µBt Communication

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Du hast ja nach einer Sekunde den Taster immer noch gedrückt, damit ist die if Bedingung wahr und die Led bleibt weiter aus.
    Wenn du die Taste loslässt, kommt das else zum tragen und schaltet die Led wieder ein.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    27
    Beiträge
    108
    Hallo,

    Also der Quarz ist definitiv ein 8.0Mhz, andere Programme (z.B. LEDs immer 1 sek an, 1 sek auszuschalten) funktionieren auch ganz problemlos. Fuses passen also auch dafür, wie gesagt, alle anderen Programme mit _delay_ms(x) machen keinerlei probleme.

    @Hubert.G: Es macht leider keinen Unterschied wie lange ich den Taster gedrückt halte, auch wenn ich den Taster nur kurz "antippe" geht die LED nur für genau die Zeit an, die der Taster gedrückt ist. Unabhängig davon ob ich den Taster antippe oder für 10 sek halte, die LED bleibt exakt so lange an wie der taster gedrückt ist.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    Hallo,
    macht deine LED auch das was sie machen soll, weil du schreibst sie geht brav AN und auch wieder AUS. Laut deinem Programm müsste sie ja von anfang an AN sein?

    Baue doch mal ein delay zum prüfen in den else-Teil ein, funktioniert dieses delay?

    mfg
    Geändert von HeXPloreR (23.07.2012 um 19:26 Uhr)
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    27
    Beiträge
    108
    Sry da habe ich mich in meiner letzten Antwort verschrieben, bin ich vor lauter herumprobieren übers Wochenende durcheinander gekommen.

    Also die LED ist beim Programmstart AN und soll mit Tastendruck für exakt eine Sek AUSgehen.
    Unabhängig davon wie lange ich den Taster gedrückt halte, also sowohl bei antippen als auch bei halten, ist die LED immer nur so lange auus wie der Taster gehalten wird.

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Hab das gerade noch mal getestet, aber eigentlich ganz klar.
    Du drückst die Taste, wird erkannt, LED geht aus, delay läuft. Jetzt kommt es darauf an wann du die Taste auslässt.
    Lässt du sie unmittelbar vor dem Ablauf des delay los, hast du keine Verzögerung mehr.
    Es ist also Glückssache wie lange die LED noch aus bleibt.
    So wie du es willst, müsste das delay nach dem loslassen der Taste beginnen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    27
    Beiträge
    108
    @Hubert.G: Dann müsste aber auch bei "antippen" des Tasters die LED für mindestens eine Sekunde aus bleiben, passiert aber auch nicht sondern die LED blinkt nur ganz kurz auf.

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Bei mir tut es das schon.
    Hast du auf deiner Taste auch einen PullDown oder ist der Eingang offen wenn keine Taste gedrückt?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    27
    Beiträge
    108
    Habe hier keinen PullDown, der Taster ist nur mit Krokodilklemmen an den Port und GND geklemmt.

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Interrupt wird nicht ausgelöst
    Von Michael_am32 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 02.08.2010, 01:37
  2. ICP auf ATMEGA8 wird nicht ausgelöst
    Von =JTR= im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 29.04.2010, 11:36
  3. Interrupt wird nicht ausgelöst
    Von einballimwas im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 01.09.2009, 15:29
  4. Interrupt wird nicht ausgelöst
    Von PcVirus im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 10.04.2008, 16:14
  5. [Frage?] die Delay TIme nicht stimmt mit <util/delay.h>
    Von PaMan im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 03.08.2007, 16:57

Berechtigungen

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