Cybrix
22.06.2005, 09:40
Moin
Ich hab ein programm geschrieben wo man eine Grad zahl eingibt das auf ein Display angezeigt wird und dannach ein Schrittmotor fahren soll!
Jetzt gibt mir mein Programm aber immer eine unterschielichen Takt raus und ich weiß nicht wo der fehler steckt, ist mein ertses größeres Programm! Es wird ein ATmega16 und ein 4x16 Zeilen display verwendet.
void men_auto (void){ // Menü für denn Autobetrieb
int n=0;
char grad;
char min;
char sec;
wertg=0;
wertm=0;
werts=0;
lcd_clrscr();
lcd_puts(" Autobetrieb ");
lcd_gotoxy(0,2);
lcd_puts("Grad: Min: Sec:");
lcd_gotoxy(1,3);
_delay_ms(50);
while (n<3) // Eingabe der Grad zahl
{
grad=kp_taste();
_delay_ms(50);
if ((grad >='0') && (grad <='9'))
{
n++;
switch (n)
{
case 1 : wertg = grad * 100; break;
case 2 : wertg += grad * 10; break;
case 3 : wertg += grad; break;
}
lcd_putc(grad);
}
else
{
switch (grad)
{
case 'c': n=0; lcd_gotoxy(1,3); lcd_puts(" ");lcd_gotoxy(1,3); break;
case 'z': men_haupt();
default: men_fehler(); men_auto(); break;
}
}
}
lcd_gotoxy(7,3);
while (n<5) //Eingabe der min zahl
{
min=kp_taste();
_delay_ms(50);
if ((min >='0') && (min <='9'))
{
n++;
switch (n)
{
case 4 : wertm = min * 10; break;
case 5 : wertm += min ; break;
}
lcd_putc(min);
}
else
{
switch (min)
{
case 'c': n=3; lcd_gotoxy(7,3); lcd_puts(" ");lcd_gotoxy(7,3); break;
case 'z': men_haupt();
default: men_fehler(); men_auto(); break;
}
}
}
lcd_gotoxy(12,3);
while (n<7) //Eingabe der sec zahl
{
sec=kp_taste();
_delay_ms(50);
if ((sec >='0') && (sec <='9'))
{
n++;
switch (n)
{
case 4 : werts = sec * 10; break;
case 5 : werts += sec ; break;
}
lcd_putc(sec);
}
else
{
switch (sec)
{
case 'c': n=5; lcd_gotoxy(12,3); lcd_puts(" ");lcd_gotoxy(12,3); break;
case 'z': men_haupt();
default: men_fehler(); men_auto(); break;
}
}
}
_delay_ms(256);
_delay_ms(256);
_delay_ms(256);
motor_auto();
men_wieder();
}
void motor_init (void){
DDRC = 0xff; //PortC als Ausgang
PORTC = 0x00; //PortC auf low
}
void motor_auto (void){ //Immoment nur zum test verwendet
int g=0;
int m=0;
int s=0;
int n=0;
lcd_clrscr();
lcd_puts(" Autobetrieb ");
lcd_gotoxy(0,2);
lcd_puts(" Motor faehrt ");
g=wertg;
m=wertm/1.8;
s=werts/1.8;
while (n<=g){
motor_takt();
n++;
}
}
void motor_takt (void){
PORTC=0x01;
_delay_ms(1);
PORTC=0x00;
_delay_ms(1);
}
Danke schonmal im vorraus
Cybrix
Ich hab ein programm geschrieben wo man eine Grad zahl eingibt das auf ein Display angezeigt wird und dannach ein Schrittmotor fahren soll!
Jetzt gibt mir mein Programm aber immer eine unterschielichen Takt raus und ich weiß nicht wo der fehler steckt, ist mein ertses größeres Programm! Es wird ein ATmega16 und ein 4x16 Zeilen display verwendet.
void men_auto (void){ // Menü für denn Autobetrieb
int n=0;
char grad;
char min;
char sec;
wertg=0;
wertm=0;
werts=0;
lcd_clrscr();
lcd_puts(" Autobetrieb ");
lcd_gotoxy(0,2);
lcd_puts("Grad: Min: Sec:");
lcd_gotoxy(1,3);
_delay_ms(50);
while (n<3) // Eingabe der Grad zahl
{
grad=kp_taste();
_delay_ms(50);
if ((grad >='0') && (grad <='9'))
{
n++;
switch (n)
{
case 1 : wertg = grad * 100; break;
case 2 : wertg += grad * 10; break;
case 3 : wertg += grad; break;
}
lcd_putc(grad);
}
else
{
switch (grad)
{
case 'c': n=0; lcd_gotoxy(1,3); lcd_puts(" ");lcd_gotoxy(1,3); break;
case 'z': men_haupt();
default: men_fehler(); men_auto(); break;
}
}
}
lcd_gotoxy(7,3);
while (n<5) //Eingabe der min zahl
{
min=kp_taste();
_delay_ms(50);
if ((min >='0') && (min <='9'))
{
n++;
switch (n)
{
case 4 : wertm = min * 10; break;
case 5 : wertm += min ; break;
}
lcd_putc(min);
}
else
{
switch (min)
{
case 'c': n=3; lcd_gotoxy(7,3); lcd_puts(" ");lcd_gotoxy(7,3); break;
case 'z': men_haupt();
default: men_fehler(); men_auto(); break;
}
}
}
lcd_gotoxy(12,3);
while (n<7) //Eingabe der sec zahl
{
sec=kp_taste();
_delay_ms(50);
if ((sec >='0') && (sec <='9'))
{
n++;
switch (n)
{
case 4 : werts = sec * 10; break;
case 5 : werts += sec ; break;
}
lcd_putc(sec);
}
else
{
switch (sec)
{
case 'c': n=5; lcd_gotoxy(12,3); lcd_puts(" ");lcd_gotoxy(12,3); break;
case 'z': men_haupt();
default: men_fehler(); men_auto(); break;
}
}
}
_delay_ms(256);
_delay_ms(256);
_delay_ms(256);
motor_auto();
men_wieder();
}
void motor_init (void){
DDRC = 0xff; //PortC als Ausgang
PORTC = 0x00; //PortC auf low
}
void motor_auto (void){ //Immoment nur zum test verwendet
int g=0;
int m=0;
int s=0;
int n=0;
lcd_clrscr();
lcd_puts(" Autobetrieb ");
lcd_gotoxy(0,2);
lcd_puts(" Motor faehrt ");
g=wertg;
m=wertm/1.8;
s=werts/1.8;
while (n<=g){
motor_takt();
n++;
}
}
void motor_takt (void){
PORTC=0x01;
_delay_ms(1);
PORTC=0x00;
_delay_ms(1);
}
Danke schonmal im vorraus
Cybrix