Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > > > Hallo zusammen, > > > > > > ich habe ein kleines Program geschrieben welches zwei Threads enhält. In einem Thread wir ein Schrittmotor > > > permanent (durch ports.pulse) um einen Schritt weiter gedreht (L297/L298 Schaltung) und der andere Thread erhöht > > > auf Tastendruck die Pause nach dem ports.pulse. Dadurch wird die Drehgeschwindigkeit erhöht oder verkleinert. > > > > > > Mein Problem ist nun das bei jedem Tastendruck, der Motor einen merklichen Geschwindigkeitsschub erfährt. > > > Selbst wenn ich die Pause auf 1 ms stelle, was ja eigentlich die maximale Geschwindikeit sein sollte, legt der > > > Schrittmotor einen Zahn zu. > > > Dieses Verhalten wird auch am Oszilloskope sichtbar, durch schneller aufeinander folgende pulse. > > > > > > Hat jemand von euch eine Idee wieso dies so ist ??? Oder wie ich das unterbinden kann? > > > > > > > > > Über einen Hinweis würde ich mich sehr freuen. > > > > > > Vielen Dank > > > > > > > > > Hallo, > > > > ohne einige Codeschnipsel zu dem Thema wäre das nur in den blauen Dunst geschossen. > > > > Gruß krassos > > Hallo, > > entschuldigung für die späte Antwort. Anbei mein Program: > > <code> > const enable = 8; //P1H0 > const cw = 9; //P1H2 > const clock = 10; //P1H4 > > int delay; > > function key () returns int > { > int u1, u2, key; > while (ports.adc(7)>900); > u1= ports.adc(7); > u2= ports.adc(7); > if (math.abs(u1-u2))< 4 > { > if u1<901 key=3; //Taste 3 > if u1<825 key=6; //Taste 6 > if u1<755 key=9; //Taste 9 > if u1<690 key=12; //Taste # > if u1<620 key=2; //Taste 2 > if u1<550 key=5; //Taste 5 > if u1<480 key=8; //Taste 8 > if u1<410 key=0; //Taste 0 > if u1<335 key=1; //Taste 1 > if u1<270 key=4; //Taste 4 > if u1<190 key=7; //Taste 7 > if u1<110 key=11; //Taste * > if u1>1000 key=-1; //Keine Taste gedrückt > } > return key; > } > > //------------------------------------------ > //------------------------------------------ > thread keyboard > //------------------------------------------ > //------------------------------------------ > { > int key_press; > loop > { > key_press = key(); > > if key_press == 11 if delay - 1 < 0 delay = 0; > else delay = delay - 1; > if key_press == 12 if delay + 1 > 1000 delay = 1000; > else delay = delay + 1; > > sleep 200; > } > } > > //--------------------- > thread stepper > //--------------------- > { > ports.set(enable,1); > ports.set(cw,0); > ports.set(clock,0); > loop > { > ports.pulse(clock); > sleep delay; > } > } > > //--------------------- > thread main > //--------------------- > { > run keyboard; > run stepper; > } > </code> > > Wenn die Taste "*" gedrückt wird, dreht sich mein Motor schneller. Leider sehe ich keinen "Fehler".... > > Ich hoffe das du, krassos etwas mehr siehst als ich :-) > > Vielen Dank für Deine/Eure Hilfe > > Olaf > > P.S Inzwischen sind es drei Threads geworden, allerdings das gleiche verhalten.