- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Adressierung i2c eeprom 24c65

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381

    Adressierung i2c eeprom 24c65

    Anzeige

    Praxistest und DIY Projekte
    zu erst ein schönes Weihnachtsfest euch allen!

    Ich habe folgendes Problem:

    nach langem suchen habe ich einen Code gefunden (unten) mit dem ich mein eeprom beschreiben und auch wieder auslesen kann.
    Mir ist nur noch schleierhaft, wie ich die Speicherzellen/Speicherbereiche, also in hex, für jedes Byte der 64kbit ermitteln kann.

    Und was sagt Ihr zu dem Code, gibt es eine bessere Methode, um über I2C auf ein eeprom zu zugreifen?

    =>code bitte<=




    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 228
    $swstack = 228
    $framesize = 128
    $lib "i2c_twi.lbx"
    Config Twi = 400000                                         ' Init TWBR und TWSR
    ' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
    TWCR = &B00000100                                 ' nur TWEN setzen
    
    '----------------- LCD Display an Port c =>Conector SV9-------------------------------------------------------------------------------------------------
    
    Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7       ' Pinbelegung "LCD-Port)"
    '                SV8          6                5               4              3              7              8           ' Pinbelegung SV9 Board
    '------------------ DS1820 on pinA 0 (pull up)--------------------------------------------------------------------------------------------------------------------------------------
    
    
    '
    
    '--------- Eeprom Anschlüße ------
    Config Sda = Portc.1                                        'SDA und SCL definieren
    Config Scl = Portc.0
    
    
    Const E_ctlw = &HA0
    Const E_ctlr = &HA1
    
    Dim E_ah As Byte
    Dim E_al As Byte
    Dim E_addr As Word
    Dim E_dat As Byte
    Dim Dat As Byte
    
    Declare Sub E_write(byval E_addr As Word , Dat As Byte)
    Declare Sub E_read(byval E_addr As Word , E_dat As Byte)
    Declare Sub 24lc256_test
    
    call 24lc256_test
    end
    
    ' Routine to test the 24LC256
    '
    Sub 24lc256_test
    'Test read and writes
       Print "Testing I2C Eeprom"
          Dat = 10
          For E_addr = &H1000 To &H1010
              Call E_write(e_addr , Dat)
              Call E_read(e_addr , E_dat)
              Print E_dat ; " ";
              Incr Dat
              Incr Dat
              Incr Dat                                          ' +1 +1 +1
          Next E_addr
    
       Print
       Print "Here a counter should appear from 0, 3, 6, 9, 12, 15, 18,21, 24, 27 etc."
       Print "End of Test"
    End Sub
    
    
    ' Routine to write the 24LC256
    '
    Sub E_write(byval E_addr As Word , Dat As Byte)
        E_ah = High(e_addr)
        E_al = Low(e_addr)
        I2cstart
        I2cwbyte E_ctlw
        I2cwbyte E_ah
        I2cwbyte E_al
        I2cwbyte Dat
        I2cstop
        Waitms 10
    End Sub
    
    
    ' Routine to read the 24LC256
    '
    Sub E_read(byval E_addr As Word , E_dat As Byte)
        E_ah = High(e_addr)
        E_al = Low(e_addr)
        I2cstart
        I2cwbyte E_ctlw
        I2cwbyte E_ah
        I2cwbyte E_al
        I2cstart
        I2cwbyte E_ctlr
        I2crbyte E_dat , Nack
        I2cstop                                                 '
    End Sub
    Vielen Dank und gute und erholsame Feiertage!

    MAT

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    44
    Beiträge
    689
    Wenn Du die Adresse mit ner Overlay-Variable versiehst gehts einfacher...schaue mal ins Wiki

    https://www.roboternetz.de/wissen/in...und_I2C_EEprom

    ein schönen Fest noch

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Schau hier mal, das Problem hatte ich auch schon mal.
    https://www.roboternetz.de/phpBB2/ze...g.php?p=286178

    Klappt super, je nach EEP-ROM-Größe muss man noch die Adresse anpassen (s. Datenblatt). Im Pollinboard v2 ist es in der Tat so, dass der Schreibschutz-Pin fest auf VCC gelegt ist, daher muss man den zum Beschreiben hochbiegen/isolieren...

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    Soooo.....

    der Weihnachtsmann war nicht da , drum bastle ich weiter

    Gestern hab ich es nun endlich geschafft das eeprom zu beschreiben.
    Ich denke mir, dass bei einer 64kbit, also 8192 byte, großem Speicher das zu erst speichernde byte bei &H0 beginnt und bei &H1 weiter geht?!

    Ist das so richtig? oder wie spricht man die einzelnen byte Speicherzellen, ihre Adresse, an?

    Dann ist die nächste Frage, wie kann ich die Informationen in den einzelnen Speicherzellen wieder löschen oder reicht es wenn ich diese wieder überschreibe?

    Gruß MAT

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    44
    Beiträge
    689
    Ja da hast Du recht die erste Speicherzelle ist bei &H0 weiter gehts mit &H1; &H2 usw.

    Zum löschen kann man die Speicherzelle einfach überschreiben.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    @rofo88

    dann hat sich ja das ausschlafen heute geloht

    Dann hab ich aber noch eine Frage, wie kann ich single Werte in dem EEprom speichern?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    44
    Beiträge
    689
    Ich glaube das Single-Werte und IIC-EEPROM von Bascom nicht direkt unterstütz werden.

    Also mußt Du den Single-Wert in die einzelnen Bytes zerlegen und die Bytes dann ins EEPROM schieben.

    Code:
    Dim X As Single At $100
    Dim A As Byte At $100 Overlay
    Dim B As Byte At $101 Overlay
    Dim C As Byte At $102 Overlay
    Dim D As Byte At $103 Overlay
    Damit hast Du die Single-Variable X in 4 Bytes zerlegt und kannst die ins EEPROM schieben.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    hmmmm.

    Nur leider habe ich das noch nicht richtig mit dem overlay verstanden.

    Ich bekomme eine Variable temp (single) von meinem ds1820 und Deiner Meinung nach, muss ich dann diese in 4 einzelne byte oder in 2 word auftrennen. Und in den eeprom schieben.

    Beim Auslesen muss ich diese doch auch wieder in einen single umwandeln.

    Gibt es unter Bascom ne Funktion zum wandeln von/zu und zurück?

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ja, ne, das mit dem OVERLAY geht anders (habs eben auch dank dem Sample kapiert):
    - X ist die single und belegt am Speicherplatz $100 vier Bytes (eben Nr. 100-103)
    - A bis D werden auf dem selben Speicherplatz reserviert - A auf $100 usw.
    - Wenn du X veränderst, dann werden automatisch auch die anderen 4 Variablen geändert - und umgekehrt genauso.
    Natürlich darfst du bei sowas die Variablen nicht einfach für ne FOR NEXT Schleife nutzen (außer du verstehst, was da passiert), denn sonst verlierst du ja die Inhalte.

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    Nun das mit dem Overlay ist wohl die richtige Richtung....

    ich kann es nur nicht in einen Code umwandeln:

    1. ich empfange ein single der aus 4 byte besteht
    2. ich muss diesen in 2 word oder in 4 bytes teilen
    3. dann will ich diese, abhängig der Aufteilung, in eine bestimmte Adresse im eeprom speichern
    und 4. lese ich dann die Adressen wieder aus und setze die einzelnen bytes/words wieder zusammen

    ABER WIE??? das ist mein Problem!

    Hat jemand einen Lösungsansatz?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests