hallo,
da ich erst vor kurzem mit c programmieren angefangen habe, hab ich gleich mal eine frage an euch.
Ich habe an portd.0 einen Taster und an portc.3 ein relais angeschlossen.
Ich möchte nun beim drücken des Tasters das relais einschalten und bei erneutem drücken wieder ausschalten.
hier der code
wenn ich das programm in AVR studio simuliere funktioniert es einwandfrei.Code:#include <avr/io.h> #include <avr/interrupt.h> typedef unsigned char Byte; //Anlegen eines eigenen 8 Bit-Datentyps typedef short int Word; //Anlegen eines eigenen 16j Bit-Datentyps #define FALSE (0!=0) #define TRUE (0==0) #define F_CPU 8000000 //CPU Frequenz #define Start (PIND & 1<<PIND0) //PIND.0 #define Plus (PIND & 1<<PIND1) //PIND.1 #define Minus (PIND & 1<<PIND2) //PIND.2 #define Relais_On (PORTC |= (1<<PORTC3)) //PORTC.3 ein #define Relais_Off (PORTC &=~ (1<<PORTC3)) //PORTC.3 aus Byte a; Byte b; Byte z; ISR(TIMER0_OVF_vect); ISR(TIMER0_OVF_vect) //Timer Interrupt Vector {a++;} void main(void) { SREG |= (1<<7); //Interrupts global freischalten TIMSK |= (1<<TOIE0); TIFR = 0; TCCR0 |= (1<<CS00) | (1<<CS01) | (!(1<<CS02)); //Timer Prescaler = 8 DDRD =0; //PORTD als Eingänge festlegen PORTD =255; //Pull/up Widerstände aktivieren DDRC |= (1<<PC3); //PORTC.3 = Ausgang for(;;) //Endlosschleife { if(Start) //wenn Taste Start { if(a>=10) //und timer 10x übergelaufen {z++;a=0; if(z>=2) {z=0;Relais_Off;} else {Relais_On;} } } else {a=0;} } }
aber wenn ich es auf dem atmega8 ausprobiere dann flackert das relais und bleit nur stabil in einem zustand wenn ich den taster gedrückt halte.
ich hoffe ihr könnt mir weiterhelfen
mfg franzl







Zitieren

Lesezeichen