Es funzt nicht

OP #6632590
Lesenswert?

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;
}

    }

}
Gast #6632613
Lesenswert?

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.
Beitrag #6632627 wurde von einem Moderator gelöscht.
OP #6632635
Lesenswert?

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!
Gast #6632776
Lesenswert?

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 ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren