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

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