schrittmotor drehzahl ändern

OP #2078213
Lesenswert?

hi leute,

habe ein prob.

ich will bei meinem stepper die drehzahl ändern in x-0,05 schritten.

ich fange mit 0,75ms an (es geht wenn man ein bisschen mithilft xD)
1
#include  <avr\io.h>
2
#include   <util\delay.h>
3

4
#define x 0.75    // [ms] fuer Vollschritt
5

6
int main (void)
7

8
{
9
    DDRD = 0xFF;
10
  
11
  DDRB = 0x00;
12
  PORTB = 0x01;
13

14
  do 
15
  {  
16

17
//=============================== Vollschritt
18

19
    PORTD = 0x1A;
20
    _delay_ms(x);
21
    
22
    PORTD = 0x16;
23
    _delay_ms(x);
24

25
    PORTD = 0x15;
26
    _delay_ms(x);
27
    
28
    PORTD = 0x19;
29
    _delay_ms(x);
30
  
31
  
32
}while(1);
33
        
34
}

wie macht man das mit den taster der an PORTB liegt?

habs mal mit
1
if(!(PORTB&0x01)
2

3
x - 0.05
aber es geht nicht =(

bitte um hilfe
#2078221
Lesenswert?

Aber Achtung:
Du kannst _delay_ms nicht mit einer Variablen benutzen.
Daher musst du ein Hilfskonstrukt bemühen: Eine Funktion, die _delay_ms 
mit einem konstanten Wert entsprechend oft aufruft, bis du auf der 
vorgegebenen Zeit bist.

Und noch was: Gleitkommazahlen willst du da nicht wirklich benutzen.
#2078224
Lesenswert?

D. Kirschner schrieb:
> wie macht man das mit den taster der an PORTB liegt?

Was für Taster denn? Sollen wir die Verschaltung erschnüffeln? Der Satz 
ist falsch und nicht eindeutig.

Es heißt entweder

Wie macht man das mit den Tastern die an PORTB liegen?
                                ^ ^^^              ^^
oder

Wie macht man das mit dem Taster der an PORTB liegt?
                      ^^^

Für eine Variante musst du dich schon entscheiden. Es ist doch nicht so 
schwer einen deutschen Satz zu bilden ...

Wieviele Taster denn? Pullup oder Pulldown?

Alles triviale Grundlagen - Tutorial machen:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Wenn ich nicht Auto fahren kann, dann nehme ich doch auch nicht an der 
Ralley Paris-Dakar teil ... gleiches gilt für Mikrcontroller und sag 
jetzt nicht, dass du das Tutorial schon gemacht hast - dann könntest du 
das nämlich.

Man darf fertigen Code auch nur dann benutzen wenn man ihn verstanden 
hat - was du offensichtlich an einigen Stellen (define & delay, ...) 
nicht getan hast.
#2078231
Lesenswert?

Mit einer Funktion!
Bzw einer Schleife in dieser Funktion, die zb
   _delay_us( 10 );
enstprechend oft wiederholt, so dass sich in Summe eine bestimmte 
variable Verzögerung ergibt.

Sieht so aus, als ob ich (wieder mal) mit dem Hinweis, dass die 
grundlegenden Dinge alle in Büchern stehen, goldrichtig liege.
#2078234
Lesenswert?

D. Kirschner schrieb:
> wie macht man das? mit einem Hilfskonstrukt...

wie macht man was?

Es tut mir leid, du kannst dich nicht mal so artikulieren, dass wir 
wissen was gemeint ist. Stellst tausend Fragen auf einmal deren Antwort 
du nicht verstehen kannst weil dir sämtliche Grundlagen fehlen. Mein 
Ratschlag: C-Tutorial oder C-Buch. Das Galileo open book ist keine 
schlechte Wahl:
http://openbook.galileocomputing.de/c_von_a_bis_z/
Gast #2078314
Lesenswert?

Hi

>aber dann bleibe ich daweil noch bei den LEDs und so damit kenne ich
>mich inzwischen ein wenig aus

Nur mal als Tip: Zum Steuern eines Schrittmotors ist ein Timer im 
CTC-Mode wesentlich besser geeignet als irgendwelche Delays. Die 
Schritte legst du in einem Array ab und von dort liest du bei bei jedem 
Compare-Interrupt den nächsten Wert aus.
Das ist mehr als 'Hausaufgabe' gedacht, bevor du wieder mit einem 
Schrittmotor weitermachst. Kann man auch mit Leds auprobieren 
(16-Bit-Timer mit Prescaler 1024, damit man etwas sieht).

@Lehrmann Michael (ubimbo)

Es ist immer nett zu sehen, wenn die Einäugigen sich über die Blinden 
hermachen.

MfG Spess
#2078418
Lesenswert?

spess53 schrieb:

> Nur mal als Tip: Zum Steuern eines Schrittmotors ist ein Timer im
> CTC-Mode wesentlich besser geeignet als irgendwelche Delays.

Alles richtig

> Die
> Schritte legst du in einem Array ab und von dort liest du bei bei jedem
> Compare-Interrupt den nächsten Wert aus.
> Das ist mehr als 'Hausaufgabe' gedacht, bevor du wieder mit einem
> Schrittmotor weitermachst. Kann man auch mit Leds auprobieren
> (16-Bit-Timer mit Prescaler 1024, damit man etwas sieht).

Spess, du überforderst ihn!

Offenbar hat er bisher weder for-Schleifen noch Variablen noch 
Funktionen entdeckt und du willst ihm einen Interrupt und Arrays 
einreden?
Gast #2078469
Lesenswert?

Hi

>Spess, du überforderst ihn!

Nein. Ich habe danach geschrieben:

'Das ist mehr als 'Hausaufgabe' gedacht, bevor du wieder mit einem
Schrittmotor weitermachst.'

Ich denke, das er deine Hinweise bezüglich C verstanden hat. Und wenn er 
das so machen will, wie ich das vorgeschlagen habe, muss er in Punkto C 
einiges zulegen. Mehr hatte ich eigentlich nicht nicht beabsichtigt.

MfG Spess

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