mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik i2c-eeprom 24lc65


Autor: Ralph Dillhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.