Forum: Mikrocontroller und Digitale Elektronik Prelung einer Taster


von Feudjio (Gast)


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

von Peter D. (peda)


Lesenswert?

Feudjio schrieb:
> Ich habe folgendes Programm geschrieben aber es macht nicht was ich
> von ihm erwarte

Beschreibe, was Du erwartest.
Beschreibe, was anders läuft.
Kommentiere das Programm (Beschreibung der Funktion der Codezeilen im 
Quelltext).

Nutze die Formatierung des Forums oder hänge das Programm an.

Peter

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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?

von Feudjio (Gast)


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

von Peter D. (peda)


Lesenswert?

Feudjio schrieb:
> aber wenn ich mein Programm laufen lässt ist immer die LED am PORTB an

Vielleicht sollte man sie zu Anfang erstmal aus machen.
Und nur Anmachen war doch nicht das Ziel, sondern den Zähler ausgeben.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.