Schrittmotor ansteuern über RS232

Gast #902357
Lesenswert?
• ▲
▼
Hallo!

ICh möchte meinen Schrittmotor ansteuern, und zwar soll er das drehen 
beginnen (5 umdrehungen) , sobald der mikrocontroller ein "x" empfängt.
Es funktioniert jedoch nicht, habe mein Terminal aber richtig 
eingestellt.

1
//Steuerung eines Schrittmotors (Drucker)
2
// Die beiden grünen Leitungen müssen auf Vcc,
3
// dann nacheinander weiß,gelb,rot,blau für eine 
4
// Drehrichtung im UZS takten.
5

6
#define F_CPU 4000000
7
#define DELAY 10
8

9
#include <avr/io.h>
10
#include <util/delay.h>
11

12
void main (void)
13
{
14
  int c=0;
15

16
  UCSRB |= (1<<RXEN) | (1<<TXEN);
17
  UCSRC |= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
18

19
    UBRRH = 00;                  //Baudrate einstellen 9600 bei 8 Mhz
20
    UBRRL = 51;
21

22
  DDRB = 0xFF;
23
  
24
  
25
  while(1)
26
  {
27

28
      while (!(UCSRA & (1<<RXC)));                //warten bis ein Zeichen ankommt
29

30
      c = UDR;                        
31
      
32
    if (c == 'x')
33
    {
34
      for(int y=0;y<5;y++)                    
35
       {
36
        PORTB = 0b00000001;
37
        PORTB = 0b00000100;
38
        _delay_ms(DELAY);
39
        PORTB = 0b00000010;
40
        PORTB = 0b00001000;
41
        _delay_ms(DELAY);
42
        PORTB = 0b00000100;
43
        PORTB = 0b00000001;
44
        _delay_ms(DELAY);
45
        PORTB = 0b00001000;
46
        PORTB = 0b00000010;
47
        _delay_ms(DELAY);
48
      }
49
    }
50

51
  }    
52
  
53
}

Habe ich den UART falsch konfiguriert?

Vielen Dank!
Gast #902490
Lesenswert?
• ▲
▼
>     for(int y=0;y<5;y++)
>       {
>        PORTB = 0b00000001;
>        PORTB = 0b00000100;
>        _delay_ms(DELAY);
>        PORTB = 0b00000010;
>        PORTB = 0b00001000;
>        _delay_ms(DELAY);
>        PORTB = 0b00000100;
>        PORTB = 0b00000001;
>        _delay_ms(DELAY);
>        PORTB = 0b00001000;
>        PORTB = 0b00000010;
>        _delay_ms(DELAY);
>      }

Das verstehe ich nicht. Du gibst am Port ein Bitmuster aus und 
überschreibst de danach sofort wieder. So schnell ist kein Stepper 
(evtl. doch mit einem 4KHz Quarz). Danach das delay. Und du machst keine 
5 Umdrehungen, sonder 5 x 4 = 20 Schritte. Und warum ein int? Char hätte 
es auch getan.

MW

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.