becherglas
27.03.2004, 22:09
Hallo,
ich habe mir mal zu Testzwecken auf Steckbrett einen L293D an einen Atmega16 angeschlossen, daran einen Schrittmotor aus dem tecshop:
http://www.w-r-e.de/shop/images/smo1.jpg
Der Motor funktioniert auch tatsächlich un dreht sich - einziges Problem: Das ganze funktioniert nur wenn ich die Abstände zwischen den Poländerungen rel. lang mache. Ich weis jetzt überhaupt nicht wieso dieses Problem auftritt bzw wo ich suchen muss ... vl ist es was triviales und ich bin einfach nur zu müde aber ich stehe im Moment einfach ziemlich im Wald.
So funktioniert der Motor:
#include <io.h>
unsigned int beats;
unsigned int counter;
unsigned int nop;
int main(void) {
outp(0xff, DDRA);
while(1)
{
outp(0x5,PORTA);
wait(40000);
outp(0x6,PORTA);
wait(40000);
outp(0xA,PORTA);
wait(40000);
outp(0x9,PORTA);
wait(40000);
}
}
void wait(beats) {
for(counter = 1;counter > beats;counter = counter + 1) {
nop++;
}
}
(Den n00b-haften Code bitte ich zu entschuldigen - bin in sachen C noch blutiger Anfänger)
Ändere ich die wait Attribute jedoch auf sagen wir 5000 oder so bewegt sich der Motor einfach nicht mehr. Ich habe auch leider kein Oszi da um ohne Motor die Ausgänge zu überprüfen aber irgendwie kann ich mir die Ursache dieses Fehlers nicht erklären.
Ich hoffe jemand kann mir helfen. Danke schonmal !
Mfg
Johannes
ich habe mir mal zu Testzwecken auf Steckbrett einen L293D an einen Atmega16 angeschlossen, daran einen Schrittmotor aus dem tecshop:
http://www.w-r-e.de/shop/images/smo1.jpg
Der Motor funktioniert auch tatsächlich un dreht sich - einziges Problem: Das ganze funktioniert nur wenn ich die Abstände zwischen den Poländerungen rel. lang mache. Ich weis jetzt überhaupt nicht wieso dieses Problem auftritt bzw wo ich suchen muss ... vl ist es was triviales und ich bin einfach nur zu müde aber ich stehe im Moment einfach ziemlich im Wald.
So funktioniert der Motor:
#include <io.h>
unsigned int beats;
unsigned int counter;
unsigned int nop;
int main(void) {
outp(0xff, DDRA);
while(1)
{
outp(0x5,PORTA);
wait(40000);
outp(0x6,PORTA);
wait(40000);
outp(0xA,PORTA);
wait(40000);
outp(0x9,PORTA);
wait(40000);
}
}
void wait(beats) {
for(counter = 1;counter > beats;counter = counter + 1) {
nop++;
}
}
(Den n00b-haften Code bitte ich zu entschuldigen - bin in sachen C noch blutiger Anfänger)
Ändere ich die wait Attribute jedoch auf sagen wir 5000 oder so bewegt sich der Motor einfach nicht mehr. Ich habe auch leider kein Oszi da um ohne Motor die Ausgänge zu überprüfen aber irgendwie kann ich mir die Ursache dieses Fehlers nicht erklären.
Ich hoffe jemand kann mir helfen. Danke schonmal !
Mfg
Johannes