Forum: Compiler & IDEs Schrittmotor ansteuern über RS232


von Jo!cilan (Gast)


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!

von Klaus F. (kfalser)


Lesenswert?

Warum probierst Du nicht mit dem Mikrocontroller etwas zu senden und im 
PC zu empfangen?
Dann siehst Du ob die Einstellung stimmt.

von Michael Wilhelm (Gast)


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

von Michael Wilhelm (Gast)


Lesenswert?

Korrektur:
bei einem Schrittwinkel von 90° wären es 5 Umdrehungen.

MW

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
Noch kein Account? Hier anmelden.