- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: SRF08 TWI STATE IS: 0x20 und 0x48

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29

    SRF08 TWI STATE IS: 0x20 und 0x48

    Hallo

    Folgendes Problem.

    Ich habe einen SRF08 Ultraschallsensor an meinem RP6 gebaut und möchte ihn jetzt mit dem Beispielprog. I2C_MASTER_03 zum laufen bringen. Beim Einschalten blinkt die LED am SRF08(1x lang 1x kurz), daher denke ich das beim löten und dran bauen nix schief gegangen ist.

    Leider bekomme ich nur die beiden Errors TWI STATE IS 0x20 und 0x48 als Ausgabe.

    Als Adresse nutze ich die Default Adr SRF_ADR 0xE0

    Ich weiß leider nicht ob ich am Bsp.: Programm noch etwas ändern muss.
    Hier der Code

    Code:
    #include "RP6RobotBaseLib.h" 	
    #include "RP6I2CmasterTWI.h"  
    
    #define SRF_ADR  0xE0
    
    #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)
    {
    	initRobotBase();
    	
    	I2CTWI_initMaster(100);
    	I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
    	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
    
    	setLEDs(0b111111);
    	mSleep(500);	   
    	setLEDs(0b000000);
    	
    	powerON();
    
    	startStopwatch1();
    	
    	while(true)  
    	{
    		task_SRF();
    		task_I2CTWI();
    		task_RP6System();
    	}
    	return 0;
    }
    Hab in der Suche leider nich zu den beiden Errors gefunden.

    THX für Anregungen und Hilfen

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    PocketPc,

    die Bedeutung der TWI-Zustandsbytes kannst Du in der Dokumentation des ATmega nachlesen. Dort sind auch die Abläufe bei der Kommunikation über den TWI-Bus sehr gut geschrieben .

    TWI-Zustand 0x20 bedeutet: SLA+W has been transmitted; NOT ACK has been received
    TWI-Zustand 0x48 bedeutet: SLA+R has been transmitted; NOT ACK has been received

    D.h. Dein RP6 versucht mit dem SRF08 Verbindung aufzunehmen, indem er die TWI-Adresse des SRF08 über den Bus versendet. Als Reaktion erwartet er ein ACK-Bit vom SRF08. Das bekommt er aber nicht.

    Hast Du Pull-up-Widerstände an der SDA- und der SCL-Leitung?

    Ciao,

    mare_crisium

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    Hey mare_crisium

    Pull-up-Widerstände hab ich nicht mit dran.

    Ich hab mich jetzt einfach mal auf den Satz in der SRF08 Doku verlassen.

    "Normalerweise sind diese Widerstände im System bereits vorhanden."

    Ich hab den Sensor an die Anschlüsse der Experimentierplatine XBUS2 gelötet.

    Ich seh grad das keine Wiederstände auf meinem System bereits vorhanden sind :/

    Was brauch ich denn für Welche?

    THX

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Das ist nicht so genau. Es sollte zwischen 1k und 10k liegen. Ich verwende 10k Widerstände.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Hi,
    auf dem RP6 Mainboard sind schon passende 4K7 Pullups vorhanden.
    Trainmen

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    @TrainMen

    Wie schließe ich die denn an SDA und SDL an?

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Hi,
    die sind schon angeschlossen und haben die Bezeichnung R32/R33 im Schaltplan.
    Trainmen

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    @TrainMen

    Hab R32/R33 gefunden aber seh ich es richtig das ich SCL und SDA direckt auf der Platine anschließen muss um die beiden Wiederstände zu nutzen?

    Oder sind sie mit dem XBUS verbunden?

    edit:

    Ich hab jetzt 2 x 4k7 Wiederstände an meine Exper.platine gelötet und es geht immer noch nicht.

    Kann mir jemand seine Erfahrung mit dem SRF08 posten.

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    > blinkt die LED am SRF08(1x lang 1x kurz)

    Dann schau Dir mal die Doku nochmal genau an.
    0xE2 ist dann die Adresse.

    Ach ja und die Widerstände brauchst Du nicht. Die auf dem Mainboard reichen.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2010
    Beiträge
    29
    Hab es hin bekommen. War ein fehler beim Stecker. läuft jetzt mit Pull up Wiederständen on Board.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress