-         
Ergebnis 1 bis 1 von 1

Thema: SFR10 Ultraschallsensor high_bit Propleme

  1. #1
    Benutzer Stammmitglied Avatar von Jackeder
    Registriert seit
    08.02.2015
    Ort
    Chemnitz, Germany
    Beiträge
    52

    SFR10 Ultraschallsensor high_bit Propleme

    Anzeige

    Hallo zusammen,

    ich versuche mich schon seit paar Tagen das SFR10 Modul zum laufen zu bekommen, aber mehr wie 45cm will das kleine WUnder nicht messen. Ich habe bereits danach gesucht, auch einiges dazu gefunden, jedoch blieb der Erfolg aus.

    Hier mal mein Code

    Code:
    /************************************
     * enfernung messen mit einem SFR10 * 
     * Ultraschallsensor über I²C am    *
     *          Atmega 8                *
     *                                  *
     * Created: 30.04.2017 19:00:41     *
     *  Author: Hendrik                 *
     ************************************/ 
    
    /***          !!! Werte im netz gefunden !!!                     *** 
     * Verstätkung auf 5 setzen                                        *
     * Reichweite auf 140 = 6m / 93 = 4m                               *
     * Standart ist Verstärkung 16 und REichweite 255 beim einschalten *
     * !!! Werte müssen bei jedem einschalten neu gesetzt werden !!!   */ 
    
    
    #define F_CPU 16000000UL			// extern Quarz 16MHz
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdlib.h>
    
    #include "I2C_display.h"
    #include "I2CMaster.h"
    
    #define SFR10 0xE0			// Slaveadresse des SFR10  "0xE0"  (Lieferzustand)
    
    // *** Variablen ***
    int messung = 0;
    int version = 0;
    int messung_high = 0;
    int messung_low = 0;
    char str[8];
    
    /*void SRF10_config (void)
    {
    	i2c_start(SFR10);		// I2C Salveadresse übergeben 
    	i2c_write(1);			// Register 1 auswählen (Verstärkung)
    	i2c_write(5);			// Max Verstärkung 80
    	i2c_write(93);			// Reichweite auf 4m 
    	
    	i2c_rep_start(SFR10);	// I2C Slaveadresse übergeben ( Schreibzugriff )
    	i2c_write(0);			// Register 0 auswählen 
    	i2c_write(0x51);		// Messung starten in cm
    	i2c_stop();
    }*/
    
    void versSFR10 (void)
    {
    	i2c_start(SFR10);		// I2C Slaveadresse übergeben ( Schreibzugriff )
    	i2c_write(0);			// Register 0 wählen ( Befehls_Register )
    	i2c_start(SFR10+1);					// I2C Slaveadresse übergeben ( +1 = Lesezugriff )
    	version = i2c_readNak();		// Register 0  lesen
    	i2c_stop();
    }
    void readSFR10 (void)
    {
    	i2c_start(SFR10);		// I2C Slaveadresse übergeben ( Schreibzugriff )
    	i2c_write(0);			// Register 0 wählen ( Befehls_Register )
    	i2c_write(0x51);		// Messung starten in cm
    	i2c_stop();
    	
    	_delay_ms(100);			// 65ms Wartezeit bis Messung fertig 
    	
    	i2c_start(SFR10);					// I2C Slaveadresse übergeben
    	i2c_write(2);						// zum auswählen von Register 2 ( Reichweiten
    	i2c_start(SFR10+1);					// I2C Slaveadresse übergeben ( +1 = Lesezugriff ) 
    	messung_high = i2c_readAck();		// Register 2 (high) lesen
    	messung_low = i2c_readNak();		// Register 3 (low)  lesen und stop
    	messung = (( messung_high << 8) + messung_low);
    	i2c_stop();
    }
    
    int main(void)   
    {
    	i2c_init();				// startet   I2C BUS
    	LCD_I2C_Init();			// aktiviert I2C LCD
    	I2C_ClearDisplay();
    	
    	//  *** DisplayAnzeigen ***
    	I2C_SetDisplayCursor(1,0);
    	I2C_WriteDisplayString("SFR10 Ultraschall");
    	I2C_SetDisplayCursor(2,0);
    	I2C_WriteDisplayString("Version:");
    	I2C_SetDisplayCursor(3,0);
    	I2C_WriteDisplayString("Entfernung:");
    	I2C_SetDisplayCursor(3,18);
    	I2C_WriteDisplayString("cm");
    	_delay_ms(1000);				// Wartezeit 1sek test
        while(1)
        {
    		readSFR10();
    		_delay_ms(500);					// Wartezeit 500ms ca 2 Messungen / Sek
    		versSFR10();
    		I2C_SetDisplayCursor(2,8);
    		dtostrf(version,5,0,str);
    		I2C_WriteDisplayString(str);
    		
    		I2C_SetDisplayCursor(3,12);
    		dtostrf(messung,5,0,str);
    		I2C_WriteDisplayString(str);
    		
    		I2C_SetDisplayCursor(4,0);
    		dtostrf(messung_high,5,0,str);
    		I2C_WriteDisplayString(str);
    		
    		I2C_SetDisplayCursor(4,10);
    		dtostrf(messung_low,5,0,str);
    		I2C_WriteDisplayString(str);
    		
        }
    }
    Messung_high und Messung_low lass ich mir nur zur Überprüfung auf LCD anzeigen. Das Proplem ist das ich beim High_bit immer nur 0 angezeigt bekomme, was mir auch der LOGIC Analyzer anzeigt.
    hoffe man kann das erkennen auf dem Foto.
    Klicke auf die Grafik für eine größere Ansicht

Name:	I2cUltraschall_bin.jpg
Hits:	12
Größe:	34,7 KB
ID:	32592
    Was ich noch nicht probiert habe, ist Verstärkung und Reichweite einzustellen, aber sollte ja auch mit Standartwerte eigeintlich funktionieren .
    Ich hoffe ihr könnt mir weiter helfen und mir auf die Sprünge helfen.

    LG Hendrik
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken I2cUltraschall.jpg  

Ähnliche Themen

  1. Propleme bei mehreren ADC Eingänge
    Von Jackeder im Forum Sensoren / Sensorik
    Antworten: 17
    Letzter Beitrag: 23.04.2015, 21:32
  2. Ultraschallsensor
    Von RoboNull im Forum Robby RP6
    Antworten: 64
    Letzter Beitrag: 08.07.2011, 11:22
  3. SFR10 an Tiny44
    Von slavezero im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 21.08.2010, 17:28
  4. Propleme beim I2C-Bus Aufbau
    Von Bluesky im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 14.02.2007, 14:11
  5. Ultraschallsensor
    Von Matthias_W im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 01.04.2006, 19:22

Berechtigungen

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