entprallen eines Tasters

OP (Firma: Student) #638102
Lesenswert?
• ▲
▼
könnte mir jemand sagen, was ich hier Falsch mache:
bei der Simulation wird die Anweisung "" PORTD = PIND ^ (1 << PD7);"" 
nicht ausgeführt.

Eine Hacke in PC0 irgendwie reicht nicht..????

code:

// 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;
}



void Tastergedruckt(void)
{
DDRC &= ~ (1 << PC0); // als Taster
PORTC  = (1 << PC0);  // Pull Up
if(debounce(&PINC, PC0))
{
  PORTD = PIND ^ (1 << PD7);
}
}


Danke am Voraus
#638205
Lesenswert?
• ▲
▼
Mohi Mohi wrote:
> könnte mir jemand sagen, was ich hier Falsch mache:
> bei der Simulation wird die Anweisung "" PORTD = PIND ^ (1 << PD7);""
> nicht ausgeführt.

1) Woran merkst du, dass diese Anweisung nicht ausgeführt wird?
2) Es ist etwas ungewöhnlich, dass in ein und demselben Statement
   sowohl über PIN als auch über PORT auf einen Port zugegriffen
   wird.
   Wenn du den Zustand des Portpins 7 umdrehen willst, dann lautet
   das korrekterweise

   PORTD = PORTD ^ ( 1 << PD7 );

   Dazu solltest du allerdings in deinem Programm den PORTD als
   Ausgang konfigurieren

>
> Eine Hacke in PC0 irgendwie reicht nicht..????

so wie deine debounce Routine geschrieben ist: nein
Deine debounce Routine geht davon aus, dass die Taster
low aktiv sind. D.h. der Grundzustand ist: im Simulator
ist an PC0 ein Haken und wenn eine 'Taste gedrückt' werden
soll, muss der Haken weg und wieder gesetzt werden.
Die debounce Routine reagiert auf das Loslassen des Tasters.
#638285
Lesenswert?
• ▲
▼
jessica wrote:
> nimm einfach einen 100nf parallel zum taster. dann ersparst du dir die
> sache in der software

Ach komm. Diese 'debounce' Routine ist alles andere als
Raktentechnik.
Wer programmieren lernen will, kommt um ein gewisses Mass
an lernen nicht rum. Dazu gehört auch, zu lernen wie man
fremden Code analysiert und zu sehen wie andere Leute sowas
machen.

Der angegbene debounce ist eher in die Kategorie 'ziemlicher
Müll' einzuordnen, da mann bei einem realen Programm das nicht
so machen wird. Als Lernbeispiel ist er aber durchaus zu gebrauchen,
und sei es nur um zu lernen, wie man mit dem Debugger in eine
Funktion einsteigt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.