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

Thema: RP6 Ultraschallsensor SRF08

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.11.2012
    Beiträge
    52

    RP6 Ultraschallsensor SRF08

    Hallo,

    ich wollte gerne wissen wo und wie ich 3 SRF08 Ultraschallsensoren am RP6 oder an seinem Erweiterungsboard m32 anschließen kann.
    Außerdem habe ich noch keine Idee wie ich den Ultraschallsensor abfragen kann. Kann mir jemand vieleicht ein Codebeispiel senden.



    Danke
    Marian Otte

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Anschluß: An den I2C-Bus (SCL/SDA).
    Programmbeispiel: RP6Base_I2CMaster_03 (Beispiel wird mit dem RP6 mitgeliefert).
    Gruß
    Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.11.2012
    Beiträge
    52
    vielen dank

    Marian Otte

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    27.11.2012
    Beiträge
    52
    ach ja und außerdem möchte ich gerne noch wissen wie das programm aussieht wenn ich die Ultrschallsensoren an das Atmega 32 anschließen will?
    Der Rp6 läuft im Slave modus.
    Ich habe das beispielpgrogramm von der base für das Atmega 32 umgeschrieben aber irgenwie funktioniert das nicht.

    Danke Marian Otte

    Das sähe dann bei mir so aus:

    Code:
    #include "RP6ControlLib.h" 		
    #include "RP6I2CmasterTWI.h"
    #include "RP6Control_I2CMasterLib.h"  
    
    #define SRF_ADR  0xE6
    
    
    void changeSRFAddr(uint8_t old_addr, uint8_t new_addr)
    {
    	I2CTWI_transmit2Bytes(old_addr, 0, 0xA0);
    	I2CTWI_transmit2Bytes(old_addr, 0, 0xAA);
    	I2CTWI_transmit2Bytes(old_addr, 0, 0xA5);
    	I2CTWI_transmit2Bytes(old_addr, 0, new_addr);
    }
    
    
    #define MEASURE_US_LOW 	0
    #define MEASURE_US_HIGH 1
    
    uint16_t distance;
    
    void I2C_requestedDataReady(uint8_t dataRequestID)
    {
    	uint8_t messageBuf[8];
    	static uint8_t dist_tmp;
    	switch(dataRequestID)
    	{
    		case MEASURE_US_HIGH: 
    			I2CTWI_getReceivedData(messageBuf, 2);
    			dist_tmp = (messageBuf[0]);
    			I2CTWI_transmitByte(SRF_ADR, 3);
    			I2CTWI_requestDataFromDevice(SRF_ADR, MEASURE_US_LOW, 1);
    		break;
    		case MEASURE_US_LOW:
    			I2CTWI_getReceivedData(messageBuf, 2);
    			distance = messageBuf[0] + (dist_tmp << 8);
    		
    			writeString_P("Distance: ");
    			writeInteger(distance, DEC);
    			writeString_P(" cm | ");
    			uint16_t dist_count;
    			for(dist_count = distance; dist_count > 4; dist_count-=2)
    				writeChar('#');
    			writeChar('\n');
    		break;
    	}
    }
    
    void I2C_transmissionError(uint8_t errorState)
    {
    	writeString_P("\nI2C ERROR --> TWI STATE IS: 0x");
    	writeInteger(errorState, HEX);
    	writeChar('\n');
    }
    
    void task_SRF(void)
    {
    	static uint8_t measureInProgress = false;
    	if(!measureInProgress) 
    	{
    		if(TWI_operation == I2CTWI_NO_OPERATION)
    		{
    			I2CTWI_transmit2Bytes(SRF_ADR, 0, 81);
    			measureInProgress = true;
    			setStopwatch1(0);
    		}
    	}
    	else if(getStopwatch1() > 70)
    	{
    		I2CTWI_transmitByte(SRF_ADR, 2);
    		I2CTWI_requestDataFromDevice(SRF_ADR, MEASURE_US_HIGH, 1);
    		measureInProgress = false;
    		setStopwatch1(0);
    	}
    }
    
    int main(void)
    {
    	
    	
    	I2CTWI_initMaster(100);
    	I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
    	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
    
    	setLEDs(0b111111);
    	mSleep(500);	   
    	setLEDs(0b000000);
    	
    	
    
    	startStopwatch1();
    	
    	while(true)  
    	{
    		task_SRF();
    		task_I2CTWI();
    		
    	}
    	return 0;
    }
    ich bekomme das mit dem Code einfügen einfach nicht hin
    Geändert von Marian Otte (16.03.2013 um 21:03 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Dein Code dürfte auch nicht ohne Fehler kompilieren.

    Versuch mal, nicht den Code "einzufügen", sondern so wie er ist an die M32 anzupassen:
    - ControlLib anstelle der BaseLib einbinden
    - Im Main:
    -- ControlLib initialisieren
    -- setLEDs auf 4 Einsen/Nullen in der Klammer ändern: setLEDs(0b1111)
    -- powerON() entfernen
    -- task_RP6System() entfernen
    Gruß
    Dirk

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    27.11.2012
    Beiträge
    52
    habe ich doch und ich meinte den code in Das forum einfügen und nicht in den Roboter
    also sollte das programm geändert auch auf dem m32 funktionieren oder nicht?

    Danke Marian Otte

Ähnliche Themen

  1. RP6 Ultraschallsensor an Erweiterungsplatine
    Von Berghuhn im Forum Robby RP6
    Antworten: 10
    Letzter Beitrag: 15.12.2010, 22:54
  2. UltraschallSensor SRF08 - günstig kaufen
    Von boeser_bube im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 19.11.2008, 22:36
  3. Ultraschallsensor SRF08
    Von AR@HTL im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 16.04.2007, 16:46
  4. Einfallswinkel Ultraschallsensor SRF08 / SRF10 Stufen
    Von Phil54 im Forum Sensoren / Sensorik
    Antworten: 7
    Letzter Beitrag: 12.05.2005, 21:40
  5. srf08 ultraschallsensor setzt aus.
    Von pebisoft im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 25.11.2004, 18:45

Stichworte

Berechtigungen

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

Labornetzteil AliExpress