- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: SFR05 an RP6Base

  1. #1
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19

    SFR05 an RP6Base

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe seit Weihnachten einen RP6 und mir vor kurzem den Ultraschall-Sensor SFR05 gekauft. Link: http://www.nodna.com/product_info.ph...cefd413990031d
    Ich habe die Kabel so angebracht, das er in Mode2 arbeitet, was bedeutet, das Auslöse-Impuls und Echo über einen Port ausgelöst bzw. empfangen werden können. Nun hab ich aber als Anfänger nicht wirklich viel Ahnung, wie ich das Teil programmieren soll. Ich kann zwar den Impuls auslösen, weiß aber nicht, wie ich nun die Länge des zurückgesendeten Signals messen kann

    Hier erstmal der Quelltext:
    Code:
    //Ultraschallsensor ansteuern und auswerten
    
    #include "RP6RobotBaseLib.h"
    
    int main(void)
    {
    	initRobotBase();
    	
    	powerON();
    	
    	setStopwatch1(0);
    	
    	while(true)
    	{
    
    		DDRC|=(SCL);							//SCL als Ausgang definieren
    		PORTC&=~SCL;							//SCL auf low setzten			
    		setLEDs(0b100100);	
    		startStopwatch1();
    		while(getStopwatch1()<11) PORTC|=SCL;	//für 10ms SCL auf high setzten
    		PORTC&=~SCL;							//SCL auf low setzten
    		setStopwatch1(0);
    		DDRC &=~(SCL);							//SCL als Eingang definieren???
    		
    		if(PORTC|=SCL) 							//Wenn SCL einen Impuls sendet und Stopwatch1 = 0, dann starte Stopwatch1
    		{
    			setLEDs(0b010010);
    			if(getStopwatch1()==0) startStopwatch1();
    			
    		}
    		
    		if(PORTC&=~SCL)							//Wenn das Signal zuende ist??,dann stoppe Stopwatch1
    		{
    			stopStopwatch1();
    		}
    				
    		if(getStopwatch1()>0)					//Wenn Stopwatch1 > 0 dann setzte alle LEDs auf on
    		{
    			setLEDs(0b111111); 
    			setStopwatch1(0);
    		}
    		mSleep(1000);		
    	}
    	
    	return 0;
    }
    Irgendwie ist aber Stopwatch1 nie größer als Null, was ja bedeuten würde, dass kein Signal empfangen wurde.
    Es wäre schön, wenn mir jemand helfen könnte, da ich es irgendwie nicht gebacken bekomme

    Mfg
    BeWe

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ein paar Sachen, die mir auffallen:

    1. Der Impuls sollte ~10 µs und nicht ~10 ms sein.

    2. Die if Abfragen gehen nicht mit PORTC, sondern mit PINC.

    3. Warum kann die Stopwatch1 nur gestartet werden, wenn sie 0 ist?

    4. Mit der 1ms Stopwatch wird man nicht sehr genau messen können. Vielleicht solltest du als Zähler den 100µs timer nehmen.

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    So,
    erstmal danke für die schnelle Antwort!!!

    Mhmm... mit dem Impuls muss ich mich irgendwie verlesen haben
    Die Stoppuhr hab ich jetzt auch so eingestellt, dass sie nicht nur startet wenn sie null ist und bei den if-Abfragen hab ich PORTC durch PINC ersetzt. Aber trotzdem wird die Stoppuhr nie größer als null, obwohl im Datenblatt steht, dass der Impuls bis zu 25ms lang sein kann, was die Stoppuhr ja erfassen müsste. Und wie kann ich eigentlich den 100µs-Timer aufrufen?

    Gruß
    BeWe

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Aber trotzdem wird die Stoppuhr nie größer als null, obwohl im Datenblatt steht, dass der Impuls bis zu 25ms lang sein kann,...
    Du must dir auch noch mal deine Programmlogik genau ansehen:

    1. An der Stelle, wo du mit "if (PINC & SCL)" auf die steigende Flanke des Impulses testest, müßtest du eigentlich auf diese Flanke WARTEN. Schreib das mal so um.

    2. Wenn die steigende Flanke dann gekommen ist, müßtest du die Stopwatch starten.

    3. Dann must du wieder WARTEN, bis die fallende Flanke des Impulses (SCL wird low: "(!(PINC & SCL))" ) kommt.

    4. Danach kannst du dann den Stopwatch Wert auswerten.

    5. Erst danach geht es dann nach einer PAUSE an den Anfang deiner while(true) Schleife mit einem neuen Impuls von 10µs.

    Viel Erfolg!

    Gruß Dirk

  5. #5
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    ES FUNKTIONIERT!!!

    Nach einigem probieren und befolgen von Dirks Tipps hab ich das Teil nun endlich zum laufen gebracht. Nochmal vielen, vielen Dank \/

    EDIT: Wen es interessiert, ich hab mal ein kleines Video mit dem Ultraschallsensor erstellt:




    Gruß BeWe
    Geändert von Frank (17.03.2011 um 13:51 Uhr)

  6. #6
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Hi!

    Um den Ultraschallsensor nach links, rechts, oben und unten bewegen zu können, habe ich eine Servohalterung montiert. Nun wollte ich das Nick-Servo auch verwenden. Zum schonen der RP6-Akkus habe ich einen Empfängerakku aus dem RC-Bereich durch ein Y-Kabel mit den beiden Servos verbunden. Nun ist es aber so, dass sich nur dass Nick-Servo bewegt und das Gier-Servo gar nichts macht. Wenn ich nur dass Gier-Servo mit dem Roboterakkus verbinde und das Nick-Servo mit dem Empfängerakku, dann funktioniert das Gier-Servo und das Nick-Servo geht auf Anschlag und macht nicht was es soll. Andersrum macht nur das Nick-Servo etwas und das Gier-Servo macht gar nichts.

    Weiß jemand, was ich da machen kann?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @BeWe:
    ... habe ich einen Empfängerakku aus dem RC-Bereich durch ein Y-Kabel mit den beiden Servos verbunden.
    Du hast aber schon Masse (GND, Minuspol) des RC-Empfängerakkus auch mit GND des RP6 verbunden?

    Wenn ja: Wie steuerst du die Servos denn an?
    Gruß
    Dirk

  8. #8
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Mit GND habe ich den Empfängerakku nicht verbunden. Wenn ich das mache, leuchtet SL2 und die Servos machen nix. Außerdem hätten die Servos dann ja keinen Massenanschluss.
    Angesteuert werden diese momentan über einen IO-Ports und extInt mit einem Programm, was ich hier im Forum gefunden habe.

    EDIT: Klappt nun doch, ich hatte nicht beachtet, dass die Servos ja auch an GND angeschlossen sein müssen. Ich dachte, der Minus-Pol des Akkus würde auch gehen
    So, dann kann ich meinen Robby das Kopfnicken beibringen
    Geändert von BeWe (16.03.2011 um 19:46 Uhr)

  9. #9
    Neuer Benutzer Öfters hier Avatar von BeWe
    Registriert seit
    01.12.2010
    Ort
    Leipzig
    Beiträge
    19
    Hmmm...
    So ganz einfach scheint es dann doch nicht zu gehen
    Ich hab jetzt GND von Servos und seperaten Akku mit GND des Robbys verbunden. Wenn ich das Programm ausführe, bricht es dann irgendwann ab und der Roboter fährt so weiter, wie er es gerade getan hat.

    Kann es sein, dass der Roboter durch den zusätzlichen Akku irgendwie überlastet wird??
    Geändert von BeWe (17.03.2011 um 16:24 Uhr)

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Und was will der Künstler uns damit sagen?
    Dann wird da wohl ein Fehler im Programm sein.... *rolleyes
    LG Rolf
    Sind Sie auch ambivalent?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad