Gast
#2532159
Hallo
ich habe einen Servomotor(hängt an PINB1), der per Tastendruck über
einen ATMega 8 in die beiden Extrempositionen gesteuert werden soll. Da
ich momentan nur einen Taster (hängt an PIND) habe will ich zwischen
1-mal drücken und 2-mal drücken unterscheiden.
Mein Programm sieht momentan so aus:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
int mode;
int schleife;
int schleife2;
int schleife3;
int main(void)
{
DDRD = 0x00;
DDRB = (1<<PB1);
PORTD = 0x00;
while(1)
{
//mode=0;
if (PIND & (1<<2))
{
_delay_ms(1);
}// end if
else
{
mode++;
_delay_ms(1500);
for(schleife=0;schleife<1000;schleife++)
{
if (PIND & (1<<2))
{
_delay_ms(3);
}
else
{
mode++;
_delay_ms(500);
}
}
}
if(mode==1)
{
for(schleife2=0;schleife2<1000;schleife2++)
{
PORTB |= (1<<PB1);
_delay_us( 2000 );
PORTB &= ~(1<<PB1);
_delay_ms(18);
}
}
if(mode==2)
{
for(schleife3=0;schleife3<1000;schleife3++)
{
PORTB |= (1<<PB1);
_delay_us( 1000);
PORTB &= ~(1<<PB1);
_delay_ms(18);
}
}
if(mode==0)
{
PORTB |= (1<<PB1);
_delay_us( 1500 );
PORTB &= ~(1<<PB1);
_delay_ms(18);
}
}
return 1;
}
Ich weiß mein Programm ist noch ziemlich einfach gestrickt, weil ich
erst vor Kurzem mit µC-Programmierung angefangen hat.
Aber trotzdem müsste es doch so eig funktionieren oder übersehe ich da
ein Fehler. Der Servo geht zwar in die Ausgangspostion, aber bei
Tastendruck zuckt er immer nur kurz.
Der Moduswechsel an sich funktioniert eigentlich, da ich ihn isoloert
mit Led-Blinken getestet habe.
Ich bin grad echt ratlos und würde mich über jeden Tipp sehr freuen :)