- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: Probleme mit SRF02

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    39
    Beiträge
    240

    Probleme mit SRF02

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    Ich hab mir einen Ultraschallsensor besorgt um einfach mal ein wenig damit zu experimentieren. Und auch mal was mit dem I2C Bus zu machen. Aber da fangen die Probleme schon an. Ich möchte momentan einfach nur abfragen ob ein Messergebniss vorliegt oder nicht. Wenn das Ergebniss der Messung also größer als 0 ist, dann sollen LED`s an einem Port angehen. Aber schon das funktioniert nicht. Ich denke dass ich irgend ein Problem mit den Startbedingungen für den Bus habe, weiß aber nicht genau was. Könntet ihr da mal drüber schaun?
    Ich arbeite mit der I2C Lib von Peter Fleury. Vielleicht muss ich da auch noch irgend etwas in der i2cmaster.h ändern. Aber ich weiß nicht was. Quarz hab ich ein 4 MHz drin, das ist eigenlich in der header Datei auch eingestellt.


    Code:
    #include <avr/io.h>
    #include <i2cmaster.h>
    
    
    #define SLAVE_ADRESSE 0xE0 ;
    
    
    int main(void)
    {
    i2c_init();
    DDRD = 0xff;
    PORTD = 0xff;
    return 0;
    }
    
    unsigned int read_cm(unsigned char address)
    {
    	unsigned char lowbyte,highbyte;
    	unsigned int distance;
    
    	i2c_start_wait(address+I2C_WRITE);
    	while (i2c_write(0));
    	while (i2c_write(81));
    	i2c_stop();
    
    	i2c_start_wait(address+I2C_WRITE);
    	while (i2c_write(2));
    	i2c_stop();
    
    	i2c_start_wait(address+I2C_READ);
    	highbyte = i2c_readAck();
    	lowbyte = i2c_readNak();
    	distance = (highbyte+256)+lowbyte;
    	i2c_stop();
    
    	if(distance > 0)
    	{
    		PORTD = 0x00;
    	}
    
    	return distance;
    
    }

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    07.12.2004
    Ort
    Leverkusen
    Alter
    44
    Beiträge
    95

    Hi

    Hi,

    ich hatte das Problem auch mal und habs so gelöst, dass ich die
    twimaster.h genommen habe. Ich arbeite mit dem RN-Control Board. Da
    ist ein I2C Anschluss und man kann direkt über die Hardware senden/empfangen.

    Hoffe ich konnte dir helfen. Wenn alles nichts bringt meld dich nochmal und ich schau in meinen alten Quellcodes nach.

    P.S.
    Ich hab gestern ne Gruppe "Roboternetz" im StudiVZ gegründet. Wenn du möchtest kannst du gerne eintreten bzw jeder der das liest und hier Mitglied ist.

    Viele Grüsse
    Thomas

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.12.2004
    Ort
    Leverkusen
    Alter
    44
    Beiträge
    95
    Hi,

    hab mir grad mal deinen Code angesehen und da fällt mir auf, dass du
    read_cm(SLAVEADRESSE) gar nicht in der Main Methode aufrufst.

    Viele Grüsse
    Thomas

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    07.12.2004
    Ort
    Leverkusen
    Alter
    44
    Beiträge
    95
    Und nochwas,

    distance = (highbyte+256)+lowbyte;

    musst du so schreiben

    distance = (highbyte*256)+lowbyte;

    weil du willst ja 16bit darstellen und wenn du *256 machst dann ist das wie
    *2*2*2*2*2*2*2*2 und das ist quasi ein linksverschieben

    zb

    0000000000000000 distance
    10101101 highbyte
    10001111 lowbyte

    daraus soll 1010110110001111 werden

    distance = (highbyte*256) macht das
    1010110100000000

    distance = (highbyte*256)+lowbyte macht demnach das
    1010110110001111


    Hättest du +256 gemacht dann käm was anderes raus hab keine lust zu rechnen.

    Ich weiss das du den Fehler nur kopiert hast. Steht so in P.Fleury Lib drin.

    Viele Grüsse
    Thomas

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,
    und noch ein Tipp,
    nicht vergessen nach dem starten der Messung ist der SRF02 für mind. 65ms nicht ereichbar, erst danach kann der Wert ausgelesen werden !

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    39
    Beiträge
    240

    Was noch wichtig wäre

    So danke erstmal für eure Hilfe! Wäre vielleicht noch wichtig dass ich den AtMega8 verwende. Hab den SRF 02 dann direkt mit SDA und SCL verbunden mit 4k7 Pull up`s natürlich.
    Werde eure Tips dann heut Abend mal ausprobieren.

    Grüße!

    Bean

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    39
    Beiträge
    240

    einiges geändert...

    So habe heut Abend noch einiges geändert Funzt aber leider immer noch nicht...
    Ich hab grad keinen Plan mehr... werd jetzt dann aber auch erstmal ne Nacht drüber schlafen und morgen dann wieder weiter machen...

    Code:
    #include <avr/io.h>
    #include <i2cmaster.h>
    #include <avr/delay.h>
    
    #define SLAVE_ADRESSE 0xE0 ;
    
    
    unsigned int read_cm(unsigned char address);
    
    int main(void)
    {
    
    int distance;
    
    i2c_init();
    DDRD = 0xff;
    PORTD = 0xff;
    read_cm(SLAVE_ADRESSE);
    distance = read_cm(SLAVE_ADRESSE);
    
    return 0;
    }
    
    unsigned int read_cm(unsigned char address)
    {
    	unsigned char lowbyte,highbyte;
    	unsigned int distance;
    
    	i2c_start_wait(address+I2C_WRITE);
    	while (i2c_write(0));
    	while (i2c_write(81));
    	i2c_stop();
    
    	i2c_start_wait(address+I2C_WRITE);
    	while (i2c_write(2));
    	i2c_stop();
    
    	_delay_ms(65);
    
    	i2c_start_wait(address+I2C_READ);
    	highbyte = i2c_readAck();
    	lowbyte = i2c_readNak();
    	distance = (highbyte*256)+lowbyte;
    	i2c_stop();
    
    	if(distance > 0)
    	{
    		PORTD = 0x00;
    	}
    
    	return distance;
    
    }
    Grüße!!

    Bean

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    39
    Beiträge
    240

    Messung funktioniert jetzt

    Hallo

    Also das ganze funktioniert jetzt. Hat wohl nur an einem ";" nach der define Anweisung gelegen und daran dass ich die Taktrate (4Mhz) nicht im Hauptprogramm eingefügt/definiert habe. Dachte das reicht wenn ich es in der headerdatei mache.
    Hier mal der Code:
    Code:
    #include <avr/io.h>
    #include <i2cmaster.h>
    #include <avr/delay.h>
    
    #define SLAVE_ADRESSE 0xE0
    #define F_CPU 4000000UL
    
    
    unsigned int read_cm(unsigned char address);
    
    int main(void)
    {
    
    int distance;
    
    i2c_init();
    DDRD = 0xff;
    PORTD = 0xff;
    read_cm(SLAVE_ADRESSE);
    distance = read_cm(SLAVE_ADRESSE);
    
    return 0;
    }
    
    unsigned int read_cm(unsigned char address)
    {
    	unsigned char lowbyte,highbyte;
    	unsigned int distance;
    
    	i2c_start_wait(address+I2C_WRITE);
    	while (i2c_write(0));
    	while (i2c_write(81));
    	i2c_stop();
    
    	i2c_start_wait(address+I2C_WRITE);
    	while (i2c_write(2));
    	i2c_stop();
    
    	_delay_ms(65);
    
    	i2c_start_wait(address+I2C_READ);
    	highbyte = i2c_readAck();
    	lowbyte = i2c_readNak();
    	distance = (highbyte*256)+lowbyte;
    	i2c_stop();
    
    	if(distance > 150)
    	{
    		PORTD = 0x00;
    	}
    
    	return distance;
    
    }
    Jetzt hätte ich noch eine Frage zum SRF02: Der Sensor macht bei mir jetzt alle 65ms eine Messung. Blinkt da die LED am Sensor? Bzw leuchtet die während einer Messung? Ich glaube schon oder?

    Danke!

    Grüße!!

    Bean

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2007
    Ort
    Mainz
    Beiträge
    23
    Blinkt bei meinem Modul auch bei jeder Mesung, also entweder Alles i.O. oder beide einen Fehler (hoffe doch Ersteres )
    LG,
    mefiX

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    39
    Beiträge
    240
    Hallo

    Ich hab mal in der englischen Doku zu dem Sensor nachgelesen. Da steht drin dass die LED mit jeder Messung aufleuchtet. Also alles im grünen ähhhh roten Bereich.... Stimmt schon alles so.....

    Grüße!!

    Bean

Berechtigungen

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

Labornetzteil AliExpress