nee,wieso denn ?
Die ganze Werte von 0 bis 5 werden durchläuft, oder habe ich gerad
was übersehen?
Druckbare Version
nee,wieso denn ?
Die ganze Werte von 0 bis 5 werden durchläuft, oder habe ich gerad
was übersehen?
Hi,
ich glaube ihr redet gerade schwer aneinander vorbei.
Alki scheint aus der C++-Welt zu kommen und da gibt es offensichtlich keine for schleife mehr.
@ALKI in der for-Schleife in C wird i=0 nur beim ersten betreten ausgeführt, danach werden nur noch der zwiete und dritte Befehl in der Klammer ausgefürt. Also i++ und Kontrolle ob i<6.
Also die for schleife macht nichts anderes als dein
Mit dem Vorteil das wenn die Schleife mehrmals aufgerufen werden muss der Parameter i immer bei 0 beginnt.Code:while(i<6){
//irgendein Befehl
i++;
}
Hallo
es werden die Werte von 0 bis 5 durchlaufen. Ist ja eine normale For-Schleife. (hab auch eigentlich keinen Fehler in der For-Schleife gefunden).
Was ich aber nicht verstehe ist deine Abfrage mit dem Parameter direction. So wie das Programm jetzt ist rufst du ja irgendwann diese Funktion auf. z.B. rotate(200); Dann überprüft das Programm ob der Parameter <> 0 ist. Was soll dann überhaupt der Parameter direction?
Wenn Direction<>0 ist führt der einmal die 6 Schritte aus und das wars. Müssten die nicht eigentlich ständig ausgeführt werden, damit sich der Motor dauerhaft dreht?
@zumgwadrad: ahh, thx!!!!! gut zu wissen!
@RIFMAN: das selbe wie robojunior habe ich aber auch schon gedacht, oder hast du vor der ganzen funktion noch sowas wie ne while(true o.Ä.) schleife?
willst du den motor einfach dauernd drehen lassen, oder um ne bestimmte anzahl schritte, die du voher eingegeben hast?
Ich danke euch!
das ist aber nicht das komplette Programm .Ich werde es posten,wenn ich zu Hause bin.
Also das ist das Programm:
wie ihr sieht das ganze will ich mit Tastensteuerung machen.Code:#define F_CPU 8000000
#include <avr/io.h>
#include <stdio.h>
#include <stdbool.h>
#include<util/delay.h>
#define T1 0x04
#define T2 0x08
#define T3 0x10
uint8_t direction;
uint8_t step[8] = {0xEE, 0xBC, 0xE8, 0xBA, 0xEE, 0xBC, 0xE8, 0xBA};//Halbschritt Steuerung
uint8_t rev_step[8] = {0xBE, 0xEA, 0xB8, 0xEC, 0xBE, 0xEA, 0xB8, 0xBC};//Halbschritt Steuerung
//***********************************************
void rotate(direction)
{
int i;
if(direction)
{
PORTD &=~(0x20);
PORTD &=~(0x40);
PORTD |= 0x80 ;
for(i=0;i<8;i++)
{
_delay_ms(80);
PORTA = step[i];
};
}
else
{
PORTD &=~(0x80);
PORTD &=~(0x40);
PORTD |= 0x20;
for(i=0;i<8;i++)
{
_delay_ms(80);
PORTA = rev_step[i];
};
}
}
//************************************************
int main()
{
uint8_t start;
uint8_t release1;
uint8_t release2;
uint8_t release3;
release1 = 0x01;
release2 = 0x01;
release3 = 0x01;
direction = true;
start = false;
DDRA |= 0xFE;//Port A pin 1-7 als Ausgang setzen
PORTA = 0x00;//pull up's auf low setzen
DDRD &= ~(0x1c);//Port D; PIN 2, 3 und 4 als Eingang setzen
//PORTD &= ~(0x1c);//pull up's auf low setzen
DDRD |= 0xE0;
while(1)
{
if((PIND & T1)&&(release1 == 0x01)) //Taster1 gedrückt
{
release1 = 0x00;
direction = true;
start= true;
}
else
{
if (!(PIND & T1))
{
release1 = 0x01;
}
}
if((PIND & T2)&&(release2 == 0x01)) //Taster2 gedrückt
{
release2 = 0x00;
direction = false;
start = true;
}
else
{
if (!(PIND & T2))
{
release2 = 0x01;
}
}
if((PIND & T3)&&(release3 == 0x01))//Taster3 gedückt
{
PORTD |= 0x40;
PORTD &=~(0x80) ;
PORTD &=~(0x20);
release3 = 0x00;
PORTA &=~(0x80);
start = false;
}
else
{
if (!(PIND & T3))
{
release3 = 0x01;
}
}
if(start == true)
{
rotate(direction);
}
}
return 0;
}
ich habe es jetzt mit Halbschritt-modus geschafft,das der Schrittmotor sich einigermaßen sauber dreht, aber was mich ärgert dass er immer noch vibriert,er macht das nicht fliessend, weiss jemand was darüber?
bist du dir sicher, dass du den motor richtig angeschlossen hast?
was hast du denn für einen (anschlussmäßig)? 4 anschlüsse? oder 5?
hallo A|KI,
ich glaube schon, dass ich den Motor richtig angeschlossen habe, sonst hätte er sich kaum drehen können.
das ist ein 4-Anschluss Schrittmotor.
ah, ok, bei denen gehts ja schwer, die falsch anzuschließen. was hat der denn sonst so für daten (schrittwinkel...)?