- LiFePO4 Speicher Test         
Seite 5 von 11 ErsteErste ... 34567 ... LetzteLetzte
Ergebnis 41 bis 50 von 110

Thema: RP6 Servo Ansteuerung

  1. #41
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    Powerstation Test
    Hallo

    Also ich habe jetzt dieses Programm ausprobiert:
    https://www.roboternetz.de/phpBB2/vi...=318650#318650

    Die Impulslänge für die Servoposition setzt sich aus LEFT_TOUCHT und pos zusammen:
    Code:
    void pulseSERVO(uint8_t position)
    {
    	cli();
    // Impulsstart, Ausgang auf High
    	PORTC |= SERVO_OUT;
    // Der Gesamtimpuls besteht aus zwei Teilen, zuerst der Anteil für linke Position
    	delayCycles(LEFT_TOUCH);
    // und dann der Abstand von Links zum gewünschten Drehwinkel in Einzelschritten*pos
    	while (position--) {
    		delayCycles(PULSE_ADJUST);
    	}
    // Impuls ist gesendet, Ausgang wieder auf Low
    	PORTC &= ~SERVO_OUT;				// SERVO_OUT -> LO (pulse end)
    	sei();
    }
    
    void task_SERVO(void)
    {static uint8_t pos;
    // wenn Stopwatch1 größer 19 ist sind 20ms seit dem letzten Impulsstart vergangen
    	if (getStopwatch1() > PULSE_REPETITION) {
    //Impuls zum Servo senden
    		pulseSERVO(pos);
    // ---------------------------------------------------------------------
    // Nach ca. 50ms wird der Impuls für einen neuen Winkel berechnet
    		if (getStopwatch2() > 48) {
    			pos++; // Impulslänge um einen Schritt erhöhen
    			//pos+=3; // größere Schritte
    // Wenn der rechte Endpunkt erreicht ist, starten wir wieder links
    			if (pos > RIGHT_TOUCH) {pos = 0;}
    			setStopwatch2(0); // restart der 50ms-Verzögerung
    		}
    // ---------------------------------------------------------------------
    		setStopwatch1(0); // restart der 20ms-Impulswiederholung
    	}
    }
    Und das wird eben endlos wiederholt.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #42
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    morgen mic,

    habe deinen codeschnipsel (hoffe richtig) ergänzt
    Code:
    #include "RP6RobotBaseLib.h"
    #include "RP6BaseServoLib.h"
    int main(void)
    {
    initRobotBase();
    
    while(true)
    {
    void pulseSERVO(uint8_t position)
    {
       cli();
    // Impulsstart, Ausgang auf High
       PORTC |= SERVO_OUT;
    // Der Gesamtimpuls besteht aus zwei Teilen, zuerst der Anteil für linke Position
       delayCycles(LEFT_TOUCH);
    // und dann der Abstand von Links zum gewünschten Drehwinkel in Einzelschritten*pos
       while (position--) {
          delayCycles(PULSE_ADJUST);
       }
    // Impuls ist gesendet, Ausgang wieder auf Low
       PORTC &= ~SERVO_OUT;            // SERVO_OUT -> LO (pulse end)
       sei();
    }
    
    void task_SERVO(void)
    {static uint8_t pos;
    // wenn Stopwatch1 größer 19 ist sind 20ms seit dem letzten Impulsstart vergangen
       if (getStopwatch1() > PULSE_REPETITION) {
    //Impuls zum Servo senden
          pulseSERVO(pos);
    // ---------------------------------------------------------------------
    // Nach ca. 50ms wird der Impuls für einen neuen Winkel berechnet
          if (getStopwatch2() > 48) {
             pos++; // Impulslänge um einen Schritt erhöhen
             //pos+=3; // größere Schritte
    // Wenn der rechte Endpunkt erreicht ist, starten wir wieder links
             if (pos > RIGHT_TOUCH) {pos = 0;}
             setStopwatch2(0); // restart der 50ms-Verzögerung
          }
    // ---------------------------------------------------------------------
          setStopwatch1(0); // restart der 20ms-Impulswiederholung
       }
    }
    }
    return 0;
    }
    die libs von Dirk eingebunden, beim versuch zu kompilieren kommt:
    Code:
    ../servo_radbr_2.c: In function `pulseSERVO':
    
    ../servo_radbr_2.c:13: error: `SERVO_OUT' undeclared (first use in this function)
    ../servo_radbr_2.c:18: error: `PULSE_ADJUST' undeclared (first use in this function)
    wo, bzw. wie muss ich diese deklarieren? sind sie in Deinen libs?

    danke...
    gruß inka

  3. #43
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Das ist nun wirklich totaler Schrott. Wir sollten uns mal wieder synchronisieren:

    Ich:
    Wie sieht denn dein aktuelles Programm aus? Ich könnte es mal mit meinem RP6 testen.
    Du:
    ich verwende das demoprogramm von Dirk aus diesem thread
    Ich:
    Suche ein Demoprogramm von Dirk in diesem Thread und finde das:
    Code:
    /* 
     * ****************************************************************************
     * RP6 ROBOT SYSTEM - ROBOT BASE EXAMPLES
     * ****************************************************************************
     * Example: Simple Servo Example
     * Author(s): D. Ottensmeyer
     * ****************************************************************************
     * Description:
     * This example shows how to use a standard servo with RP6Library.
     * There are much better solutions to do this job, but you may use
     * this simple program to make some first experiments with servos.
     * The servo is connected to PINC1 (SDA).
     *
     * ############################################################################
     * The Robot does NOT move in this example! You can simply put it on a table
     * next to your PC and you should connect it to the PC via the USB Interface!
     * ############################################################################
     * ****************************************************************************
     */
    
    /*****************************************************************************/
    // Includes:
    
    #include "RP6RobotBaseLib.h" 	// The RP6 Robot Base Library.
    								// Always needs to be included!
    
    /*****************************************************************************/
    // Defines:
    
    // RP6 Base Servo Connection:
    #define SERVO_OUT			SDA			// PINC1  XBUS Pin 12
    
    // Servo movement limits (depending on servo type):
    #define LEFT_TOUCH			550			// Left servo touch
    #define RIGHT_TOUCH			254			// Right servo touch [max. 255]
    #define PULSE_ADJUST 		4
    #define PULSE_REPETITION	19			// Pulse repetition frequency
    
    /*****************************************************************************/
    // Functions:
    
    /**
     * INIT SERVO
     *
     * Call this once before using the servo task.
     *
     */
    void initSERVO(void)
    {
    	DDRC |= SERVO_OUT;					// SERVO_OUT -> OUTPUT
    	PORTC &= ~SERVO_OUT;				// SERVO_OUT -> LO
    	startStopwatch1();					// Needed for 20ms pulse repetition
    }
    
    /**
     * PULSE SERVO
     *
     * This is the servo pulse generation. This function
     * must be called every 20ms (pulse repetition).
     *
     * position = 0           : Left touch
     * position = RIGHT_TOUCH : Right touch
     *
     * ATTENTION: ! This function is BLOCKING all other activities for about 1   !
     *            ! to 2ms (depending on the value of position)!!!               !
     *            ! If you generate a pulse every 20ms 5-10% of the processor's  !
     *            ! calculating time is wasted by this kind of pulse generation. !
     *            ! If this is a problem for the rest of your program, you       !
     *            ! cannot use this method.                                      !
     *            ! You will need an interrupt-based solution instead.           !
     *            
     */
    void pulseSERVO(uint8_t position)
    {
    	cli();
    	PORTC |= SERVO_OUT;					// SERVO_OUT -> HI (pulse start)
    	delayCycles(LEFT_TOUCH);
    	while (position--) {
    		delayCycles(PULSE_ADJUST);
    	}
    	PORTC &= ~SERVO_OUT;				// SERVO_OUT -> LO (pulse end)
    	sei();
    }
    
    /**
     * SERVO TASK
     *
     * This is the servo demo task.
     * The positioning demo shows the servo lever rapidly
     * moving to the left touch, then slowly moving to
     * the right touch and so on ...
     *
     */
    void task_SERVO(void)
    {static uint8_t pos;
    	if (getStopwatch1() > PULSE_REPETITION) { // Pulse every ~20ms
    		pulseSERVO(pos);				// Servo pulse [1..2ms]
    // ---------------------------------------------------------------------
    // Your test code for positioning the servo here:
    		if (getStopwatch2() > 48) {	// Change position every ~50ms
    			pos++;						// Next position to the right
    			if (pos > RIGHT_TOUCH) {pos = 0;} // pos: 0..RIGHT_TOUCH
    			setStopwatch2(0);
    		}
    // ---------------------------------------------------------------------
    		setStopwatch1(0);
    	}
    }
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int main(void)
    {
    	initRobotBase(); // Always call this first! The Processor will not work
    					 // correctly otherwise.
    					 
    	// ---------------------------------------
    	// Write messages to the Serial Interface:
    	writeString_P("\n\n   _______________________\n");
    	writeString_P("   \\| RP6  ROBOT SYSTEM |/\n");
    	writeString_P("    \\_-_-_-_-_-_-_-_-_-_/\n\n");
    
    	writeString_P("################\n");
    	writeString_P("<<RP6     Base>>\n");
    	writeString_P(" Servo - Test 1 \n");
    	writeString_P("  Version 1.00  \n");
    	writeString_P("################\n\n");
    	mSleep(2500);
    
    	setLEDs(0b111111); // Turn all LEDs on
    	mSleep(500);       // delay 500ms
    	setLEDs(0b000000); // All LEDs off
    
    	initSERVO();
    	startStopwatch2();					// Used for the demo task
    	
    	while(true)  
    	{
    		task_SERVO();
    		task_RP6System();
    	}
    	return 0;
    }
    
    /******************************************************************************
     * Additional info
     * ****************************************************************************
     * Changelog:
     * - v. 1.0 (initial release) 03.10.2007 by D. Ottensmeyer
     *
     * ****************************************************************************
     */
    
    /*****************************************************************************/
    (Fundstelle in diesem Thread: https://www.roboternetz.de/phpBB2/vi...=318650#318650)

    Dieses Demo habe ich dann ausprobiert, die Werte an mein Servo angepasst, nach möglichen Fehlern gesucht (wobei Dirk es ja drauf hat und weiß, wie man gut programmiert) und schließlich die entscheidenden Programmteile nochmals kommentiert.

    Bin jetzt Schneeschippen.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #44
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi mic,

    schneeschippen ist manchmal eine echte alternative...

    ich habe diese demo gemeint (war bei den lib´s von Dirk mit dabei):

    Code:
    // Uncommented Version of RP6BaseServo.c 
    // written by Dirk 
    // ------------------------------------------------------------------------------------------ 
    
    #include "RP6BaseServoLib.h" 
    
    uint16_t pos = 0; 
    
    int main(void) 
    { 
       initRobotBase(); 
        
       writeString_P("\n\n   _______________________\n"); 
       writeString_P("   \\| RP6  ROBOT SYSTEM |/\n"); 
       writeString_P("    \\_-_-_-_-_-_-_-_-_-_/\n\n"); 
    
       writeString_P("################\n"); 
       writeString_P("<<RP6     Base>>\n"); 
       writeString_P(" Servo - Test 1 \n"); 
       writeString_P("  Version 1.20  \n"); 
       writeString_P("################\n\n"); 
       mSleep(2500); 
    
       setLEDs(0b111111); 
       mSleep(500); 
    
       initSERVO(SERVO1 | SERVO2); 
    
       startStopwatch2(); 
        
       while(true)  
       { 
          if (getStopwatch2() > 48) { 
             servo1_position = pos; 
             servo2_position = pos; 
             pos++; 
             if (pos > RIGHT_TOUCH) {pos = 0;} 
             setStopwatch2(0); 
          } 
    
          task_SERVO(); 
          task_RP6System(); 
       } 
       return 0; 
    }
    nun werde ich den von Dir zuletzt geposteten code probieren…

    bis dann danke…
    gruß inka

  5. #45
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    folgenden code habe ich nun getestet:

    (servo angeschlossen an XBUS1 1,3,12)
    Code:
    /*
     * ****************************************************************************
     * RP6 ROBOT SYSTEM - ROBOT BASE EXAMPLES
     * ****************************************************************************
     * Example: Simple Servo Example
     * Author(s): D. Ottensmeyer
     * ****************************************************************************
     * Description:
     * This example shows how to use a standard servo with RP6Library.
     * There are much better solutions to do this job, but you may use
     * this simple program to make some first experiments with servos.
     * The servo is connected to PINC1 (SDA).
     *
     * ############################################################################
     * The Robot does NOT move in this example! You can simply put it on a table
     * next to your PC and you should connect it to the PC via the USB Interface!
     * ############################################################################
     * ****************************************************************************
     */
    
    /*****************************************************************************/
    // Includes:
    
    #include "RP6RobotBaseLib.h"    // The RP6 Robot Base Library.
                            // Always needs to be included!
    
    /*****************************************************************************/
    // Defines:
    
    // RP6 Base Servo Connection:
    #define SERVO_OUT         SDA         // PINC1  XBUS Pin 12
    
    // Servo movement limits (depending on servo type):
    #define LEFT_TOUCH         100         // Left servo touch
    #define RIGHT_TOUCH         50         // Right servo touch [max. 255]
    #define PULSE_ADJUST       4
    #define PULSE_REPETITION   19         // Pulse repetition frequency
    
    /*****************************************************************************/
    // Functions:
    
    /**
     * INIT SERVO
     *
     * Call this once before using the servo task.
     *
     */
    void initSERVO(void)
    {
       DDRC |= SERVO_OUT;               // SERVO_OUT -> OUTPUT
       PORTC &= ~SERVO_OUT;            // SERVO_OUT -> LO
       startStopwatch1();               // Needed for 20ms pulse repetition
    }
    
    /**
     * PULSE SERVO
     *
     * This is the servo pulse generation. This function
     * must be called every 20ms (pulse repetition).
     *
     * position = 0           : Left touch
     * position = RIGHT_TOUCH : Right touch
     *
     * ATTENTION: ! This function is BLOCKING all other activities for about 1   !
     *            ! to 2ms (depending on the value of position)!!!               !
     *            ! If you generate a pulse every 20ms 5-10% of the processor's  !
     *            ! calculating time is wasted by this kind of pulse generation. !
     *            ! If this is a problem for the rest of your program, you       !
     *            ! cannot use this method.                                      !
     *            ! You will need an interrupt-based solution instead.           !
     *
     */
    void pulseSERVO(uint8_t position)
    {
       cli();
    // Impulsstart, Ausgang auf High
       PORTC |= SERVO_OUT;
    // Der Gesamtimpuls besteht aus zwei Teilen, zuerst der Anteil für linke Position
       delayCycles(LEFT_TOUCH);
    // und dann der Abstand von Links zum gewünschten Drehwinkel in Einzelschritten*pos
       while (position--) {
          delayCycles(PULSE_ADJUST);
       }
    // Impuls ist gesendet, Ausgang wieder auf Low
       PORTC &= ~SERVO_OUT;            // SERVO_OUT -> LO (pulse end)
       sei();
    }
    
    
    /**
     * SERVO TASK
     *
     * This is the servo demo task.
     * The positioning demo shows the servo lever rapidly
     * moving to the left touch, then slowly moving to
     * the right touch and so on ...
     *
     */
    void task_SERVO(void)
    {static uint8_t pos;
    // wenn Stopwatch1 größer 19 ist sind 20ms seit dem letzten Impulsstart vergangen
       if (getStopwatch1() > PULSE_REPETITION) {
    //Impuls zum Servo senden
          pulseSERVO(pos);
    // ---------------------------------------------------------------------
    // Nach ca. 50ms wird der Impuls für einen neuen Winkel berechnet
          if (getStopwatch2() > 48) {
             pos++; // Impulslänge um einen Schritt erhöhen
             //pos+=3; // größere Schritte
    // Wenn der rechte Endpunkt erreicht ist, starten wir wieder links
             if (pos > RIGHT_TOUCH) {pos = 0;}
             setStopwatch2(0); // restart der 50ms-Verzögerung
          }
    // ---------------------------------------------------------------------
          setStopwatch1(0); // restart der 20ms-Impulswiederholung
       }
    }
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int main(void)
    {
       initRobotBase(); // Always call this first! The Processor will not work
                    // correctly otherwise.
    
       // ---------------------------------------
       // Write messages to the Serial Interface:
       writeString_P("\n\n   _______________________\n");
       writeString_P("   \\| RP6  ROBOT SYSTEM |/\n");
       writeString_P("    \\_-_-_-_-_-_-_-_-_-_/\n\n");
    
       writeString_P("################\n");
       writeString_P("<<RP6     Base>>\n");
       writeString_P(" Servo - Test 1 \n");
       writeString_P("  Version 1.00  \n");
       writeString_P("################\n\n");
       mSleep(2500);
    
       setLEDs(0b111111); // Turn all LEDs on
       mSleep(500);       // delay 500ms
       setLEDs(0b000000); // All LEDs off
    
       initSERVO();
       startStopwatch2();               // Used for the demo task
    
       while(true)
       {
          task_SERVO();
          task_RP6System();
       }
       return 0;
    }
    
    /******************************************************************************
     * Additional info
     * ****************************************************************************
     * Changelog:
     * - v. 1.0 (initial release) 03.10.2007 by D. Ottensmeyer
     *
     * ****************************************************************************
     */
    
    /*****************************************************************************/
    - beim einschalten lässt sich der servo beliebig durchdrehen (ist spannungsfrei), nur durch die mechanischen anschläge begrenzt, grüne LED1 blinkt
    - druck auf den taster: rechte position (oder die nächste?) wird gesucht, elektrischer "anschlag" gefunden, reset (alle 6 LED´s leuchten auf), servo steht unter spannung, grüne LED1 blinkt
    - beim nächsten druck auf den taster wieder reset, servo zuckt nach links, bleibt dann aber stehen

    der letzte punkt wiederholt sich bei jedem druck auf den taster
    gruß inka

  6. #46
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Ich weiß echt nicht ob ich lachen oder weinen soll:

    #define LEFT_TOUCH 100 // Left servo touch
    #define RIGHT_TOUCH 50 // Right servo touch [max. 255]

    Die 100 für LEFT_TOUCH sind definitiv viel zu wenig! Erhöhe jetzt mal diesen Wert in 100er-Schritten (200, 300, 400, 500) und teste jedesmal, was passiert.

    LEFT_TOUCH ist der Wert für die kleinste Impulslänge, LEFT_TOUCH+RIGHT_TOUCH ergibt dann den längsten Impuls.

    Ich will dich wirklich nicht unnötig verwirren, aber wir quälen uns hier durch Dirks Servoprogramme und verlieren dabei zunehmend das eigentliche Ziel aus den Augen: Wir wollen ein Servo ansteuern und müssen dazu einen Impuls erzeugen den das Servo als Drehwinkel interpretiert. Dieser Impuls sollte ca. 1,5ms lang sein und alle 20ms wiederholt werden:
    Code:
    // Servoansteuerung1: Wir erzeugen den Impuls mit sleep()         10.1.2010 mic
    // sleep(1) verzögert ca. 0,1ms
    // Servo an SDA (PC1) (XBUS Pin 12)
    
    #include "RP6RobotBaseLib.h"
    
    int main(void)
    {
    	initRobotBase();
    
    	DDRC |= SDA;
    	PORTC &= ~SDA;
    	
    	while(1)
    	{
    	   PORTC |= SDA;		// Impulsstart
    	   sleep(15);			// 1,5ms warten
    	   PORTC &= ~SDA; 	// Impulsende
    	   sleep(185);			// 18,5ms warten
    	}
    	return(0); // wird nie erreicht
    }
    Bevor das Programm gestartet wird, drehst du das Servo von Hand an einen Anschlag (links oder rechts ist egal, du kannst beides ausprobieren). Wenn dann das Programm gestartet ist, dreht das Servo auf eine Position (ca. Mitte) und bleibt dort. Wenn du nun mit der Hand versuchst das Servo zu verdrehen, spürst du deutlich einen Widerstand.

    Wenn das funktioniert ist dein Servo in Ordnung und der Anschluß richtig. Melde dich dann bitte wieder.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #47
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hin mic,

    also lachen find ich viel besser, der servo ist also ok...

    zu dem zu kleinen wert - ich hatte einfach schiss etwas kaputt zu machen, jetzt teste ich die 100er schritte

    danke, ich melde mich dann wieder...
    gruß inka

  8. #48
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Das "der servo ist also ok" interpretiere ich jetzt mal als "die Ansteuerung mit sleep() funktioniert". Dann wäre jetzt Schritt zwei an der Reihe:
    Code:
    // Servoansteuerung2: Wir erzeugen zwei Impulse im Wechsel            10.1.2010 mic
    // sleep(1) verzögert ca. 0,1ms, 50 Impulse dauern ca. 1 Sekunde
    // Servo an SDA (PC1) (XBUS Pin 12)
    
    #include "RP6RobotBaseLib.h"
    
    uint8_t c; // allgemeine 8-Bit-Variable (ein Char)
    
    int main(void)
    {
    	initRobotBase();
    
    	DDRC |= SDA;
    	PORTC &= ~SDA;
    	
    	while(1)
    	{
    	   for(c=0; c<50; c++)  // 50 Impulse senden, das dauert ca. 1 Sekunde
    		{
    			PORTC |= SDA;		// Impulsstart
    	   	sleep(12);			// 1,2ms warten = Servoposition 1
    	   	PORTC &= ~SDA; 	// Impulsende
    	   	sleep(190);			// 19ms warten
    		}
    
    	   for(c=0; c<50; c++)
    		{
    			PORTC |= SDA;
    	   	sleep(18);			// 1,8ms warten = Servoposition 2
    	   	PORTC &= ~SDA;
    	   	sleep(190);
    		}
    
    	}
    	return(0); // wird nie erreicht
    }
    Das Servo sollte damit im Wechsel zwei Positonen anfahren, dazu hat es jeweils eine Sekunde Zeit. Wenn du die Werte für die jeweiligen Positionen änderst um den maximalen Drehbereich auszutesten sollte das Servo in der jeweiligen Position kurz verweilen. Wenn es dies nicht macht, muss die Zeit (=maxwert für c in der Schleife) solange erhöht werden, bis die kurze Pause erkennbar ist.

    Wie gehts nun weiter? Entweder erhöhen wir die Auflösung der Positionen (und trennen uns damit von der sleep()-Ansteuerung) oder wir fahren die Positionen langsamer an oder wir steuern gleichzeitig ein zweites Servo an. Sag was du willst/brauchst.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #49
    Erfahrener Benutzer Roboter Experte Avatar von Virus
    Registriert seit
    15.09.2009
    Ort
    Duisburg
    Alter
    29
    Beiträge
    527
    Code:
    void Servo(uint8_t pos)
        {
    	 DDRC |= IO_PC5;
         PORTC |= IO_PC5;   // Impulsstart 
         sleep(pos);         // 1,5ms warten 
         PORTC &= ~IO_PC5; // Impulsende 
         sleep(185);         // 18,5ms warten 
    	}
    wenn ich dann in Servo(pos); werte zwischen 5 und 15 einsetze, dreht der servo gegen den Anschlag, immer gegen den Uhrzeigersinn,

    Edit: hab den Fehler selbst bemerkt, unter 10 ist voll sinnlos.

    aber auch nach Servo(20); oder Servo(30); dreht der Servo bis zum anschlag gegen den Uhrzeigersinn.
    Mit hochohmigen Grüßen
    Virus

    Es lebe der Digitalkäse !

  10. #50
    Hallo radbruch,

    bezugnehmend auf den Beitrag https://www.roboternetz.de/phpBB2/vi...=432541#432541 will ich fragen, welche Hardware Ausgänge denn mit dem Port-C angesteuert werden.
    Ich gebe zu, ich habe mich nich gänzlich in das Thema eingelesen, aber ich denke hierzu "fehlen" die Angaben zu dem Beitrag.

    Werden die auch am XBUS abgenommen oder sind das spezielle "Tricks"?

    Grüße,
    smk

Seite 5 von 11 ErsteErste ... 34567 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress