Forum: Mikrocontroller und Digitale Elektronik schrittmotor drehzahl ändern


von D. K. (kirsche)


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

von Floh (Gast)


Lesenswert?

D. Kirschner schrieb:
> x - 0.05

klar. Nach dem auflösen des Defines ist das ein

0.75 -0.05;

x ist keine Speicherstelle, kann also zur LAuzeit nicht verändert 
werden!
:-)

von Karl H. (kbuchegg)


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.

von Lehrmann M. (ubimbo)


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.

von Karl H. (kbuchegg)


Lesenswert?

Ich denke eher, dass erst mal anstelle des Tutorials ein C-Buch 
angebrachter wäre, wenn schon das Konzept von Variablen Schwierigkeiten 
macht.

von D. K. (kirsche)


Lesenswert?

sorry, prog. noch nicht lange.

wie macht man das? mit einem Hilfskonstrukt...

von Karl H. (kbuchegg)


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.

von Lehrmann M. (ubimbo)


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/

von D. K. (kirsche)


Lesenswert?

ok, ich habe mein ziel zu hoch gesteckt...

ich habe das AVR-GCC-Tutorial noch nicht ganz durchgelesen aber ich 
versuche nebenbei eigene "projekte" zu machen damit ich die sachen ein 
wenig kompinieren kann und zum üben...

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

von spess53 (Gast)


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

von D. K. (kirsche)


Lesenswert?

ok, danke =)

werde ich machen wenn ich soweit bin und das ganze verstehe...

glg

von Karl H. (kbuchegg)


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?

von spess53 (Gast)


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

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.