Forum

Einloggen | Registrieren | RSS  

Gerd999

E-Mail

26.05.2012,
10:39
 

Schrittmotor (Elektronik)

Guten Morgen,
ich möchte gerne meinen Schrittmotor mittels Taster z.B in den Linkslauf bringen dies soll z.B. über den Port1 Pin0 geschehen ich habe es mittels Polling versucht zu verwirklichen nur leider bin ich kläglich gescheitert. Er fängt zwar an zu laufen bei der Simulation, nur leider lässt er sich nicht mehr mittels Taster anhalten. Sehe ich da was falsch Es wär sehr nett wenn mir jemand weiterhelfen könnte.

Lg

#include <t89c51ac2.h> // Header für Controller "AT89C51AC3"
#include <stdio.h>
/*-------------------------------------------------------------------
Deklarationen von Variablen und Konstanten
--------------------------------------------------------------------*/
//unsigned char x;
bit reslo;

bit lislo;

sfr eingang = 0x90;
/*--------------------------------------------------------------------
Hauptprogramm
----------------------------------------------------------------------*/
void re_slow(void);

void li_slow(void);

void zeit(int i, int k); //Prototypen-Anmeldung
void main(void)
{
P2=0x00;
eingang=255;
reslo = 0;

lislo = 0;

while(1)
{
switch(eingang)
{
case 0xFE:
re_slow();
break;

case 0xFB:
li_slow();
break;

default:
//P4=0xFF;
break;
}
}
}
/*-----------------------------------------------------------------------
Zusatzfunktionen
-------------------------------------------------------------------------*/

void re_slow(void) // Funktion Rechtslauf langsam
{

reslo=1;
while(reslo)
{ if(P1_0==0){ // Hier komme ich nicht weiter !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?????????????????????????
P2=0x0C; // Bitmuster 1 Rechtslauf
zeit(5,3000); // Zeitverzögerung
P2=0x09; // Bitmuster 2 Rechtslauf
zeit(5,3000);
P2=0x03; // Bitmuster 3 Rechtslauf
zeit(5,3000);
P2=0x06; // Bitmuster 4 Rechtslauf
zeit(5,3000);
if (eingang == 0xEF)
{

//P2=0x00;
while(P1_0==0){} // Hier komme ich nicht weiter ich habe es mit Polling versucht!!!!!!!!!!!!!!!!!!!!!!!!!!!!??????????????????????????
reslo = 0;

}
}
}
}


void li_slow(void) // Funktion Linkslauf langsam
{
lislo=1;
while(lislo)
{ if(P1_2==0){
P2=0x06; // Bitmuster 1 Linkslauf
zeit(5,3000);
P2=0x03; // Bitmuster 2 Linkslauf
zeit(5,3000);
P2=0x09; // Bitmuster 3 Linkslauf
zeit(5,3000);
P2=0x0C; // Bitmuster 4 Linkslauf
zeit(5,3000);
if (eingang == 0xEF)
{
P2=0x00;
while(P1_2==0){}
lislo = 0;

}
}
}
}

void zeit(int i,int k) // Funktion Zeit
{
unsigned int x;
unsigned int y;
for(y=0;y<=i;y++)
{
for(x=0;x<=k;x++); //Int-Wert 62 ergibt 500 Mikrosekunden Delay
}
}

geralds(R)

Homepage E-Mail

Wien, AT,
26.05.2012,
10:58

@ Gerd999

Schrittmotor, wo sind passende Infos?

---
liegt der Fehler wirklich nur in der SW?
oder könnte er auch in der HW liegen?

Ohne passende Infos wirds problematisch.

Grüße
Gerald
---

--
...und täglich grüßt der PC:
"Drück' ENTER! :wink: Feigling!"

Gerd999

E-Mail

26.05.2012,
11:14

@ geralds

Schrittmotor, wo sind passende Infos?

Der Fehler liegt sicher nur in der Software wie gesagt ich habe das Programm simuliert jedoch war es mir nicht möglich einen wechsel von dem Rechtslauf auf Linkslauf vorzunehmen.

Ich habe da irgendeinen Fehler im Quelltext ich schätze das ich das Polling verfahren nicht richtig angewandt habe.

Vielen Dank im Voraus!!!

lg

hws(R)

E-Mail

59425 Unna,
26.05.2012,
11:44

@ Gerd999

Schrittmotor

» Guten Morgen,
» ich möchte gerne meinen Schrittmotor mittels Taster z.B in den Linkslauf

Mach es doch erstmal einfacher.
Drücken der Taste (mit Entprellung) macht ne LED an und aus (oder setzt ein Pinchen an dem ein Multimeter oder sonstwas hängt)

Wenn das geht, kommt die Schrittmotor-Unterroutine mit rein.

Wenn SFR90 dein Eingangsregister ist, warum setzt du das auf 255 und wo konfigurierst du das auf I/O?

hws

geralds(R)

Homepage E-Mail

Wien, AT,
26.05.2012,
13:24
(editiert von geralds
am 26.05.2012 um 13:28)


@ Gerd999

Schrittmotor, wo sind passende Infos?

» Der Fehler liegt sicher nur in der Software wie gesagt ich habe das
» Programm simuliert jedoch war es mir nicht möglich einen wechsel von dem
» Rechtslauf auf Linkslauf vorzunehmen.
»
» Ich habe da irgendeinen Fehler im Quelltext ich schätze das ich das
» Polling verfahren nicht richtig angewandt habe.
»
» Vielen Dank im Voraus!!!
»
» lg

---
Hier hast mal eine Logik-Hilfe:
http://de.wikipedia.org/wiki/Schleife_(Programmierung)

Ich denke, dort läuft dein Anliegen raus.
In deiner Software sind einige Schleifen-Eröffnungen, aber nicht Schliessungen.

Tip:
mache statt einer "while-do", eine "do-while" Schlafe.

Wie sind deine Definitionen? - Die Funktionen der Portpins, der Register, sehe ich nicht alle.

--- Ein Projekt als Beispiel:
http://www.mikrocontroller.net/articles/Schrittmotor-Controller_(Stepper)
Acuh wenn das Projekt mit dem AVR Risc gedacht ist, du kannst dieses auf dein 8051 Derivat konvertieren.

Auf Atmels Seite gefunden:
http://www.atmel.com/Images/doc8017.pdf

Dann gibts auf der Atmel Seite das doc4214.pdf -
"Driving Unipolar Stepper Motors Using C51/C251"
http://www.atmel.com/devices/AT89C51AC3.aspx?tab=documents

Allerdings hat dieses Online-File einen falschen Inhalt.
in etwa so... "-/migrating von OTP auf Flash..../-"

Ich habe dieses pdf.
Wenn du Interesse hast, mir deine Email-Adr. mailst, antworte ich dir dann mit dem File.
Einfach auf den Brief neben meinem Alias drücken.
In diesem Pdf, ca 450kB groß, sind Anschalt-Beispiele und eine Beispiel-Routine enthalten.
Oder vielleicht hast du dieses Pdf eh.


Grüße
Gerald
---

--
...und täglich grüßt der PC:
"Drück' ENTER! :wink: Feigling!"