Hi,
kann es sein das Du den Wert mit dem falschen Wert Und-verknüpfts ?
Sollte mit 0xF8 geschehen, um die unteren 3 Bits auszublenden !
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
Code:;------------------------------------------------------ ; 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
Viel Spaß
Gruß
Tobi
Hi,
kann es sein das Du den Wert mit dem falschen Wert Und-verknüpfts ?
Sollte mit 0xF8 geschehen, um die unteren 3 Bits auszublenden !
Nein, an dem liegts auch nicht. Denn den Wert 0xF8 hatte ich auch schon eingegeben. Hatte auch nicht funktioniert.
Viel Spaß
Gruß
Tobi
Du machst ständig "TWSR und 0x00".
Logisch, dass du da dann auch ständig 0x00 als Ergebnis bekommst.
MfG
Stefan
Vorher stand da "TWSR and 0x02",
es muss heissen "TWSR and 0xF8".
Oder lass mal die ganze AND-geschichte weg, denn die prescaler Bits sollten ja sowieso nicht gesetzt sein, dann gehts auch.
Also ich hab jetzt den Vergleich mit dem Statusregister weggelassen.
Funktioniert auch super. Danke euch.
Aber mich würde trotzdem mal interessieren warum es nicht geht wenn
ich das TWSR abfrage und mit einem bestimmen Code wie 0xF8 vergleiche.
Wenn da mal ein Fehler, aus irgentwelchen Gründen, auf tritt, kann der mir das ja garnicht sagen.
Viel Spaß
Gruß
Tobi
Vergleichen solltest Du schon, aber das AND nach dem auslesen kannst Du weglassen.
Hast Du nicht 'nen Port übrig, um zu debugzwecken den Wert an LEDs anzuzeigen ?
Gute Idee. Bloß nen direkten Port hab ich jetzt nicht zur Verfügung.
Aber ich kann ja gleich die LED's am PCF8574 nehmen den ich
am I²C habe. Müsste ja funktionieren.
Viel Spaß
Gruß
Tobi
Möchte nur deponieren, dass es den Zustand 0x00 schon auch gibt, das ist ein saumässig grauslicher Fehler auf der Leitung.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
ja jetzt hatts auch mit dem Vergleich des TWSR funtioniert.
Ich hatte erst das TWSR ausgelesen und mir an einen Port
über LED's zeigen lassen. So wies es linux_80 vorgeschlagen hatte.
Und dann verglichen wie folgt.
dankeCode:lds r16,TWSR andi r16,0x08 ;bei Start Bedingung cpi r16,0x08 brne Error ....
Viel Spaß
Gruß
Tobi
Lesezeichen