- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 18

Thema: SRF05 mit Servo auf RP6 Control M32

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2011
    Ort
    Hechingen
    Alter
    51
    Beiträge
    20
    Hallo inka,

    danke für den Hinweis. Über das Thema war ich schon mal gestolpert, hatte es aber vor lauter Suche im Internet wieder aus den Augen verloren. Werde mir das Thema genauer zu Gemüte führen. Beim Überfliegen ist mir eine Sache wieder in den Sinn gekommen: Die Timer 0 und 2 sind auf der RP6 Control bereits vom System belegt. Kann ich die M32 überhaupt mit sinnvollem Aufwand für mein Vorhaben (US mit Servosteuerung) verwenden oder brauche ich ein anderes Board mit 2 freien Timern?

    Ich habe mal den Timer0 gegen Timer2 getauscht, dann machen Servo und Sensor was sie wollen. Diese Timer sind eine Wissenschaft für sich.

    Der Stand ist jetzt, dass Servo und US gemeinsam Harmonieren: links messen->mitte messen->rechts messen->mitte messen->.... und die Mess-Ergebnisse plausibel sind....ABER: der Servo ist wesentlich träger als ohne US und wenn ich die Hinweise im Internet richtig verstanden habe, dann müsste ich den Timer für die Messung direkt nach dem Ausschalten des Ausgangspins starten...

    Werde dranbleiben.

    Grüsse, Jordi

  2. #2
    Unregistriert
    Gast
    Das hier:
    https://www.roboternetz.de/community...3%BCr-8-Servos

    kennst Du vermutlich schon. Da ist auch gut erklärt wies funktioniert.


    Du könntest da auch den Stopwatch Timer für umbauen (die ISR in der Lib!), dass er sowohl Stopwatches als auch den einen Servo ansteuert.
    Dann wäre Timer 1 frei für den SRF. Oder die Timer tauschen wenn die Hardware PWM Pins sonst auf Pins liegen die nicht frei sind.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2011
    Ort
    Hechingen
    Alter
    51
    Beiträge
    20
    Hallo,

    vielen Dank für Eure Hilfe. Jetzt funktioniert alles wie es soll. Ich habe die Stopwatch- und die Servo-Lib aus diesem Forum und Code für den Sensor aus dem holländischen Arexx-Forum verwendet und angepasst. Als nächstes werde ich mich mit der Kommunikation zwischen RP6 Base und RP6 Control befassen.


    Hier ist der Code:

    Code:
    #include "./RP6Lib/RP6control/RP6ControlServoLib.h"
    #include "./RP6Lib/RP6common/RP6Stopwatch0Lib.h"
    #include "RP6ControlUltrasonic.h"
    
    volatile uint16_t pos = 0;
    
    //ULTRASONIC FUNCTIONS #######################################
    
    void task_US_SW()
    {
    	uint16_t range;
    	//MEASURING
    	DDRC |= IO_PC3;						// IO_PC3 Ausgang
    	PORTC |= (1<<PORTC3);				// IO_PC3 high  IO_PC3;
    	_delay_us(10);						// 10uS warten
    	PORTC &= (0<<PORTC3);				// IO_PC3 low  ~IO_PC3;
    		
    	DDRC &= ~IO_PC3;					// IO_PC3 Eingang
    	while(!(PINC & IO_PC3));			// Warten bis steigende Flanke an IO_PC3
    	setStopwatch01(0);
    	while(PINC & IO_PC3);				// Warten bis fallende Flanke an IO_PC3 
    	range = getStopwatch01() * 1.67;	// Wert der Stoppuhr * 1,67 = Abstand in cm.
    			
    	displayData(range);
    	//MEASURING END	
    }
    
    
    void displayData(uint16_t r)
    {
    	
    	writeString_P("Abstand:");
    	writeInteger(r, DEC);
    	writeString_P(" cm\n");
    	
    	sound(170,40,0);
    }
    
    //END OF ULTRASONIC FUNCTIONS ################################
    
    int main(void)
    {  
    	initRP6Control();
    
    	setLEDs(0b111111);
    	mSleep(500);
    	setLEDs(0b000000);
    
    	initSERVO(SERVO1);
    
    	startStopwatch2();
    	startStopwatch01();
    	
    	while(true)  
    	{
    		if (getStopwatch2() > 2000) {	// Alle 2000ms Servo drehen
    			
    			if (pos == 0) {
    				servo1_position = 0;
    			}
    			if (pos == 1) {
    				servo1_position = MIDDLE_POSITION;
    			}
    			if (pos == 2) {
    				servo1_position = RIGHT_TOUCH;
    			}
    			if (pos == 3) {
    				servo1_position = MIDDLE_POSITION;
    			}
    			
    			pos++;
    			if (pos > 3) {pos = 0;}
    			
    			setStopwatch2(0);
    			
    			task_US_SW();	
    		}
    		task_SERVO();		
    		
    		mSleep(3);
    		
    	}
    	return 0;
    }
    Und hier sind meine Einstellungen für den Servo aus der RP6ControlServoLib.h:
    Code:
    #define LEFT_TOUCH			56
    #define RIGHT_TOUCH			42
    #define MIDDLE_POSITION		(RIGHT_TOUCH / 2)
    #define PULSE_REPETITION           17			
    #define F_TIMER1			50000
    Geändert von Jordi (31.05.2015 um 08:28 Uhr) Grund: code-tags eingefügt

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

    danke für die tipps, nicht alles was ich hier poste ist bis zum letzten detail durchdacht und fertig, das manches doof aussieht mag ja sein, es wäre aber für mich hilfreicher gewesen auf meine frage einzugehen...

    trotzdem danke...
    gruß inka

Ähnliche Themen

  1. Verkaufe RP 6 Roboter mit RP6 Control M32 und allerhand Zubehör
    Von andij84 im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 5
    Letzter Beitrag: 17.01.2014, 18:16
  2. Antworten: 5
    Letzter Beitrag: 15.03.2012, 17:03
  3. LCD am RP6 Control M32
    Von tobuc0 im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 02.10.2009, 20:34
  4. Antworten: 5
    Letzter Beitrag: 05.03.2008, 17:46
  5. RP6 CONTROL M32 - stand alone benutzen? also ohne RP6
    Von dirtyklaus im Forum Robby RP6
    Antworten: 6
    Letzter Beitrag: 16.01.2008, 21:56

Stichworte

Berechtigungen

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

12V Akku bauen