Posts by micha1234

    Hallo zusammen,


    ich habe einen Atmega via I2C an einen Raspi gehängt. Auf dem I2C habe ich ein Protokoll aufgesetzt, welches die Daten via Checksumme prüft.


    Die Kommunikation erfolgt


    1. Master -> Slave

    (adressierung)

    1 Byte Command

    1 Byte Modus

    4 Byte Daten

    1 Byte Checksumme


    Dies wird ins Register 0 geschrieben.


    Der Slave stellt daraufhin die Antwort im Register 0 bereit, welche dann durch ein Read gelesen wird.

    1 Byte Status (Ok, Nicht OK, Checksumme falsche etc,)

    8 Bytes Daten

    1 Byte Checksumme


    via i2cdump im Modus "c" funktioniert das lesen, Python liefert mir hier andere Daten


    Code
    i2cbus = SMBus(1)
    device = 0x29
    i2cbus.write_i2c_block_data(device, 0x00, [0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x05])
    time.sleep(2.0)
    data = i2cbus.read_i2c_block_data(device, 0x00, 10)
    print(data)

    Die Checksumme ist hier falsch (was für den Test beabsichtigt ist).


    Das Python-Script liefert mir als Ausgabe

    Code
    [255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

    i2cdump liefert mir die richtigen Werte:

    Code
    root@raspberrypi:~# i2cdump -y 1 0x29 c
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    00: a0 8f XX 00 00 00 XX 00 00 XX 00 00 a0 0a 00 00    ?.X...X..X..??..
    ....

    Das "a0 8f" ist die Fehlermeldung "Checksumme falsch, 8f erwartet"


    Ohne den Modus "c" liefert auch i2cdump die ff

    Code
    root@raspberrypi:~# i2cdump -y 1 0x29
    No size specified (using byte-data access)
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    00: ff ff XX ff XX ff XX ff XX ff XX ff ff XX ff XX    ..X.X.X.X.X..X.X
    
    ...

    Ich schließe daraus, dass Python standardmäßig nicht den "c"-Modus verwendet.

    Dieser Modus schreibt wohl im Gegensatz zum Standardmodus zunächst noch die Device-Adresse auf den Bus.

    Was muss ich machen, um dies auch in Python zu nutzen?



    Grüße und Danke


    Micha

    Hallo zusammen,


    der Punkt ist soweit gelöst.


    Ja, der Atmega läuft mit 5V, da aber keine PullUps auf der 5V-Seite genutzt werden, ist das unkritisch.


    Ich hab mittlerweile einen I2C-Sensor bestellt und diesen dran gehängt. Der lässt sich auslesen, aber nicht mehr, wenn das DSO dranhängt. Es scheint, dass das DSO die Leitung auf Masse gezogen hat und damit kein Signal mehr durchging.


    Das ursprüngliche Problem war eine falsch-Verdrahtung des Atmegas.


    Vielen Dank für die vielen Hilfestellungen, welche mich im Endeffekt auf den richtigen Punkt gebracht haben.


    Jetzt habe ich ein Folgeproblem, was ich aber in einem eigenen Thread aufmache (betrifft die Python-Bibliothek)


    Danke und Gruß


    Micha

    Hallo,


    ich habe heute versucht, I2C an meinem Raspi zum Laufen zu bekommen.

    I2C via raspi-config hab ich aktiviert, rebootet und ebenso die i2c-tools installiert.-


    Da mein Atmega nicht gefunden wurde (was auch an einem Problem auf dessen Seite liegen mag) hab ich erstmal mein DSO an die Leitung drangehängt und festgestellt, dass beide Leitungen dauerhaft Low sind. D.h. trotz Ausführung von Kommandos tut sich da gar nichts. Zumindest das Taktsignal sollte ich sehen. Das DSO hat auch einen I2C-Auswertefunktion, die aber aufgrund der nicht vorhandenen Daten natürlich auch nichts findet.


    i2c-detect findet nichts am Bus (weil nichts dranhängt) aber auch während das läuft kommt keinerlei Änderung an den beiden Leitungen und auch keine Fehlermeldung


    Zur Sicherheit hab ich es neben dem RPI 2B auch noch mit nem 1er versucht erhalte aber auch dort das selbe Verhalten. Daher würde ich mal einen Hardwaredefekt erstmal für unwahrscheinlich halten, sondern denke eher, dass da irgendwas "basic" noch falsch ist.


    Ich habe allerdings trotz Suche nichts gefunden.


    Hat mir jemand einen Tipp, was ich noch prüfen kann?


    Danke und Gruß


    Micha