Prelung einer Taster

Gast #2860548
Lesenswert?
• ▲
▼
Hallo,
    Ich habe folgendes Programm geschrieben aber es macht nicht was ich 
von ihm erwarte könnten Sie mir bitte weiter helfen !!!

    Untersuchen des Tastenprellens.
    An Pin 0 von Port D wird ein mechanischer Taster zu Masse 
angeschlossen.
    An Port B schliessen wir über Vorwiderstände 4-8 LED's an, um die
    Anzahl Tastendrücke anzuzeigen. Achte darauf, dass nicht zu viel 
Strom
    aus dem AVR gezogen wird, also Widerstände genügend gross wählen.
    Das Prellverhalten des Tasters muss nun mit höherer Taktfrequenz 
schlimmer
    sein als mit niedriger.



#include <avr/io.h>

typedef unsigned char Byte;
typedef unsigned  int Word;

Byte  bitD0;
Byte  npress;


int main(void)
{
  DDRD = 0x00;
  DDRB = 0xff;
  PORTD= 0xff;


  bitD0 = 1;


    while(1)
    {
    if  (!( PIND & bitD0 ))
    {  if(bitD0==1)
        { npress++ ;
        bitD0 = 0;
        PORTB = 0x00;

      }
    }else
         {     bitD0 = 1; }




    }
}
danke
Claude
Moderator (Firma: Titel) Persönliche Seite #2860561
Lesenswert?
• ▲
▼
Feudjio schrieb:
> Das Prellverhalten des Tasters muss nun mit höherer Taktfrequenz
> schlimmer sein als mit niedriger.
Das stimmt nicht. Der Taster prellt immer gleich. Nur kommt der uC nicht 
ausreichend oft an der Abfrage vorbei....

@ Feudjio
Ich will den Quelltext nicht anschauen. Der ist so grauenvoll 
formatiert, da braucht man unnötig Zeit zum durchblicken...

> aber es macht nicht was ich von ihm erwarte
Was macht es und was erwartest du?
Gast #2860585
Lesenswert?
• ▲
▼
Ich will der Taster am PIN 0 von PORTD entprellen. Um das mit meinem uC 
2580 (mit STK600) zu machen, wollte ich dass wenn ich der Taster am PIN 
0 der PORTD dücke dass der uC es zählt und die LED am PORT B der uC 2580 
anschaltet.

aber wenn ich mein Programm laufen lässt ist immer die LED am PORTB an 
egal ob ich der TASTER am PIN 0 der PORTD drücke oder nicht. Un ich bin 
noch Anfänger in uC Programmierung.




#include <avr/io.h>

typedef unsigned char Byte;
typedef unsigned  int Word;

Byte  bitD0;      //  Bit 0 der PORT D
Byte  npress;     //  Zähler


int main(void)
{
  DDRD = 0x00;  //
  DDRB = 0xff;
  PORTD= 0xff;
  //PORTB = 0b11110110;

  bitD0 = 1;


    while(1)
    {
    if  (!( PIND & bitD0 ))  // Prüft ob Taster am PIN 0 gedrückt ist
    {  if(bitD0==1)          // Prüft der alte Zustand von PIN 0
        { npress++ ;         //  Zählt wenn es gedrückt wurde
        bitD0 = 0;         //  aktuelle Zustand speichern
        PORTB = 0x00;      //  Led am PORT D anmachen

      }
    }else                    //  Taster nicht gedrückt
         {     bitD0 = 1; }  // Taster nicht gedrückt aktueller Zustand 
speichern




    }
}

Danke
Claude

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.