Go Down

Topic: Arduino steuert device über I²C und SPI an (Read 4646 times) previous topic - next topic

michael_x

Wenn du die Wire library verwendest, ist die Adresse immer 0x58

Du rufst entweder (bzw. erst) beginTransmission (0x58); // schreiben
dann eventuell requestFrom(0x58,1); // lesen

milito

ok, d.h. die library an sich macht es. Verstehe ich es richtig, ich sende standardmäßig meine 58h und wenn ich jetzt zb wire.write(...) sage,weiß macht die library einen shift nach links und habe dann die Adresse B0h?
Wenn ich den Befehl wire.Requestfrom(...) macht die library daraus einen read befehl, d.h. der slave weiß dass er daten am Master senden. Stimmt das so?

Wie ist denn das shiften bei dem read vom slave, wird da mt einer 1 nach links geshiftet?
mir uist halt auch der funktionsprinzi wichtig :D

milito

bzw durch shiften kann ich doch eine 7 bit adresse  nicht in eine 8 bit adresse umwandeln. das is mir unklar

michael_x


Quote
durch shiften kann ich doch eine 7 bit adresse  nicht in eine 8 bit adresse umwandeln. das is mir unklar

Doch:

Code: [Select]
byte address = 0x58;
const byte TE_read = 1;

byte twi_slarw = TE_read;
twi_slarw |= address << 1;

Serial.println (twi_slarw,HEX); // sollte "B1" ausgeben...


Vielleicht ich verstehe dein Problem nicht.

Quote
mir uist halt auch der funktionsprinzi wichtig :smiley-grin:

Dann hol dir den relevanten Code aus der library in deinen Sketch und krieg es ohne <Wire.h> ans laufen.
Libraries enthalten nichts das nicht auch direkt im sketch stehen könnte. Aber einiges, was für einen Prinzip-Test evtl. überflüssig ist. 
Sehr mühsam , aber lehrreich. ;)

milito

ok habe es veratanden hehe danke. :D
Also d.h. wenn ich die Wire.wirte) verwende, weiß dadurch mein controller, dass ich schreiben möchte und setzt das R/W auf 0 und wenn ich die Requestfrom() dann eine 1.

Habe ich es richtig verstanden?
Nur findest du in der Library diese funktionen nicht wie write usw.

Eisebaer

hi

Quote
durch shiften kann ich doch eine 7 bit adresse  nicht in eine 8 bit adresse umwandeln. das is mir unklar


doch, weil die sieben bits "rechts" im byte stehen. nach dem shiften stehen sie "links" und ganz "rechts" dann je nachdem die 0 oder 1.

aus:
01000101  wird, wenn Du eine 1 reinschiebst:
10001011  oder, wenn Du eine 0 reinschiebst:
10001010

die adresse bleibt also voll vorhanden.

gruß stefan
nimm abblockkondensatoren!  100nF.  glaub mir, nimm abblockkondensatoren!


milito

Also danke für die tollen erklärungen.
Das mit dem shiften habe ich verstanden, nur was ich noch nicht ganz verstehe ist , wie weß der kontroller ob er das Read bit(1) oder Write bit(0) mitsendet? -> wäre es vllt von der funktion abhängig , die man aufruft? , z.b. rufe ich wire.write(c) , dann sendet er eine 0 mit der slave adresse und wenn ich wire.requestfrom(...) aufrufe, sendet er eine 1 als R/W bit? -> Liege ich da richtig?


Danke für eure Unterstützung :)



Go Up