-         

Ergebnis 1 bis 2 von 2

Thema: ATmega 8535 + L293d + DC Motoren

  1. #1

    ATmega 8535 + L293d + DC Motoren

    Anzeige

    Hallo habe den Roboter von AATIS nachgebaut. Bis jetzt ging alles super.
    der Roboter steuert Schrittmotoren super. Nun wolte ich aber DC Motoren ansteuern und wenn ich die anschließe dann wechseln die schnell von einer Richtigung zur anderen hin und her. Wenn ich den Microcontroller runter mache und ein High Signal an den Eingang des L293D anlege dann dreht der Motor normal in eine Richtung so wie ich das eigendlich möchte.

    Da hab ich mir gedacht das liegt ja dan wohl an dem Programm.
    So da ich kein Plan davon habe wie und was ich da in dem Programm ändern muss, wolte ich fragen ob mir jemand da weiter helfen kann.

    Möchte gerne die Demo 2 so das ich DC Motoren ansteuen kann + Geschwindigkeit ändern. Vorwärts und Rückwärts.

    Demo 2

    Code:
    /*
    	Titel:		Linienverfolgungsprogramm
    	Funktion:	Roboter startet bei kurzem Druck auf Hindernissensoren
    				und versucht, einer stark reflektierenden Linie auf
    				dem Boden zu folgen. Beim Start muss sich der Sensor
    				auf dieser Linie befinden; der Bereich außerhalb der
    				Linie darf nur sehr wenig reflektieren.
    	Autor:		Gunther May, DL3ABQ
    	Datum:		01/2004
    	Prozessor:	AT90S8535/ATMega8535
    	Lizenz:		GNU Public License (gpl.txt)
    */
    
    #include <io.h>
    #include "..\lib\mydefs.h"
    #include "..\lib\stepper.h"
    #include "..\lib\sensor.h"
    
    #define myspeed 40 //Verzögerung zwischen den Schritten
    
    int main(void)
    {
      unsigned char gndval;
    
      sens_initwall();
      sens_initgnd();
    
      while (sens_getwall()==0);
    
      stepper_on();
    
      while(1)                                    //Endlosschleife
      {
        gndval=sens_getgnd();
        
        switch(gndval)
        {
          case 0:                                 //ganz auf der Linie
          {
            stepper_go(FORWARD,1,myspeed);        //einen Schritt vorwärts
    		sens_setLED(0,0);
    		sens_setLED(1,0);
            break;
          }
          case 1:                                 //links von der Linie weg
          {
            stepper_go(RIGHT,1,myspeed);           //einen Schritt vorwärts
    		sens_setLED(0,1);
    		sens_setLED(1,0);
            break;
          }
    
          case 2:                                 //rechts von der Linie weg
          {
            stepper_go(LEFT,1,myspeed);          //einen Schritt vorwärts
    		sens_setLED(0,0);
    		sens_setLED(1,1);
            break;
          }
          case 3:                                 //ganz von der Linie weg
          {
            //Fehler! Roboter befindet sich außerhalb des Linienbereiches
            stepper_go(BACK,1,myspeed);
    		sens_setLED(0,1);
    		sens_setLED(1,1);
            break;
          }
    
        }
      }
    
      return 0;
    }


    hier die Unterprogramme
    Code:
    /*
    	Titel:		Schrittmotor-Routinen für AATiS-Roboter
    	Autor:		Gunther May, DL3ABQ
    	Datum:		7/2002
    	Prozessor:	AT90S8535/ATMega8535
    	Lizenz:		GNU Public License (gpl.txt)
    */
    
    #ifndef STEPPER_H
    #define STEPPER_H
    
    /*
    ** hier Motortyp auswählen
    */
    #define BIPOLAR
    //#define UNIPOLAR
    
    /*
    ** Motorport auswählen
    */
    #define STEPPER_PORT     PORTC
    #define STEPPER_DDR      DDRC
    
    #define FORWARD          0
    #define BACK             1
    #define RIGHT            2
    #define LEFT             3
    
    #define RIGHTANGLE       8
    
    /* 
    ** Funktions-Prototypen 
    */
    
    //Schrittmotoren in Haltepostition bringen
    extern void stepper_on(void);
    
    //Schrittmotoren komplett abschalten
    extern void stepper_off(void);
    
    //in Richtung <dir> <steps> Schritte mit einer Schrittverzögerung von <del> gehen 
    extern void stepper_go(unsigned char dir, unsigned short steps, unsigned char del);
    
    
    
    #endif //STEPPER_H


    Code:
    /*
    	Titel:		Schrittmotor-Routinen für AATiS-Roboter
    	Autor:		Gunther May, DL3ABQ
    	Datum:		7/2002
    	Prozessor:	AT90S8535/ATMega8535
    	Lizenz:		GNU Public License (gpl.txt)
    */
    
    #include <io.h>
    #include "stepper.h"
    
    /*
    ** Schrittmuster in Abhängigkeit vom Motortyp festlegen
    */
    
    #ifdef BIPOLAR
    
    	#define STEPPARTS 4
    
    	const
    		unsigned char step_pat[4][STEPPARTS] =	{{255-(5+5*16), 255-(9+6*16), 255-(10+10*16), 255-(6+9*16)},
    												{255-(6+9*16), 255-(10+10*16), 255-(9+6*16), 255-(5+5*16)},
    												{255-(5+5*16), 255-(6+6*16), 255-(10+10*16), 255-(9+9*16)},
    												{255-(5+5*16), 255-(9+9*16), 255-(10+10*16), 255-(6+6*16)}};
    #endif
    
    #ifdef UNIPOLAR
    
    	#define STEPPARTS 8
    
    	const
    		unsigned char step_pat[4][STEPPARTS] =	{{255-(1+(1+8)*16), 255-(1+2+8*16), 255-(2+(4+8)*16), 255-(2+4+4*16),
    												255-(4+(2+4)*16), 255-(4+8+2*16), 255-(8+(1+2)*16), 255-(8+1+1*16)},
    												{255-(1+8+1*16), 255-(8+(1+2)*16), 255-(4+8+2*16), 255-(4+(2+4)*16),
    												255-(2+4+4*16), 255-(2+(4+8)*16), 255-(1+2+8*16), 255-(1+(8+1)*16)},
    												{255-(1+8+(1+8)*16), 255-(8+8*16), 255-(4+8+(4+8)*16), 255-(4+4*16),
    												255-(2+4+(2+4)*16), 255-(2+2*16), 255-(1+2+(1+2)*16), 255-(1+1*16)},
    												{255-(1+1*16), 255-(1+2+(1+2)*16), 255-(2+2*16), 255-(2+4+(2+4)*16),
    												255-(4+4*16), 255-(4+8+(4+8)*16), 255-(8+8*16), 255-(8+1+(8+1)*16)}};
    #endif
    
    /*
    ** Funktions-Deklarationen
    */
    
    volatile unsigned char dummy;  //für Delay-Funktion
    
    void stepdelay(unsigned char del)
    {
      unsigned char i,k,l;
    
    	dummy=17;
    	for(i=0; i<del; i++) {
    		for(k=0; k<2; k++) {
    			for(l=0; l<255; l++) {
    				dummy++;      
    			}
    		}
    	}
    }
    
    void stepper_on()
    {
    	outp(0xFF, STEPPER_DDR);       /* all port bits as output */
    	outp(0x11, STEPPER_PORT);
    }/*stepper_on*/
    
    void stepper_off()
    {
    	outp(0xFF, STEPPER_DDR);       /* all port bits as output */
    	outp(0xFF, STEPPER_PORT);
    }/*stepper_off*/
    
    
    void stepper_go(unsigned char dir, unsigned short steps, unsigned char del)
    {
    	unsigned short i;
    	unsigned char k;
    
    	outp(0xFF, STEPPER_DDR);       /* all port bits as output */
    	for(i=0; i<steps; i++) {
    		for(k=0; k<STEPPARTS; k++) {
    			outp(step_pat[dir][k], STEPPER_PORT);
    			stepdelay(del);
    		}
    	}
    }/*stepper_go*/
    so des ist alles


    könnt aber auch die ganzen demos auf der seite http://dl3abq.jufu.org/dl.html downloaden


    please help me [-o<

  2. #2
    Gast
    Hallo ? jemand da ?

    Hat keiner nen Plan wie man DC Motoren ansteuert.

    Könnte mir jemand sagen was ich schreiben muss um ein Port anzusteuern (1/0).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •