Moin, das hier läuft nicht. Soll nach der Anzahl Schritte anhalten, aber nichts, läuft weiter. Ohne Fehler. Geht in den uP. Mist! Wisst ihr warum? /* * main.c * * Schrittmotorsteuerung * * Created: 3/21/2021 4:30:58 PM * Author: HuiBuh * * * Schrittfolge Ansteuerung mit ULN2003AN: * * IN1 IN2 IN3 IN4 * 0 0 0 1 * 1 1 0 0 * 0 0 1 0 * 0 1 1 0 * 0 1 0 0 * 1 1 0 0 * 1 0 0 0 * 1 0 0 1 * */ #define F_CPU 8000000UL #include <xc.h> #include <stdio.h> #include <util/delay.h> volatile unsigned int Schritte; int main(void) { DDRB = (1<<DDB0)|(1<<DDB1)|(1<<DDB2)|(1<<DDB3); // PortB Pin 0,1,2,3 als Ausgang // PortB Ausgänge 0 bis 3 auf Null - Vorbereitung PORTB &= ~(1<<PB0); // IN4 PORTB &= ~(1<<PB1); // IN3 PORTB &= ~(1<<PB2); // IN2 PORTB &= ~(1<<PB3); // IN1 // Zähler Schritte auf 0 setzen Schritte = 0; while(1) { // Schritte rechte Drehung PORTB = 1; // IN4 = 1 Schritte++; _delay_ms(2); PORTB = 3; // IN4 und IN3 = 1 Schritte++; _delay_ms(2); PORTB = 2; // IN3 = 1 Schritte++; _delay_ms(2); PORTB = 6; // IN3 und IN2 = 1 Schritte++; _delay_ms(2); PORTB = 4; // IN 3 = 1 Schritte++; _delay_ms(2); PORTB = 12; // IN2 und IN1 = 1 Schritte++; _delay_ms(2); PORTB = 8; // IN1 = 1 Schritte++; _delay_ms(2); PORTB = 9; // IN4 und IN1 = 1 Schritte++; _delay_ms(2); if (Schritte == 100) //4095 { break; } } }
1. toller Thread-Titel, weil er so aussagekräftig ist. 2. Welche Schleife soll der Controller mit dem Break verlassen? Die "while(1)"? Und was soll er dann machen?
Du verlässt die While1 und dann die main und dann startet er von vorn, denk' ich... kannst ja vor der While1 mal ein _delay_ms(255) reintun. dann läuft er immer 100 Schritte und mach ne kleine Pause, nachdem er neu gestartet hat. Probier mal.
Hein H. schrieb: > { > break; > } Damit verlässt du die Mainloop und das Programm startet von vorn. mfg mf
Hein H. schrieb: > das hier läuft nicht Scheinbar läuft es schon, aber 100 lässt sich nicht durch 8 teilen, weiss schon der Grundschüler.
Ha, ich habe es gefunden! Er macht bei jedem Durchgang 8 Schritte. Ich kann den Durchgang nur bei X mal 8 verlassen. Bei 8, 16, 32, und so weiter klappt alles. So long Kollegen. Danke!
Hein H. schrieb: > Ha, ich habe es gefunden! Er macht bei jedem Durchgang 8 Schritte. Ich > kann den Durchgang nur bei X mal 8 verlassen. Oder eine bessere Lösung finden. z.B. mit einem Array, in dem die acht Werte stehen. Damit kann man den Motor auch rückwärts laufen lassen.
Ja, habe ich gerade gemacht. Und ich benutze einen Interrupt durch einen Taster, dass er stoppt. Drei Taster für Vor, Zurück und Halt. Klappt (hoffe ich). Danke.
Beitrag #6632627 wurde von einem Moderator gelöscht.
STK500-Besitzer schrieb: > 1. toller Thread-Titel, weil er so aussagekräftig ist. > Ne?! Finde ich auch. > 2. Welche Schleife soll der Controller mit dem Break verlassen? > Die "while(1)"? Jo! > Und was soll er dann machen? Nicht! Soll ja nur ein Test sein. Aber schön, eine STK500 habe ich auch. Läuft aber nur unter Win7. Unter 10 kommen dämliche Fehlermeldungen betreffs des Treibers. Daher habe ich einen Schlepptop mit Win7 laufen. Win 10 ist nichts für mich. Zu viel Schnüffelei! Und unter LINUX bin ich beim Probieren. Was mich da anödet ist die Schräubchendreherei!
Hein H. schrieb: > Unter 10 kommen dämliche Fehlermeldungen betreffs des Treibers. Dann wolltest du für deinen Prolific USB-Seriell-Wandler besser nicht den verblockten Win10-Treiber nehmen, sondern einen funktionierenden. Wenn allerdings "dämlich" das einzige an den Fehlermeldungen ist, was du verstehst, ist das dämlich ;-)
Wolfgang schrieb: > Wenn allerdings "dämlich" das einzige an den Fehlermeldungen ist, was du > verstehst, ist das dämlich ;-) :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.