- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: 24c16 mit avr16 daten reinschreiben

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    58
    Beiträge
    247
    Anzeige

    Powerstation Test
    Hallo

    Versuch mal das so zu probieren.


    '
    Code:
    Eeprom schreiben mit Word Adresse
    
    Dim Adresse As Word
    
    Dim Adresse_high As Byte
    
    
    Adresse = 1234                                              'zum testen
    
    
    
       Adresse_high = High(adresse)                             'die oberen 8 Bit von Adresse speichern
       I2cstart                                                 'start condition
       I2cwbyte &B1010_0000                                     'slave address, nur ein Beispiel
       I2cwbyte Adresse_high                                    'high address
       I2cwbyte Adresse                                         'low address, es werden automatisch die unteren 8 Bits genommen
       I2cwbyte 44                                              'value to write
       I2cstop                                                  'stop condition
       Waitms 10
    
    Do
    
    Loop

    MFG
    Dieter

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, vielen dank. jetzt kann ich endlich das 24c16 eeprom beschreiben und lesen.
    mfg pebisoft

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    ich brauche die adresse nicht aufteilen. wenn ich "i2cwbyte wordadresse" eingebe, funktioniert es.

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, wie heisst der i2c-eeprom für 32 oder 64kbyte den ich auf die gleiche weise programmieren kann wie den 24c16.
    mfg pebisoft

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    24c32 und 24c64

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    58
    Beiträge
    247
    Hallo

    Dann wohl eher 24C256 Oder 24C512, da 32 KByte bzw 64 KByte gefragt waren.



    MFG
    Dieter

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    den 24c64 kann ich auch programmieren, aber er liest nur kauderwelsch aus. hat das etwas mit der word-daten zu tun, der verschwendet nämlich für ein byte was ich rein schreibe 2 byte.
    mfg pebisoft

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    58
    Beiträge
    247
    Hallo

    ich brauche die adresse nicht aufteilen. wenn ich "i2cwbyte wordadresse" eingebe, funktioniert es.
    Anscheinend hast du meinen rat doch nicht befolgt.

    Code:
    'Einstellen des I"C Buses +++++++++++++++++++++++++++++++++++++++++++++++++++++
    Config Scl = Portd.6                    'PIN für I2C Bus
    Config Sda = Portd.7
    
    
    'Definition der Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++
    Declare Sub Read_byte(byval Ee_adresse As Byte)
    Declare Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
    Declare Sub Erase_eeprom(byval Ee_adresse As Word )
    
    
    
    'Routine zum schreiben von Daten in das EEPROM ++++++++++++++++++++++++++++++++
    Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
    Disable Interrupts
    Print Ee_adresse
         Temp = High(ee_adresse)            'MSB von ee_adresse speichern
         I2cstart                           'generate start
        I2cwbyte &B10100000                 'write addres of24C65
        I2cwbyte Temp                       'write high adress
        I2cwbyte Ee_adresse                 'write low adress
        I2cwbyte Ee_daten                   'write daten
        I2cstop                             'Stop senden zum schreiben
    Enable Interrupts
    End Sub
    
    'Routine zum lesen von Daten aus dem EEPROM ++++++++++++++++++++++++++++++++++++
    Function Read_byte(byval Ee_adresse As Byte)
    Disable Interrupts
        Temp = High(ee_adresse)             'MSB von ee_adresse speichern
        I2cstart                            'generate start
        I2cwbyte &B10100000                 'write addres of 24C65
        I2cwbyte Temp                       'write high adress
        I2cwbyte Ee_adresse                 'write low adress
        I2cstart                            'generate repeated start
        I2cwbyte &B10100001                 'write read commando
    
        For C = 0 To 1000
          I2crbyte Daten , Ack              'LSB von Spannung einlesen
          I2crbyte Temp , Ack               'MSB von Spannung einlesen
          Spannung = Temp * 256             'MSB an die richtige Stelle von Spannung setzen
          Spannung = Spannung + Daten       'LSB von Spannung dazu und fertig
          Print C ; "," ; Spannung          'Ausgeben  Speicherstelle, Spannung
        Next C
        I2cstop
     Enable Interrupts
    End Function
    
    'Routine zum löschen von Daten in dem EEPROM Dauer ca 5,5 Sek ++++++++++++++++++
    Sub Erase_eeprom(byval Ee_adresse As Word )
    Disable Interrupts
     For B = 0 To 8192 Step 64              '128 Page a 64 Byte löschen
         Temp = High(b)                     'MSB von B speichern
        I2cstart                            'generate start
        I2cwbyte &B10100000                 'write addres of24C65
        I2cwbyte Temp                       'write high adress
        I2cwbyte B                          'write low adress
    
         For C = 1 To 64                    'Page weise beschreiben mit 255
            I2cwbyte 255
        Next C
    
        I2cstop                             'Stop senden zum schreiben
        Waitms 40                           '8 * 5 ms warten zum schreiben der Pages
        Next B
    Enable Interrupts
    End Sub
    I2cwbyte Ee_adresse 'write low adress

    EE-adresse ist zwar als WORD definiert, beim schreiben werden aber nur die unteren 8 Bits gesendet, da der Befehl I2Cwbyte heißt. Daher der Umweg mit Temp = High(ee_adresse) .

    In der Funktion Read_byte werden jetzt 1000 * 2 bytes ausgelsen, zusammen gesetzt in eine Word Variable und dann ausgegeben.

    Erase_eeprom schreibt das ganze EEPROM mit 255 voll und zwar wird immer erst eine ganze Page geschrieben. Das geht dann schneller.

    Hoffe der Code hilt dir etwas.

    MFG
    Dieter

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, bei read hast du die adresse als bytevarivale, ist das richtig?
    mfg pebisoft

  10. #20
    Gast
    Hallo

    Ja, das ist ein klarer Fehler , sollte schon word sein.

    MFG
    Dieter

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress