- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 12

Thema: SF10 an Raspi mit Perl über I2C auslesen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Defiant
    Registriert seit
    17.04.2005
    Ort
    Hamburg
    Beiträge
    183
    Clock Stretching: z.B. durch ein Oszilloskop, hat aber zugegeben nicht jeder. Ist aber auch praktisch um z.B. herauszufinden ob die I2C-Signale sauber sind und nicht irgendwie verwaschen durch zu lange Kabel, falsche Pullup-Werte etc.

    Dein Verfahren mit 81 schreiben, warten, zwei Byte lesen ist jedenfalls korrekt für den Sensor. Magst du vielleicht mal den Code online stellen und dann gucke ich was bei mir raus kommt?

    Es gibt wohl auch offizielle Beispiele in C: https://www.robot-electronics.co.uk/...i_examples.htm - was kommt bei denen bei dir raus?

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    22.12.2008
    Beiträge
    27
    Gerne, bin für jede Hilfe dankbar

    Code:
    #!/usr/bin/perl
    
    use warnings;
    use strict;
    use Time::HiRes ('usleep');
    use RPi::I2C;
    
    my $SF10 = RPi::I2C->new(0x70);
    my $version = undef;
    my $loopcount = 0;
    
    while(1) {
         system('clear');
         $loopcount++;
         printf("Loop: %d\n", $loopcount);
    
         $version = $SF10->read_byte(0);
         printf("SF10 Version: %d (0x%X)\n", $version, $version);
    
         usleep(65000);
    
         last if($loopcount > 100);
    }

    Ich bin vom Modul Device::I2C zum Modul RPi::I2C gewechselt, da dies wohl neuer ist und einfach um auszuprobieren ob es daran lag. Hat aber am Verhalten nichts geändert.
    Momentan wird nur die Version des Sensors ausgelesen. Aber auch bei Entfernungen verhält es sich gleich. Nach der selben Zeit erscheinen völlig falsche Werte (jup, scheint Zeitabhängig, nicht Abhängig von den Zugriffen).
    Oszilloskop habe ich leider keines. Evtl. habe ich auch einfach nur den Sensor geschossen, wüsste aber nicht wodurch

    Bei dem Beispielprogramm in C kommen bei mir die selben schrägen Werte raus wie wenn mein Programm ein paar Leseversuche hinter sich hat (cooler Link übrigens!)
    **** SRF02/10/235 example program ****
    Software v: 133
    Range was: 32768
    - - - Aktualisiert - - -

    Was mir noch einfällt: Evtl. könnte noch die Art meiner Stromversorgung eine Rolle spielen.

    Das Ganze wird durch einen 12V Bleigelakku versorgt.
    MD25 (Motortreiber) hängt direkt am Akku.
    SRF10 und Raspi hängen über einen Step Down Wandler auf 5V dran.
    Es werden also sämtliche "Geräte" individuell mit Strom versorgt. Aber es hängen natürlich alle drei am selben Bus.
    Naiv wie ich bin, dachte ich, dass das schon so laufen sollte (abgesehen vom SRF10 tut es das ja auch).

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Defiant
    Registriert seit
    17.04.2005
    Ort
    Hamburg
    Beiträge
    183
    ok, ich probier das Montag mal aus. Ich kann zwar kein Perl, aber Programm sieht soweit gut aus.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Defiant
    Registriert seit
    17.04.2005
    Ort
    Hamburg
    Beiträge
    183
    Witzig, ich habe das jetzt zwar auch nicht auf dem Oszi analysiert, aber diese Lesefehler riechen stark nach dem Clock stretching Bug [1]. Das Problem ist nicht neu, das Herabsetzen des I2C-Taktes bringt hier Abhilfe ohne Garantien zu geben, der Autor des Perl I2C-Modus beschreibt wie das geht und reduziert den Takt sogar auf 10kHz [2].


    [1] http://www.advamation.de/technik/ras...i-i2c-bug.html
    [2] https://metacpan.org/pod/RPi::I2C#Raspberry-Pi

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    22.12.2008
    Beiträge
    27
    Super! Also eigentlich nicht, aber super, dass du dir so viel Mühe gegeben hast! Ich werde der Sache in diese Richtung weiter folgen und berichten wenn ich Erfolg hatte. Das kann aber etwas dauern. Vielen Dank, das hilft mir schon sehr weiter.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    22.12.2008
    Beiträge
    27
    Hi nochmal,

    die Lösung, die Baudrate zu reduzieren funktioniert einwandfrei! Eine niedrige Baudrate stört wohl in den wenigsten Fällen weshalb dadurch zumindest mein Problem komplett behoben wird. Vielen Dank nochmal, dass du dir die Mühe gemacht hast!

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.669
    .. die Lösung, die Baudrate zu reduzieren funktioniert einwandfrei .. weshalb dadurch zumindest mein Problem komplett behoben wird ..
    Na gut dass es funktioniert (auch wenn ich als Fehlerquelle die Baudrate nicht sooo ganz verstehe). Frage: mit welcher Frequenz betreibst Du den I²C-Bus? Ich hatte mit meiner langen Busleitung auch mal Probleme (siehe hier) und konnte den Fehler eindeutig mit den schlappen I²C-Flanken (-spitzen) bei hohen Frequenzen identifizieren. Ich nehme mal an, dass Du Deine Busaktivitäten nicht mit nem Oszi kontrolliert hast.
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Defiant
    Registriert seit
    17.04.2005
    Ort
    Hamburg
    Beiträge
    183
    Siehe obigen Link zu advamation.de. Ist der Takt für einen I2C-Slave zu schnell (er kann die Daten nicht rechtzeitig liefern) kann er diesen auf Low ziehen, das nennt man Clock stretching. Bei dem Raspberry Pi < 4 gibt es halt einen Bug, der Rpi erkennt das nicht und liest entsprechend falsche Daten. Das Problem konnte ich noch bei 100kHz nachstellen, bei 10kHz nicht.

Ähnliche Themen

  1. RasPi - Druckeranschluss über Ethernet nicht möglich
    Von oberallgeier im Forum Raspberry Pi
    Antworten: 18
    Letzter Beitrag: 19.05.2020, 10:45
  2. Antworten: 63
    Letzter Beitrag: 18.02.2016, 07:43
  3. Antworten: 9
    Letzter Beitrag: 17.02.2016, 20:09
  4. Raspi GPP C++ WiringPi: Rotationsencoder auslesen
    Von HaWe im Forum Raspberry Pi
    Antworten: 1
    Letzter Beitrag: 18.10.2015, 09:29
  5. LPT & COM mit PERL ansprechen
    Von Free Faq im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 31.08.2005, 22:23

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress