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
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.
nimm einfach einen 100nf parallel zum taster. dann ersparst du dir die sache in der software
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.
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.