Hi!

Kann es sein, dass ein Fehler im http://www.mikrocontroller.net/artic...R-GCC-Tutorial ist ?

Im Abschnitt 9.5.2.2 (Tasten-)Entprellung

Code:
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */
#endif
#include <avr/delay.h>      /* definiert _delay_ms() ab avr-libc Version 1.2.0 */

/* 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(100);
                if ( ! (*port & (1 << pin)) )
                {
                        /* Anwender Zeit zum Loslassen des Tasters geben */
                        _delay_ms(100);
                        return 1;
                }
        }
        return 0;
}

int main(void)
{
        DDRB &= ~( 1 << PB0 );                 /* PIN PB0 auf Eingang (Taster)            */
        PORTB |= ( 1 << PB0 );                 /* Pullup-Widerstand aktivieren            */
        ...
        if (debounce(&PINB, PB0))             /* Falls Taster an PIN PB0 gedrueckt..    */
                PORTD = PIND ^ ( 1 << PD7 );  /* ..LED an Port PD7 an-
                                   bzw. ausschalten */
        ...
}
Hier wird ein delay mit 100ms angegeben. Aber 262.14ms/ 3.6864Mhz ergeben 71,1ms. Oder habe ich das nicht richtig verstanden ?