wird eigenetlich darauf eingegangen, wenn der slave nack sendet? das wird ja nicht überprüft .. hmm komisch
wie ich das protokoll vestanden hab.. muss der empfänger der daten nach 8 bit immer ack oder nack geben, aber der 9. impuls is mir da noch nicht untergekommen..
und warum nur bei write..
wird eigenetlich darauf eingegangen, wenn der slave nack sendet? das wird ja nicht überprüft .. hmm komisch
Ich meine, die Erlärungen oben stimmen nicht ganz:
1. PULSE:
Macht nicht einen HIGH Puls, sondern invertiert den aktuellen Zustand kurzzeitig: Wenn's vorher HIGH war, macht PULSE einen LOW Puls, sonst einen HIGH Puls.
2. DEACT:
Schaltet einen Port um auf "Eingangs-Richtung". Den Befehl braucht man wirklich: Nur das Umschalten auf "Ausgangs-Richtung" passiert automatisch (nämlich sobald man was auf den Port schreibt); Umschalten auf "Eingangs-Richtung" MUSS man immer manuell (mit DEACT). Man braucht DEACT nur dann nicht hinschreiben. wenn der Port vorher noch nie Ausgang war (nach dem Programmstart sind alle Ports auf "Eingangs-Richtung").
I2C und ACK / NACK / 9. Impuls:
Stimmt:
Auf dem I2C-Bus muss der Empfänger jedes Byte mit ACK oder NACK quittieren. Deshalb werden für jedes Byte 9 Bits übertragen: 8 Bits vom Sender zum Empfänger, und ein Bit (nämlich entweder ACK oder NACK) vom Empfänger zum Sender.
9. Impuls nur beim WRITE:
Das Basic Programm gilt für einen I2C Bus Master: Das ist derjenige, der die SCL Leitung bedient, hier die CC1.
Wenn der Master was sendet (Aufruf WRITE), schickt er zuerst seine 8 Daten-Bits jeweils mit einem SCL Puls raus, und gibt dann den 9. Puls zum Einlesen der Quittung vom Empfänger.
In diesem Programm wird allerdings die Quittung des Empfängers (absichtlich) nicht ausgwertet.
Wenn man die Quittung auswerten will, dürfte es nicht heissen
PULSE SCL
sondern müsste so ähnlich heissen wie
DEACT SDA 'SDA ist jetzt Eingang
SCL = ON
Daten = SDA ' Quittung lesen
SCL = OFF
Beim READ gibt's natürlich auch einen 9. Impuls; nur sieht man den nicht in dem BASIC-Ausschnitt oben:
Der Master muss nach dem Lesen eines Bytes entweder "ACK" oder "NACK" aufrufen, und genau da wird dann das 9. (quittungs-)Bit mit PULSE übertragen.
ok supi danke vielmals
warum wird das absichtlich nicht ausgewertet, das ack bzw. nack?
verwendet pulse jetzt =1/=0 oder =ON/=OFF?
kannst du mir vielleicht noch die asm-variante erklären: http://www.the-starbearer.de/Praxis/....htm#i2csystem
ist der i2c-bus jetzt tatsächlich vorhanden auf der c-control unit oder wird der nur emuliert (weil ja 2 beliebige digiports)
Na ja, ich würde mal sagen: "mit dieser Software konnen die beiden Ports als I2C Bus genutzt werden".
Mit der asm-variante können zwei andere Ports als I2C-Bus genutzt werden, und zwar die beiden Ports, die die CC1 auch selbst als I2C-Bus benutzt, um mit dem EEPROM Daten auszutauschen. Dieser Bus hat eine ganz erheblich grössere Datenübertragungsrate.
ON und OFF sind nur andere Schreibweisen: OFF ist 0 (ein WORD mit lauter 0), und ON ist -1 (ein WORD mit lauter 1).
Warum nicht ausgewertet: eigentlich aus Bequemlichkeit:
Ein Slave am I2C-Bus sollte immer ACK sagen, wenn man ihm was sendet. Wenn er das nicht tut, ist irgend was faul, zum Beispiel: Er ist kaputt, oder nicht (richtig) angeschlossen, oder ... -- und was soll man jetzt im Programm machen? Wird auf jeden Fall schwierig und kommt selten vor (hofft man zumindest, als Programmierer).
Aus Bequemlichkeit macht man deshalb im Programm gar nichts spezielles (frägt nicht mal ab, ob die Übertragung überhaupt gut gegangen ist), sondern tut so, als wäre schon alles OK.
Und der Anwender des Programms wundert sich dann, wenn nicht das passiert, was er erwartet hat, und schimpft über die Hardware, oder die Programmierer, oder das Leben an sich. Zumindest aber über Bill Gates und Windows.
ok danke..
ich hab gesehen, dass man statt sda=ON auch deact sda machen kann.. das hat irgendwas mit dem ausgabetreiber des tristate zu tun.. aber ich versteh nicht ganz was!
bitte helft mir..
Heißt einfach, das der Controller dann den Bus freigibt -> durch den Pull-up Widerstand hat man dann einen High Pegel.
So einfach ist das also
jo, kannst du mir das genauer auch erklären?
Lesezeichen