Hallo Leute, ich bin Anfänger und arbeite gerade das GCC-Tutorial durch. Ich hab mir selbst ein kleines Board zusammengelötet und hab aufgrund vieler dummer Fehler den ganzen Tag gebraucht um die Taster zum laufen zu kriegen. Ich hab aufgrund mangelnder C-Kenntnisse erstmal die Entprellung aus dem Tutorial so übernommen wie es da steht und versucht es zu verstehen, das muss erstmal reichen so. Später werde ich mich selbst mal daran probieren. Nun...Die Taster funktionen und togglen dann jeweils eine LED. Ich zitiere nochmal den Code aus dem Tutorial: ------------------------------------------------------------------------ --- #include <avr/io.h> #include <inttypes.h> #ifndef F_CPU #warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert" #define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */ #endif #include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */ /* 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; } ------------------------------------------------------------------------ --- So...Im Turorial steht weiter unten auch, dass der Nachteil dieser Variante eine ca. 200ms Verzögerung ist. Man merkt das beim Tasten auch ganz deutlich. Nun meine Frage, woher weiß ich die Verzögerungsdauer ? Vielleicht stell ich mich auch blos wieder doof an. Die ergibt sich ja aus dem Takt und dem Delay-Wert nicht wahr ?! Vielen Dank im Voraus. Gruß
> Nun meine Frage, woher weiß ich die Verzögerungsdauer ? > _delay_ms(50); // max. 262.1 ms / F_CPU in MHz > _delay_ms(50); > _delay_ms(50); > _delay_ms(50); Summe: 200 ms Du stellst dich übrigens nicht dumm an sondern machst das genau richtig. Tutorial durcharbeiten, ausprobieren und nachdenken, sieht doch alles sehr gut aus :) Gruß Axel
Vielen Dank für die schnelle Antwort.^^ Warum wurde nicht die 2x _delay_ms(100) geschrieben? Ich nehme mal an, weil delay einen bestimmten Wertebereich hat oder? Noch eine Frage: Wie kommt die 262.1 ms zustande ? Gruß Benjamin
Weil 262,1 ms 3,8 Mhz ergeben und 4 Mhz ist die maximale Taktfrequenz des ATMEGA8 Ich weiss sogar was :) Gruß
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.