Ich hab irgendwie das Gefühl, das es mit der Ack, bzw. NoAck-Sache zusammenhängt...
Hat nicht irgendeiner ne Idee? Ich hab schon alles ausprobiert, aber nichts hilft...
Hallo!
Ich hab mir neulich SRF10-Module von Roboter-teile.de (danke Jörg für die schnelle Lieferung) bestellt und diese an meine C-Control angeschlossen, doch irgendwie wollen die nicht so richtig...
Durch die Informationen, die hier im Roboternetz und im Internet zu finden sind, habe ich es zumindest schon geschafft, eine Messung zu starten, nur das Auslesen der Register will noch nicht so richtig.
Mal kommen relativ gut aussehende Werte aus dem Low-Byte und mal sind es nur Nullen. High ist ständig 0.
Am I²C-Bus kann es nicht liegen, da mein Kompass-Modul dort problemlos funktioniert...
Vielleicht habt ihr ja noch ne Idee...
Danke schon mal im Voraus.
Mit freundlichen Grüßen
Philipp
Hier der Code:
Code:Define SDA Port[3] Define SCL Port[4] Define I Byte Define I2C_Daten Byte Define I2C_Zaehler Byte SDA = On SCL = On gosub I2C_Start I2C_Daten = 224 gosub I2C_Write I2C_Daten = 2 gosub I2C_Write I2C_Daten = 100 'Range gosub I2C_Write gosub I2C_Stop gosub I2C_Start I2C_Daten = 224 gosub I2C_Write I2C_Daten = 1 gosub I2C_Write I2C_Daten = 1 'Gain gosub I2C_Write gosub I2C_Stop #Loop gosub I2C_Start I2C_Daten = 224 gosub I2C_Write I2C_Daten = 0 gosub I2C_Write I2C_Daten = 81 gosub I2C_Write gosub I2C_Stop Pause 10 gosub I2C_Start I2C_Daten = 224 gosub I2C_Write I2C_Daten = 3 gosub I2C_Write gosub I2C_Stop gosub I2C_Start I2C_Daten = 225 gosub I2C_Write gosub I2C_Read Print I2C_Daten 'LOW gosub NoAck gosub I2C_Stop gosub I2C_Start I2C_Daten = 224 gosub I2C_Write I2C_Daten = 2 gosub I2C_Write gosub I2C_Stop gosub I2C_Start I2C_Daten = 225 gosub I2C_Write gosub I2C_Read Print I2C_Daten 'HIGH gosub NoAck gosub I2C_Stop Goto Loop '********************* I²C Standardroutinen******************* #I2C_Start SDA = OFF SCL = OFF return #I2C_Stop SDA = OFF SCL = ON SDA = ON return #I2C_Write for i = 1 to 8 SDA = OFF if (I2C_Daten and 128) = 128 then SDA = ON pulse SCL I2C_Daten = I2C_Daten shl 1 '1 Bit nach links schieben next pulse SCL return #I2C_Read I2C_Daten = 0 deact SDA for i = 1 to 8 I2C_Daten = I2C_Daten shl 1 SCL = ON if SDA then I2C_Daten=I2C_Daten + 1 SCL = OFF next return #Ack SDA = 0 pulse SCL return #NoAck SDA = 1 pulse SCL return
Ich hab irgendwie das Gefühl, das es mit der Ack, bzw. NoAck-Sache zusammenhängt...
Hat nicht irgendeiner ne Idee? Ich hab schon alles ausprobiert, aber nichts hilft...
Hast Du es hiermit schon verglichen?
Manfred
http://www.the-starbearer.de/Praxis/....htm#icdigital
Ja... vom Inhalt in der For-Schleife ist es mit meinem Programm soweit identisch... es will aber irgendwie nicht funktionieren...
Hallo Philipp,
nach dem Start der Messung muß man beim SRF10 70ms warten, bis das gültige Ergebnis vorliegt. Ich kenn die C-Control nicht so gut, bedeutet 'Pause 10' 10ms warten?
Gruß Peter
Hallo!
Pause 10 bedeutet soweit ich weiß, dass er 10 mal den internen Timer (20ms) durchläuft...Zitat von m.a.r.v.i.n
Bei Pause 50 stoppt das Programm dann für eine Sekunde...
Philipp
Nein, es sind 10*20ms.Ich kenn die C-Control nicht so gut, bedeutet 'Pause 10' 10ms warten?
mfg
Stefan
Vergleich einmal mit dem Beispiel. Und zwar wegen der Reihenfolge der abfragen (SFR08 /SFR10 = jacke wie hose)
Du holst, glaub ich low und high einzeln ab. das wär nicht so gut.
https://www.roboternetz.de/wissen/in...ogrammbeispiel
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo, Robert!
Ich hab mir noch mal dein Beispiel von hier angesehen und den Inhalt im Loop folgendermaßen verändert:Zitat von PicNick
Nun fragt das Programm nicht mehr getrennt ab, es kommen aber überwiegend Nullen zurück...Code:gosub I2C_Start I2C_Daten = 224 gosub I2C_Write I2C_Daten = 0 gosub I2C_Write I2C_Daten = 81 gosub I2C_Write gosub I2C_Stop Pause 20 gosub I2C_Start I2C_Daten = 224 gosub I2C_Write I2C_Daten = 2 gosub I2C_Write gosub I2C_Stop gosub I2C_Start I2C_Daten = 225 gosub I2C_Write gosub I2C_Read gosub Ack Print I2C_Daten 'High gosub I2C_Read gosub NoAck Print I2C_Daten 'Low gosub I2C_Stop
Erst wenn ich mit meiner Hand nah über den Sensor gehe, ändern sich die Werte im Low-Byte auf Zahlen bis etwa 20...
High ist weiterhin 0.
Du mußt mal schauen/messen ob "Hand ganz nahe" nicht vielleicht eh' etwa 20 Zentimeter sind.
Ich würde mir die Sache mit "Range" u. "Gain" im DS mal genau anschauen, Vielleicht ist der Junge einfach schwerhörig
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen