- SF800 Solar Speicher Tutorial         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 30

Thema: Probleme mit SRF10

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ich les grad' nach, da steht, man solle eher mit höherem Gain beginnen und dann solange herabsetzen, bis er nicht mehr jeden Furz mißt, sondern nurmehr interessante Objekte
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    189
    Nun, die Werte ändern sich zwar mit der Entfernung der Hand, haben aber nichts mit der wirklichen Entfernung zu tun...
    Range wird als 100 und Gain als 1 bei jedem Programmstart eingestellt.
    Der Entfernungswert steht aber nur im Low-Byte...
    Auffällig ist auch, dass die meisten Rückgabewerte 0 (im High- als auch im Low-Byte) sind und zwischendurch besagte Werte kommen.

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    189
    Zitat Zitat von PicNick
    Ich les grad' nach, da steht, man solle eher mit höherem Gain beginnen und dann solange herabsetzen, bis er nicht mehr jeden Furz mißt, sondern nurmehr interessante Objekte
    Ich hab jetzt mal Range auf 255 und Gain auf 16 gesetzt... Maximalwerte also.
    Die Nullen bleiben zu meiner Verwunderung (im Low-Byte) aus und die gegebenen Werte entsprechen auch der tatsächlichen Entfernung (hab mit nem Lineal gemessen).
    Nur im High-Byte ändert sich nichts. Dort werden weiterhin nur Nullen ausgegeben...

  4. #14
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Naja, Moment. Das low Byte reicht ja immerhin für 2,5 m. Welche Reichweite soll der Seppel denn haben ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    189
    Zitat Zitat von PicNick
    Naja, Moment. Das low Byte reicht ja immerhin für 2,5 m. Welche Reichweite soll der Seppel denn haben ?
    Also das Gerät selbst kann ja bis zu 6m messen...
    Mir würden aber Entfernungen bis 3m schon reichen... je mehr, desto besser...
    Wenn ich das Ding mit Maximalwerten betreibe, ergeben sich keine Werte über etwa 190 im Low-Byte.
    Das bedeutet ja einerseits, dass High gar nicht erst über Null kommt, aber andererseits, dass Gegenstände im Raum den Schall wegen des breiten Winkels reflektieren...
    Aber wie kann ich denn dann Entfernungen über 2,5 m messen? Das hängt doch dann mit der Verstärkung zusammen...

    Ich glaub, solangsam wirds was...

  6. #16
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    In der Doku steht, man muß mit Gain und range rumprobieren
    Range = 100 sollte für etwa 4,4 m reichen.
    Jetzt mußt du wohl mit Gain rumwursteln.
    Fang halt wirklich mit 16 an und geh dann runter
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    189
    Ersteinmal danke für die Hilfe!

    Ich hab jetzt ein wenig rumprobiert...
    Geeinigt hab ich mich auf Range/Gain = 100/8.
    Laut Datenblatt reicht das für etwa 2m...
    Allerdings erhalte ich manchmal Werte von 135 im Low- und 1 im High-Register, was einer Entfernung von 3,91m (oder irre ich?) entsprechen würde...
    Ich vermute, dass das irgendwie mit den Reflektionen am Fußboden zusammenhängt, da die Häufigkeit des Vorkommens dieser Werte steigt, je geringer der Winkel des Sensors zum Boden hin ist.

  8. #18
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    ..Reflektionen am Fußboden ..
    Kann gut sein. IMHO sollte der Sensor nicht zu tief montiert sein. Der Schall reflektiert auf jedem Fliegenschiß
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    189
    Das stimmt allerdings...

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2004
    Ort
    wien
    Alter
    44
    Beiträge
    11

    problem mit m2.0

    hab mit range und gain herumexperimentiert, allerdings kommen keine sinnvolen werte heraus. das lowbyte wandert zwischen 0 und 165. manchmal kommen aber ziemlich viele nullen hintereinander! lese die werte mit dem terminal programm von windows ein (bei 9600baud)

    timing-probleme?!

    ich verwende zur ansteuerung das programm von H.J. Windt
    unter http://www.robot-electronics.co.uk/shop/Examples.htm

    Code:
    '----------------------------------------------------------------------------------------------------'
    '**********************************************************************'
    '*                       WINDT SYSTEMS                                *'
    '* SRF08 RANGE VIA EMULATED I2C BUS v1.3 for CCIUM2.01 with CCIAB2.0  *'
    '*                         H.J. WINDT                                 *'
    '*                            2005                                    *'
    '**********************************************************************'
    '----------------------------------------------------------------------------------------------------'
    'This software, with the C-Control I Unit M2.01 mounted on the C-Control I Application Board 2.0,'
    'will fire the SRF08 and read the light-sensor and 1st range and display the data on the LCD'
    'as Light and Range.'
    'Communication with the SRF08 is via an emulated I2C bus, this is due to the fact that the'
    'standard I2C "IIC" software for the CCIUM2.01 does NOT check for clock stretching!'
    'The emulated SDA line is via port 4.'
    'The emulated SCL line is via port 5.'
    'Feel free to use and share this software!'
    '----------------------------------------------------------------------------------------------------'
    '**************** I/O PORTS ****************'
    define sda port[4]
    define scl port[5]
    define lcd_light_off port[16]
    '*******************************************'
    '**************** VARIABLES ****************'
    define control_flags byte[1]
    define i2c_nack bit[1]
    define i2c_last bit[2]
    define i2c_nack_count byte[2]
    define i2c_byte byte[3]
    define i2c_out_bit bit[24]
    define i2c_in_bit bit[17]
    define loop byte[4]
    
    define light byte[6]
    define range word[4]
    define range_high_byte byte[7]
    define range_low_byte byte[8]
    '*******************************************'
    '**************** CONSTANTS ****************'
    define srf08_gain 31   'SRF08 GAIN / DEFAULT = 31'
    define srf08_range 255 'SRF08 RANGE / DEFAULT = 255'
    '*******************************************'
    '****************** SETUP ******************'
    print"#ON_LCD#"; : print"#INIT#"; : print"#CLR#"; : print"#OFF#"; : lcd_light_off = off
    print"#ON_CONFIG#"; : put &b1000 : print"#OFF#";
    #try_again
    gosub initialize_srf08
    if i2c_nack then goto try_again
    '*******************************************'
    '***************** PROGRAM *****************'
    #start
    gosub get_srf08_range
    if i2c_nack then goto start
    print"#ON_LCD#";
    print"#L101#";
    print"Light = ";light;"  ";
    print"#L201#";
    print"Range = ";range;"cm";"    ";
    print"#OFF#";
    goto start
    '*******************************************'
    '*************** SUBROUTINES ***************'
    #get_srf08_range
    #fire_srf08
    gosub start_i2c
    i2c_byte = &he0 : gosub write_byte_i2c
    i2c_byte = 0 : gosub write_byte_i2c
    i2c_byte = &h51 : gosub write_byte_i2c
    gosub stop_i2c
    if i2c_nack_count > 100 then goto no_ack_from_srf08
    if i2c_nack then goto fire_srf08
    #read_light_and_range
    #srf08_wait_and_setup
    gosub start_i2c
    i2c_byte = &he0 : gosub write_byte_i2c
    i2c_byte = 1 : gosub write_byte_i2c
    gosub stop_i2c
    #pass_srf08_setup
    if i2c_nack_count > 100 then goto no_ack_from_srf08
    if i2c_nack then goto srf08_wait_and_setup
    #read_srf08_data
    gosub start_i2c
    i2c_byte = &he1 : gosub write_byte_i2c
    gosub read_byte_i2c : light = i2c_byte
    gosub read_byte_i2c : range_high_byte = i2c_byte
    gosub read_last_byte_i2c : range_low_byte = i2c_byte
    gosub stop_i2c
    if i2c_nack then goto pass_srf08_setup
    return
    
    #start_i2c
    sda = 0 : scl = 0
    return
    
    #stop_i2c
    sda = 0 : deact scl : deact sda
    return
    
    #write_byte_i2c
    for loop = 1 to 8
    sda = i2c_out_bit
    deact scl
    #write_byte_i2c_clock_stretch
    if not scl then goto write_byte_i2c_clock_stretch
    scl = 0
    i2c_byte = i2c_byte shl 1
    next
    deact sda
    deact scl
    #write_byte_i2c_ack_clock_stretch
    if not scl then goto write_byte_i2c_ack_clock_stretch
    i2c_nack = sda
    scl = 0
    if i2c_nack then goto i2c_error
    i2c_nack_count = 0
    return
    #i2c_error
    i2c_nack_count = i2c_nack_count + 1
    goto stop_i2c
    
    #read_byte_i2c
    i2c_last = 0
    #get_i2c_byte
    deact sda
    for loop = 1 to 8
    deact scl
    #read_byte_i2c_clock_stretch
    if not scl then goto read_byte_i2c_clock_stretch
    i2c_in_bit = sda
    scl = 0
    if loop < 8 then i2c_byte = i2c_byte shl 1
    next
    if i2c_last then deact sda else sda = 0
    deact scl
    #read_byte_i2c_ack_clock_stretch
    if not scl then goto read_byte_i2c_ack_clock_stretch
    scl = 0
    return
    
    #read_last_byte_i2c
    i2c_last = 1
    goto get_i2c_byte
    '*******************************************'
    '******* INITIALIZATION SUBROUTINES ********'
    #initialize_srf08
    gosub start_i2c
    i2c_byte = &b11100000 : gosub write_byte_i2c
    i2c_byte = &b00000001 : gosub write_byte_i2c
    i2c_byte = srf08_gain : gosub write_byte_i2c
    i2c_byte = srf08_range : gosub write_byte_i2c
    #pass_initialize_srf08
    gosub stop_i2c
    if i2c_nack_count > 16 then goto no_ack_from_srf08
    if i2c_nack then goto initialize_srf08
    return
    '*******************************************'
    '****************** DATA *******************'
    
    '*******************************************'
    '************* ERROR MESSAGES **************'
    #no_ack_from_srf08
    beep 1,1,1:beep 10,1,1:beep 1,1,1:beep 10,1,1
    print"#ON_LCD#";
    print"#CLR#";
    print"E-I2C ERROR:";
    print"#L201#";
    print"SRF08 not found";
    pause 300
    print"#CLR#";
    print"#OFF#";
    return
    '*******************************************'
    wie kann ich low-byte und high-byte zusammenfassen und als einen wert an die serielle shcnittstelle zurückgeben.

    ist es möglich einen 2ten SRF10 an dieselbe c-control anzuschliessen

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress