Hallo achim S.
Anbei mal ganz auf die Schnelle ein Stückchen Code (aus dem AVR-GCC Tutorial rauskopiert - S/17 -
ist NICHT (!!) vollständig!!), aber damit kannste schon was anfangen, wenn Du die korrekten Header-Dateien mit includest (der Compiler meckert schon, wenn was fehlt und auch was fehlt) -
und das Programm ist für den ATtiny!!!! => muss auch auf den ATtiny!!!
#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;
}
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.. */
PORTB = PINB ^ ( 1 << PB2 ); /* ..LED an Port PB2 an bzw. ausschalten */
...
}
das heißt - um das Programm testen zu können muß natürlich an PB0 ein Taster und an PB2 eine LED
Egon