PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TWI



Sven04
07.07.2007, 16:54
Hi Leute,

ich habe jetzt schon längere Zeit im RN-Wiki und im Forum geschaut, jedoch keine genaue Lösung zu meiner Frage gefunden. Ich habe das Problem, dass ich nicht weiß, ob ich mit dem TWI Daten an mein Slave-Board senden kann und über meinen Master auch Daten von diesem Board wieder abholen kann, sodass ich ihm Parameter übergebe und vom Slave wieder andere Parameter bekomme?
Ist es also möglich, dass ich von meinem Master an mein Slave was sende und vom Slave wieder etwas zurückbekomme?


MfG
Sven

uwegw
07.07.2007, 17:17
ja............................

Sven04
07.07.2007, 17:24
Hätte jemand ein Bespiel für mich, wie die Programmierung in etwa aussehen müsste oder kann mir jemand sagen, was ich von dem im RN-Wiki beschriebenen Beispielen benutzen müsste?


Gruß,
Sven

linux_80
07.07.2007, 20:23
Hallo,

Du kannst Die Beispiele vom Wiki in sachen TWI usw. genauso übernehmen wie sie da stehen, dann machen die das was dabei steht, ist doch Beispiel genug.

Am Ende einer Wiki-Seite stehen dann meist weiterführende Links, die sich mit dem geleichen Thema beschäftigen.

Sven04
08.07.2007, 23:16
Hab jetzt im Wiki gefunden, dass es ein Master gibt der senden und empfangen kann. Geht dies genauso auch mit einem Slave?

darwin.nuernberg
09.07.2007, 09:53
Es gibt auch eine sog. Multimaster Lösung oder
Du "Pollst" den/die slaves in regelmäßigen Abständen vom Master aus an und fragst diese ab.

Solange müssen die Slaves dann eben die Resultate zwischenspeichern.

In Bascom sind auch einige Beispiele dabei.
Allerdings habe ich noch keinen Slave selbst programmiert sondern fertige Bausteine z.B. PCF8574 verwendet.

Als erstes braucht du ein Array (im Master) aus BYTE Werten, in welchen Du die Antworten ablegen kannst.
An erster Stelle kommt in das Array Dein Abfragebefehl (kann auch mehrere Bytes haben)

Mit


I2CRECEIVE slave, var , b2W, b2R


I2creceive &H40 , Buf(1) , 2 , 1 'send two bytes and receive one byte



gibst Du die Adresse des Slaves und den Variablennamen des Array an,
nun noch wieviele Bytes (aus dem Array) gesendet werden sollen (also dein Abfragebefehl) und wieviele Bytes empfangen werden sollen.

Der Befehl überschreibt dann die Inhalte des Arrays mit den empfangenen Daten vom Slave.

Mit dem einen Befehl wird also gesendet und empfangen. Einfach so auf daten Warten ist nicht möglich, da die Slaves erst mal eine Aufforderung sum senden erhalten müssen.

*KLARSOWEIT?*

Torsten_G
09.07.2007, 12:44
Hallo,

gab´s beim I2C-Konzept nicht auch die Möglichkeit, einen Hardware-Interrupt am Master zu benutzen, um Slaves die Möglichkeit zum aktiven Senden zu geben?

Ich meine, da in Bascom schon mal was gesehen zu haben...

Grüße

Torsten

uwegw
09.07.2007, 12:49
Im ursprüngliche Standard ist das nicht zwingend vorgesehen. Es wird aber von manchen I2C-Chips unterstützt, und auch in der Kabelbelegung nach RN-Definition ist eine Leitung dafür vorgesehen.

Sven04
01.08.2007, 20:14
Hi Leute,

ich habe jetzt meine Schaltung soweit aufegbaut und mit Twi versehen, jetzt wollte ich nur noch mal fragen, ob ich nur einzelnen Bytes oder auch Strings über den Bus senden kann?

MfG
Sven

Pascal
01.08.2007, 20:43
Ein string besteht doch aus mehreren einzelnen Bytes. Also ist das kein Problem. Je nachdem, was du machen willst, musst du halt ein Protokoll für die Übertragung verwenden. Dazu gabs in letzter Zeit ziemlich viele threads.

Sven04
03.08.2007, 21:19
Ich habe jetzt einaml versucht das Bascom Beispiel im RN-Wiki über Twi so umzuschreiben, dass es komplette Strings sendet. Kann ir jemand sagen wie dies aussehen müsste, damit ich komplette Strings über Twi senden kann?

Gruß
Sven

darwin.nuernberg
04.08.2007, 21:01
Anders betrachtet ist ein String doch nichts anderes als ein Array von Zeichen (Char=Byte).

Reicht die diese Info?

Sven04
04.08.2007, 23:19
Ich steh gerade auf dem Schlauch. Kannst du mir sagen wie du dies genau meinst und wie ich die in meiner TWI Übertragung umsetzen könnte, damit ich ganze Strings schickcne kann?


Gruß
Sven

fuerstfanta
29.11.2007, 17:42
Hallo!

Sagt mal, funktioniert das bei euch mit diesem Befehl



I2creceive &H40 , Buf(1) , 2 , 1 'send two bytes and receive one byte


wenn ihr versucht, mehr als ein Byte einzulesen? Irgendwie will er bei mir nicht. Der Master sagt nach dem ersten empfangenen Byte immer, daß alles da ist! Kann mir dazu jemand einen Tipp geben?

Vielen Dank schonmal

Gruß

SMILEY