bedboy27
19.08.2008, 21:56
Hallo
hab nur noch ein kleines Problem. Der TWI (I²C) funktioniert gut.
Aber nur wenn ich das TWSR nicht nach dem richtigen Statuscode
abfrage.
Das TWSR hat immer nach jeder Byteübertragung oder Startbedingung den
Code 0x00. Obwohl z.B. nach der Startbedingung eigentlich 0x08 im TWSR stehen müsste.
Könnte mir da mal jemand helfen???
MFG
Tobi
;------------------------------------------------------
; START Condition
;------------------------------------------------------
send:
ldi akku,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
sts TWCR,akku
wait1:
lds akku,TWCR
sbrs akku,TWINT
rjmp wait1
campere2:
lds akku,TWSR
andi akku,0x00
cpi akku,Start
brne Error1
;------------------------------------------------------
; Adresse
;------------------------------------------------------
Adresse:
ldi akku,SLA_8574
sts TWDR,akku ; Speichert Slave-Adresse in TWDR
ldi akku,(1<<TWINT)|(1<<TWEN)
sts TWCR,akku
wait2:
lds akku,TWCR
sbrs akku,TWINT
rjmp wait2
campere1:
lds akku,TWSR
andi akku,0x00
cpi akku,SLA_W
brne Error2
daten:
mov data,r18
sts TWDR,data
ldi akku,0b10000100
sts TWCR,akku
wait3:
lds akku,TWCR
sbrs akku,TWINT
rjmp wait3
campere3:
lds akku,TWSR
andi akku,0x00
cpi akku,0x00
brne Error2
;------------------------------------------------------
; STOP Condition
;------------------------------------------------------
stop:
ldi akku,(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)
sts TWCR,akku
ret
hab nur noch ein kleines Problem. Der TWI (I²C) funktioniert gut.
Aber nur wenn ich das TWSR nicht nach dem richtigen Statuscode
abfrage.
Das TWSR hat immer nach jeder Byteübertragung oder Startbedingung den
Code 0x00. Obwohl z.B. nach der Startbedingung eigentlich 0x08 im TWSR stehen müsste.
Könnte mir da mal jemand helfen???
MFG
Tobi
;------------------------------------------------------
; START Condition
;------------------------------------------------------
send:
ldi akku,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
sts TWCR,akku
wait1:
lds akku,TWCR
sbrs akku,TWINT
rjmp wait1
campere2:
lds akku,TWSR
andi akku,0x00
cpi akku,Start
brne Error1
;------------------------------------------------------
; Adresse
;------------------------------------------------------
Adresse:
ldi akku,SLA_8574
sts TWDR,akku ; Speichert Slave-Adresse in TWDR
ldi akku,(1<<TWINT)|(1<<TWEN)
sts TWCR,akku
wait2:
lds akku,TWCR
sbrs akku,TWINT
rjmp wait2
campere1:
lds akku,TWSR
andi akku,0x00
cpi akku,SLA_W
brne Error2
daten:
mov data,r18
sts TWDR,data
ldi akku,0b10000100
sts TWCR,akku
wait3:
lds akku,TWCR
sbrs akku,TWINT
rjmp wait3
campere3:
lds akku,TWSR
andi akku,0x00
cpi akku,0x00
brne Error2
;------------------------------------------------------
; STOP Condition
;------------------------------------------------------
stop:
ldi akku,(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)
sts TWCR,akku
ret