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
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
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.