- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: SRF10 Sensor mit Peter Fleurys I2c Bibliothek auslesen

  1. #1

    SRF10 Sensor mit Peter Fleurys I2c Bibliothek auslesen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Ich habe einen SRF10 an einen ATMEGA32 angeschlossen und möchte den Sensor nun mit Hilfe von Peter Fleurys I2C Bibliothek auslesen.
    Mir ist aber nicht ganz klar wie man das macht. Bei normalen Datenblättern stehen nämlich Diagramme drinn auf denen zu sehen ist, wie man den entsprechenden Baustein über I2C zu handhaben hat. Wie kann ich auf die Internen register des SRF10 zugreifen ?

    hat vielleicht jemand einen Beispiel code in c ?

    Danke für eure Hilfe.

    Gruß Analog

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    61
    Beiträge
    199
    Hier ein Beispielcode für den SRF02. SRF10 ist fast gleich. Das erste Register für die I2C Operation wird z.B. durch ein i2c_write(0x02) {=Auswahl Register 0x02} ausgewählt. Danach kann auf dieses und alle folgenden Register zugegriffen werden.


    #include <inttypes.h>
    #include <avr/eeprom.h>
    #include <avr/interrupt.h>
    #include <avr/sleep.h>
    #include <math.h>

    #include <avr/io.h>
    #include "i2cmaster.h"
    #define SRF 0xE0
    #define F_CPU 8000000UL
    #include <util/delay.h>
    #define BAUD 9600L
    #include <avr/iom8515.h>
    #include <avr/sfr_defs.h>
    #define SDA 0 // SDA Port E, Pin 0
    #define SCL 1 // SCL Port E, Pin 1
    #define SDA_PORT PORTE // SDA Port E
    #define SCL_PORT PORTE // SCL Port E

    unsigned int distance EEMEM; // reserve storage space in EEPROM

    // USART_INIT--
    void initusart(void) // Hauptfunktion
    {
    unsigned char x; //Hilfsvariable
    // #idef UBRRL //USART-Schnittstelle
    UBRRL = (F_CPU / (16L*BAUD)) -1; //Baudrate mit TAKT und Baud
    UCSRB |= (1<<TXEN) | (1<<RXEN); //Sender und Empfänger ein
    UCSRC |= (1<< URSEL) | (1<< UCSZ1) | (1<<UCSZ0); //ansync 8bit
    x = UDR;
    }

    void sendeusart(int x)
    {
    while (!(UCSRA & (1<<UDRE))); // warten bis Senden moeglich

    UDR = x;
    }

    int main(void)
    {
    i2c_init();
    initusart();
    sendeusart(distance);
    unsigned char Lbyte,Hbyte;

    DDRE = 0xff;
    PORTE = 0xff;

    while(1)
    {
    i2c_init(); muss ein sonst blinkt der sensor nicht

    i2c_start(SRF);
    i2c_write(0x00);
    i2c_write(0x51);
    i2c_stop();

    _delay_ms(75);

    i2c_start(SRF);
    i2c_write(0x02);
    i2c_stop();

    i2c_start(0xE1);

    Hbyte=i2c_readAck();
    Lbyte=i2c_readNak();
    i2c_stop();
    distance=(Hbyte*256)+Lbyte;

    eeprom_write_word(&distance,distance); //save to EEPROM

    sendeusart(distance);
    }
    }

    Gruß, uffi.

  3. #3
    danke uffie

    ist echt nett das es hier Leute gibt die einem mit Rat und Tat zur seite stehen.
    Ich werde das ganze heute abend mal ausprobieren.

    Danke schön

    Gruß Analog

  4. #4
    hat es funktioniert bei dir funktioniert?
    Ich habe das Problem, dass mein Ultraschall zwar angesprochen wird, aber
    er blinkt viel, viel zu schnell, wenn ich mit beiden Fingern den Ultraschall abdecke blinkt er mit der richtigen Geschwindigkeit beim Lesen...WEiß vielleicht jemand woran das liegen könnte. Anbei ist mein Quellcode



    Gruß Andy
    Angehängte Dateien Angehängte Dateien

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    61
    Beiträge
    199
    In diesem Program hast Du einen Fehler beim Lesen drin:

    • i2c_start_wait(0xE4);
      //_delay_ms(65);
      Hbyte=i2c_readAck();
      Lbyte=i2c_readNak();
      i2c_stop();


    Richtig muss es heißen:
    • i2c_start_wait(0xE4 + 0x01);
      //_delay_ms(65);
      Hbyte=i2c_readAck();
      Lbyte=i2c_readNak();
      i2c_stop();


    Wahrscheinlich ist auch die Addresse mit 0xE4 falsch, da der Sensor default-mäßig auf 0xE0 eingestellt ist.

    Gruß, uffi.

Berechtigungen

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

12V Akku bauen