loetstelle.net
Lötstelle Userforum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Schrittmotorsteuerung

 
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Mikrocontroller
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Mo 03.Okt 2011 12:09:36    Titel: Schrittmotorsteuerung Bauteile finden Antworten mit Zitat

Heyy

Ich weis, sicherlich ist diese steuerung total kompliziert geschrieben, aber ch bin ein anfänger und wollte mich mal in der schrittmotoransteuerung probieren.

Ich habe es geschafft, dass der schrittmotor sich vorwärts und rückwärts dreht in bestimmten zeitabständen. Nun wollte ich auf einem tiny2313 die Funktion eines l297 nacharmen, aber irgendwie funkt es nicht, wie ich will!

Hat jemand tipps zu meinem programm?
Code:

#include <util/delay.h>
#include <stdlib.h>
#include <avr/io.h>                //den librarys


int main (void){                   //hier startet das Programm

                           //hier stehen befehle die nur einmal aufgeführt werden

DDRD |= _BV(PB2);                //PB2 als output
DDRD |= _BV(PB3);               //PB3 als output
//-> PB2 + PB3 bilden Phase 1
DDRD |= _BV(PB4);               //PB4 als output
DDRD |= _BV(PB5);               //PB5 als output
//-> PB4 + PB5 bilden Phase 2


uint8_t Taktung =0;               //Input ->Taktung   
uint8_t Richtung =0;            //Input ->Richtung
uint8_t HalfFullstep =0;         //Halb-Vollschrittjumper


PORTB |= (1<<PB2);               //Standarteinschaltung
PORTB |= (1<<PB4);               //Standarteinschaltung
            
            
while(1){                          //hier startet die Endlosschleife

while(!bit_is_clear(PIND, PIND2))
{
Taktung = 1;
}

while(!bit_is_clear(PIND, PIND3))
{
Richtung = 0;
Richtung = 1;
}

while(!bit_is_clear(PIND, PIND4))
{
HalfFullstep =1;
HalfFullstep =0;
}
// Vollschritt vorwärts anfang
if ((Taktung == 1) && (Richtung ==1) && (HalfFullstep ==0) && (PINB & (1 << PB2)) && (PINB & (1 << PB4)))
{
PORTB |= (1<<PB2);
PORTB |= (1<<PB5);
}                   

if ((Taktung == 1) && (Richtung ==1) && (HalfFullstep ==0) && (PINB & (1<<PB2)) && (PINB & (1<<PB5)))
{
PORTB |= (1<<PB3);
PORTB |= (1<<PB5);
}

if ((Taktung == 1) && (Richtung ==1) && (HalfFullstep ==0) && (PINB & (1<<PB3)) && (PINB & (1<<PB5)))
{
PORTB |= (1<<PB3);
PORTB |= (1<<PB4);
}

if ((Taktung == 1) && (Richtung ==1) && (HalfFullstep ==0) && (PINB & (1<<PB3)) && (PINB & (1<<PB4)))
{
PORTB |= (1<<PB2);
PORTB |= (1<<PB4); //Vollschritt vorwärts ende
}



// Vollschritt rückwärts anfang
if ((Taktung == 1) && (Richtung ==0) && (HalfFullstep ==0) && (PINB & (1<<PB3)) && (PINB & (1<<PB4)))
{
PORTB |= (1<<PB3);
PORTB |= (1<<PB5);
}

if ((Taktung == 1) && (Richtung ==0) && (HalfFullstep ==0) && (PINB & (1<<PB3)) && (PINB & (1<<PB5)))
{
PORTB |= (1<<PB2);
PORTB |= (1<<PB5);
}

if ((Taktung == 1) && (Richtung ==0) && (HalfFullstep ==0) && (PINB & (1<<PB2)) && (PINB & (1<<PB5)))
{
PORTB |= (1<<PB2);
PORTB |= (1<<PB4);
}

if ((Taktung == 1) && (Richtung ==0) && (HalfFullstep ==0) && (PINB & (1<<PB2)) && (PINB & (1<<PB4)))
{
PORTB |= (1<<PB3);
PORTB |= (1<<PB4);
} //Vollschritt rückwärts ende





 }                                //ende endlosschleife

return 0;                          //wird nie erreicht
}                                  //ende Programm


MfG
Michael
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sepp



Anmeldungsdatum: 11.01.2007
Beiträge: 73

BeitragVerfasst am: Do 19.Jan 2012 20:09:17    Titel: Bauteile finden Antworten mit Zitat

Hallo,
mit _BV(PB2) setzt du PINS als eingang nicht als ausgang Wink

DDRC = 0xFF versuchs mal so deine Pins als ausgang zu setzen

Hier mal mein Code dazu:
Code:

DDRD |= _BV(PB2);                //PB2 als output
DDRD |= _BV(PB3);               //PB3 als output
//-> PB2 + PB3 bilden Phase 1
DDRD |= _BV(PB4);               //PB4 als output
DDRD |= _BV(PB5);               //PB5 als output


DDR steht für DataDirectionRegister das letzte D für Port D Wink

Zur erklärung:
0xFF steht für deine 8 Ports
F F = 1111 1111
von rechts nach links steht dein register nun auf eins um jetzt nur die 2 3 4 5 als output zu setzen machs so:
0001 1110 --> 0x1E
daraus folgt dieser Code

So wärs meiner Meinung nach besser
Code:

DDRB = 0x1E;                //PB2 als output
              //PB3 als output
              //-> PB2 + PB3 bilden Phase 1
              //PB4 als output
             //PB5 als output
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Anzeige






Verfasst am: Heute 04:23:24    Titel: Bauteile finden

Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Mikrocontroller Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen


Powered by phpBB 2.x © 2001, 2002 phpBB Group

Sie sind Besucher Nr. 1222038
©opyright by Markus Vohburger 2005 All Rights reserved