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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.