-
        

Ergebnis 1 bis 8 von 8

Thema: I2C Bus zu langsam?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.01.2004
    Beiträge
    44

    I2C Bus zu langsam?

    Anzeige

    Frohe Weihnachten,

    mein Grafik-Display habe ich am Laufen, ausserdem habe ich ein paar Grafiken in einem 24c256 EEprom abgelegt. Diese Daten möchte ich natürlich auslesen und darstellen, was auch funktioniert, nur eben zu langsam. Ich benutze einen Mega 8. Der I2C-delay steht auf 1. Gibt es eine Möglichkeit das Auslesen zu beschleunigen! Nützt eine Verdopplung des Systemtakts auf 16 Mhz was, oder ist der I2C unabhängig?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    da musst Du ins Datenblatt von deinem Speicher schauen, wie schnell der kann, der Mega ist normalerweise schnell genug.

    Welche Geschwindigkeit möchstest Du am I2C haben 100 oder 400kBit/s ?
    Bei 400 sollten es 16MHz sein, bei 100 reichen die 8MHz.
    Es nutzt aber nix wenn Du 400k beim Mega einstellst und er Speicher das nicht kann, da gehts trotzdem nicht schneller.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    61
    Beiträge
    1.058
    Hallo stevensen

    Es gibt auch die Möglichkeit ein EEPROM-Bauteil mit parallelem Datenbus, also z.B. 4-Bit zu benutzen. Dann kann man den Daten- und Steuerbus an Pins des mega8 anschliessen. Ich kenne deine Anwendung nicht, wenn du aber einen Bidirektionalen Bustreiber mit Enable benutzt könntest du die Pins auch weiterhin anderweitig verwenden!
    MfG

    Hellmut

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Alternativ Flash am SPI.

    128K im So8 gibts schon für ca. 1.60 Euroen und geht bis 20 Mhz Takt.

    Das sollte reichen
    Gruß
    Ratber

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    11.01.2004
    Beiträge
    44
    Danke, für die Antworten!!
    Im Datenblatt zum 24c256 steht, dass er mit verschiedenen Frequenzen abhängig von der Spannung arbeitet kann. Rein rechnerisch müßte er viel schneller sein, ich mache wahrscheinlich grundsätzlich was falsch. Ein Bild braucht 504 Bytes, um es auszulesen und darzustellen braucht der Mega8 2-3 sekunden! Das ist doch viel zu langsam, oder? Wie sieht den ein schneller Code aus?
    ich benutze folgenden um jeweils 1 byte auszulesen und auf dem Lcd darzustellen und alles mal 504:

    Sub Read_eeprom(byval Adres Word , Value As Byte)
    Temp = High(adres)
    Temp2 = Low(adres)
    I2cstart 'generate start
    I2cwbyte Addressw 'slave adsress
    I2cwbyte Temp
    I2cwbyte Temp2 'address of EEPROM

    I2cstart 'repeated start
    I2cwbyte Addressr 'slave address (read)
    I2crbyte Value , Nack 'read byte
    I2cstop 'generate stop
    Waitms 10
    End Sub

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Die Taktbegrenzung auf 100Khz gilt nur für eine Versorgung unter 2.7V und wenn du das Teil im Automotiven Temperaturbereich betreibst (Also anwendungen im Kfz wo es mal Frierz oder Kocht)

    Für eine Modell gilt dieser Spannungsbereich nicht und ich denke mal das bei dir auch keine extremen Temperaturen auftreten also läufts für dich mit 400 Khz.

    Allerdings halte ich 2-3 Sekunden für 504 Byte auch etwas lang.

    Bist du icher das der Takt bei dir auch korrekt läuft ?

    Config I2Cdelay richtig eingestellt ?
    Gruß
    Ratber

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    12.11.2004
    Ort
    Berlin
    Beiträge
    58
    Hi,

    wenn du aber alle 504 Bytes hintereinder ausliest, dann gänge es bestimmt schneller.

    z.b. (ich kenne aber diese Sprache nicht...!!!!)
    Sub Read_eeprom(byval Adres Word , Value As Byte(sollte ein Array sein)???, Count As Word)
    Temp = High(adres)
    Temp2 = Low(adres)
    I2cstart 'generate start
    I2cwbyte Addressw 'slave adsress
    I2cwbyte Temp
    I2cwbyte Temp2 'address of EEPROM

    I2cstart 'repeated start
    I2cwbyte Addressr 'slave address (read)

    for-schleife i = 0 bis Count - 2 (502)
    I2crbyte Value[i] , ack 'read byte

    wenn fertig dann noch mal auslesen
    I2crbyte Value[503] , Nack 'read byte

    I2cstop 'generate stop
    Waitms 10
    End Sub


    Ingbo

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    11.01.2004
    Beiträge
    44
    Hallo,

    danke für die Antworten, ich habs hingekriegt. Der Pseudocode hats gebracht, ich hatte vorher die wartezeit von 10 ms mal weggenommen, das Lesen ging auch ohne und sehr viel schneller. Das Beispiel war dann noch schneller. Also danke! =D>

Berechtigungen

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