i2c-eeprom 24lc65

Gast #93892
Hallo,

seit Samstag versuche ich ein eeprom vom Typ 24lc65 an den SW-i2c-bus
anzukoppel. Von der Hardwareseite gab es keine Probleme.

Verwende ich ein beschriebenes eeprom, kann ich die Daten auch
wunderbar auslesen. Was überhaupt nicht funktioniert ist das
beschreiben des eeproms. Mitlerweile habe ich keine Idee mehr wo ich
den Fehler suchen soll.

Verwendet wird ein ATmega161 mit 8MHz Taktfrequenz.
Angeschlossen am SW-i2c-bus sind ein Timer PCF8593 und ein Standard
Display über ein PCA9555D.
Die Leitungen A0-A2 des eeproms sowie WP liegen auf GND.

Kann mir jemand ein Tipp geben?

MfG
Ralph

;---------------------------------------------------------------------;
i2c ack
; Queries for I2C Achknowledge (SDA=Lo)
; T Flag in SREG serves as an error flag
; it is set if there was NAK and cleared if there was an ACK
;---------------------------------------------------------------------
i2c_ack:
    clt      ; clear error flag
    sbi PORTB,sda    ; set SDA Hi
    cbi DDRB, sda    ; set SDA to input (pull-up active)
    sbi PORTB, scl    ; set SCL to Hi
    rcall wait5us
i2c_ackloop:
    sbis PINB, scl    ; Test, ob Wait-State des Slave
    rjmp i2c_ackloop
    sbic PINB, sda    ; reads SDA
    set      ; set error flag when NAK
    cbi PORTB, scl    ; set SCL to Lo
    sbi PORTB, sda    ; set SDA to Hi
    rcall wait5us
    ret

;i2c ack ende
;---------------------------------------------------------------------

;---------------------------------------------------------------------
; i2c write
; Writes eight bits to I2C bus and queries the acknoledge bit from
receiver
;---------------------------------------------------------------------
i2c_write:
           sbi     DDRB, sda            ; set SDA to output
           cbi     PORTB, sda           ; set SDA to Lo
           ldi     bitcntr, 8           ; eight bits to write
_wrt_bit:
           sbrc    i2c_buffer, 7        ; if MSB = Hi then
           sbi     PORTB, sda           ; set SDA to Hi
           nop
           sbi     PORTB, scl           ; set SCL to Hi
           rcall   wait5us
           cbi     PORTB, scl           ; set SCL to Lo
           cbi     PORTB, sda           ; set SDA to Lo
           rcall   wait5us
           lsl     i2c_buffer           ; shift i2c_buffer one bit
left
           dec     bitcntr
           brne    _wrt_bit
           rcall   i2c_ack              ; query acknowledge
           ret

;i2c write ende
;---------------------------------------------------------------------

;---------------------------------------------------------------------
;AT24C64 Eeprom write 1010xxx(fix-Adr)0(write) xxx=000
;---------------------------------------------------------------------
i2c_write_eeprom:
        rcall i2c_start      ;I2C Start Condition
        ldi i2c_buffer, 0b10100000  ;Slave addresse
        rcall i2c_write      ;Write Slave address
  ldi i2c_buffer, 0b00000000  ;address1 byte
  rcall i2c_write      ;Write address1
  ldi i2c_buffer, 0b00000001  ;address0 byte
  rcall i2c_write      ;Write address0
        ldi i2c_buffer, 'T'    ;data byte
        rcall i2c_write      ;Write Data byte
        rcall i2c_stop      ;I2C Stop Condition
i2c_weeprom_loop:
        rcall i2c_start      ;I2C Start Condition
        ldi i2c_buffer, 0b10100000  ;Slave addresse
        rcall i2c_write      ;Write Slave address
  brts i2c_weeprom_loop    ;Ack Polling
  ret

;AT24C64 Eeprom write ende
;---------------------------------------------------------------------

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.