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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren