mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik entprallen eines Tasters


Autor: Mohi Mohi (Firma: Student) (mohi34)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jessica (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nimm einfach einen 100nf parallel zum taster. dann ersparst du dir die 
sache in der software

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.