- LiFePO4 Speicher Test         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Projekt "Malender RP6" Programierhilfe gesucht !!!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2009
    Ort
    Stuttgert
    Alter
    28
    Beiträge
    14

    Projekt "Malender RP6" Programierhilfe gesucht !!!

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo alle zusammen,
    ich verfolgen nun schon seit einigen Tagen mit viel Interesse die threats zu Servos, bis ich mir schließlich gestern auch so ein Teil gekauft habe. Inzwischen habe ich schon einige Programme auf den RP6 geladen, und verändert. Während des Programmierens bin ich auf die Idee gekommen, einen „Malenden RP6“ zu bauen. Habe zwar schon an einigen Programmen gebastelt, aber das Servo tat nicht das was es sollte.

    Vielleicht kann ja einer von euch ein beispielprog posten?

    Meine ersten Ideen währen. Der RP6 soll sich um 90 Grad drehen, dann das Servo um ca. 40 Grad nach links drehen (Stift herablassen), dann 20cm nach vorne fahren und dann das Servo wieder um 40 Grad nach rechts drehen um den Stift wieder vom Papier heben.

    Wer hat eine Idee?

    Gruß Fabi

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    38
    Beiträge
    731
    Vielleicht postest du mal dein Beispielprogramm!
    Dann wird dir sicher jemand helfen/Tipps geben.

    Schwierig ist das ja nun wirklich nicht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2009
    Ort
    Stuttgert
    Alter
    28
    Beiträge
    14
    Hier ist mein Programm:

    Code:
    #include "RP6RobotBaseLib.h"    // The RP6 Robot Base Library. 
    // Defines: 
    #define SERVO_OUT         SDA         // PINC1  XBUS Pin 12 
    
    // Servo movement limits (depending on servo type): 
    #define LEFT_TOUCH   1//550         // Left servo touch 
    #define RIGHT_TOUCH   254         // Right servo touch [max. 255] 
    #define PULSE_ADJUST    4 
    #define PULSE_REPETITION   19         // Pulse repetition frequency 
    //Variablen 
    int richtung=0; //0=rechts; 1=links 
    int speed=5; 
    /*****************************************************************************/ 
    // 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 
    } 
    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(); 
    } 
    void task_SERVO(void) 
    {static uint8_t pos; 
       if (getStopwatch1() > PULSE_REPETITION) { // Pulse every ~20ms 
             if(richtung==0) pos=pos+speed; 
             else pos=pos-speed; 
             if (pos > RIGHT_TOUCH) {richtung = 1;} //nach links drechen 
             if (pos < LEFT_TOUCH) {richtung = 0;} //nach rechts drehen 
    
           pulseSERVO(pos); 
          setStopwatch1(0); 
       } 
    } 
    
    /*****************************************************************************/ 
    // Main function - The program starts here: 
    
    int main(void) 
    { 
       initRobotBase(); 
       powerON();//anschalten 
       startStopwatch1(); 
    
       setLEDs(0b111111); // Turn all LEDs on 
       mSleep(500);       // delay 500ms 
       setLEDs(0b000000); // All LEDs off 
    
       initSERVO(); 
        
       while(true)  
       { 
          task_SERVO();
    		rotate(60, RIGHT, 90, true);
    		task_SERVO();
    		move(70, FWD, DIST_MM(300), true);
    		task_SERVO();
          task_RP6System(); 
       } 
       return 0; 
    }
    [/code]

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    14.12.2009
    Ort
    Steinfurt
    Beiträge
    46
    Hi,
    was hälst du davon, deiner task_SERVO(void) Methode die Position des Servos als Parameter zu übergeben? Dadurch siehst du im Programm schneller, an welcher Stelle der Stift angehoben, bzw. abgesenkt wird und musst nicht die Aufrufe von task_SERVO() zählen.

    Grüße,
    Jan

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2009
    Ort
    Stuttgert
    Alter
    28
    Beiträge
    14
    Naja, ich habe den RP6 nun erst seit 3 Wochen und kann noch nicht wirklich programmieren !!
    Wäre nett, wenn du mir ein beispielprogramm posten könntest !!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2009
    Alter
    31
    Beiträge
    188
    versuchs mal mit diesem code hier.
    Code:
    #include "RP6ControlLib.h" 
    
    
    void servo_io5 (uint8_t imp)
    	{
        DDRC |= IO_PC5;
        PORTC |= IO_PC5;   
        sleep(imp);         
        PORTC &= ~IO_PC5;
        sleep(200-imp);       
    	} 
    
    
    
    
    int main(void)
    {
    	initRP6Control();
    	initLCD(); 
    	
    	
    	uint8_t i=0, x;
    	
    	i=0;
    	x=10;
    	
    	while(true)
    	{
    		while(i<10) //200ms
    		{
    		servo_io5(x);
    		i=i+1;
    		}
    	x=x+1;
    		if (x>=20)
    		{
    		x=10;
    		}
    		i=0;
    	}
    
    
    	
    	
    	
    	while(true) 
    	{
    		showScreenLCD("Endlosschleife", "");
    	}
    	return 0;
    }
    Ist die Grundkonstruktion (funktioniert auch) für die Steuerung eines Servos.

    Versuch einfach das ein Wenig umzuschreiben.

    PS:
    Schau in den Thread.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2009
    Ort
    Stuttgert
    Alter
    28
    Beiträge
    14
    Mit dem Programm kann ich leider nichts anfangen, da ich (noch) keine erweiterung gekauft habe. Werde mir aber wahrscheinlich in den nächsten tagen ein m32 bestellen.
    hast du vieleicht noch ein prog für die base ?

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2009
    Alter
    31
    Beiträge
    188
    nein ... aber ich kann das auf die Base umschreiben

    ich poste es dann wenn es für die Base passt

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2009
    Alter
    31
    Beiträge
    188
    Das wäre nun das selbe Programm allerdings für die Base.
    Das Servo hängt am SCL Pin (XBUS).

    Code:
    
     #include"RP6RobotBaseLib.h"
    
    
    void servo_scl (uint8_t imp)
       {
        DDRC |= SCL;
        PORTC |= SCL;   
        sleep(imp);         
        PORTC &= ~SCL;
        sleep(200-imp);       
       }
    
    
    
    int main(void)
    {
       initRobotBase();
     
       uint8_t i=0, x;
       
       i=0;
       x=10;
       
       while(true)
       {
          while(i<10) //200ms
          {
          servo_scl(x);
          i=i+1;
          }
       x=x+1;
          if (x>=20)
          {
          x=10;
          }
          i=0;
       }
    
    
       while(true)
       {
       writeString_P("\n Endlosschleife");
       }
       
       return 0;
    }

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Servo mit zwei Positionen für RP6-Base:
    https://www.roboternetz.de/phpBB2/vi...=479916#479916

    nein ... aber ich kann das auf die Base umschreiben

    ich poste es dann wenn es für die Base passt
    Lass es. Du hast es doch kaum geschafft, das Progamm aufs M32 zu Übertragen. Wenn du es jetzt wieder fürs Base umändern willst, kann es nur schlimmer werden.

    gruß

    mic

    [Edit]Zu spät, Glückwunsch
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen