Halli hallo, ich bin gerade dabei in 8051er (AT89S52) Assembler I2C zu implementieren, damit ich dann später die RTC DS1307 auslesen kann. Momentan habe ich noch keine Geräte an den Bus angeschlossen, sondern teste einfach nur so mit dem Logikanalysator, was mein µC ausgibt. Nun bin ich eigentlich schon relativ zufrieden mit der Ausgabe auf meinen beiden I2C-Leitungen, nur der Protokoll-Analyzer vom Logikanalysator leider noch nicht. Der erkennt nämlich doofer weise nicht alle 8 Bits, die ich sende als ein Byte, sondern nur die ersten sieben Bits als zu dem Byte zugehörig. Das 8.Bit deutet er dann als "Read". Leider stehe ich hier auf dem Schlauch und Frage mich, ob es einfach nur falsch interpretiert wird oder ob ich noch irgendwo einen Fehler reingehauen hab.. Ich habe den Code und ein Screenshot vom LA angehängt.. Ich würde mich freuen, wenn mir hier jemand helfen könnte :) Viele Grüße anon1234
War es nicht so, dass bei I²C die erste Übertragung des Masters immer die Adresse des Slaves (7 Bit) und ein R/W-Bit (Lesen/Schreiben vom/zum Slave) ist?
Hmm, grundsätzlich sollte man, der besseren Leßbarkeit wegen, bei Verwendung von Registern mit "besonderer" Bedeutung Kommentare verteilen (in deinem Falle, dass R7 wohl die Adresse des Slaves am I2C Bus sein soll... bei dir hier der Wert 055h). Namen für die Portbits (und einer der richtig schönen Vorteile der MCS-51 Familie ist deren Bitadressbarkeit auch bei den Portbits) wären auch nicht "schlecht"... scl equ 0a7h ; 0A7h = P2.7 sda equ 0a6h ; 0A6h = P2.6 So sieht man im Programm auch sofort den Zusammenhang Deine Adresse 055h entspricht 0101.0101 binär und das niederwertigste Bit ist eine 1 !!!! Eine I2C-Adresse ist aber nur 7 !!!!! Bit lang. Bei den Startconditions ist das gesendete niederwertigste Bit der Indikator, ob der I2C Bus beschrieben oder von ihm gelesen werden soll. Du darfst also nicht 8 Bits der Adresse hinausschieben, sondern nur 7 und das niederwertigste Bit entscheidet, ob beim nächsten Zugriff auf den Bus gelesen oder geschrieben werden soll ! Würdest du als Slave-Adresse 054h angegeben haben, würde der Bus zum Schreiben gestartet werden ... Gruß, Ralph
Mr. Claudius schrieb: > War es nicht so, dass bei I²C die erste Übertragung des Masters immer > die Adresse des Slaves (7 Bit) und ein R/W-Bit (Lesen/Schreiben vom/zum > Slave) ist? Claudius war schneller (smile es hat etwas gedauert, bis ich wieder wußte, welche Adresse P2 hat)
Vielen vielen dank für eure schnellen Antworten.. Mr. Claudius schrieb: > War es nicht so, dass bei I²C die erste Übertragung des Masters > immer > die Adresse des Slaves (7 Bit) und ein R/W-Bit (Lesen/Schreiben vom/zum > Slave) ist? Ralph S. schrieb: > Eine I2C-Adresse ist aber nur 7 !!!!! Bit lang. Bei den Startconditions > ist das gesendete niederwertigste Bit der Indikator, ob der I2C Bus > beschrieben oder von ihm gelesen werden soll. > > Du darfst also nicht 8 Bits der Adresse hinausschieben, sondern nur 7 > und das niederwertigste Bit entscheidet, ob beim nächsten Zugriff auf > den Bus gelesen oder geschrieben werden soll ! Aah dann wird mir jetzt einiges klar :D ich habe garnicht vorgehabt irgendeine spezielle Adresse rauszuschreiben sondern hab einfach mal testweise 55h rausgeschrieben um zu sehen ob meine write-funktion funktioniert.. Also da wär es diesmal wohl besser gewesen, sich erst anzugucken, was für daten mal geschickt werden müssen.. Ralph S. schrieb: > Hmm, grundsätzlich sollte man, der besseren Leßbarkeit wegen, bei > Verwendung von Registern mit "besonderer" Bedeutung Kommentare verteilen > (in deinem Falle, dass R7 wohl die Adresse des Slaves am I2C Bus sein > soll... bei dir hier der Wert 055h). sorry das mit den kommentaren und den Namen für die Portbits mache ich normaler weise auch.. aber weil es jetzt heute abend schnell gehen musste hab ichs erstmal weggelassen..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.