habe ein Frage bezüglich, der Ansteuerung von I2c /SPI devices über den Arduino Mega2560.
Und zwar muss man ja die Devices adressieren, die man ansteuern möchte, nun möchte ich aber es nicht jedesmal neu programmieren müssen, um ein anderes I²C/SPI device anzusteuern.
Kann man die Adressierung bzw. die Programmierung des Devices Variabel gestalten, z.b. dass ich über meine GUI die Device / Slave Adresse sende und mein Arduino diese empfängt und er damit diese ansteuern kann?
Beim SPI werden die Devices nicht über eine Adresse angesprochen, sondern über den Chip Select Pin wird gesteuert für welches Device die darauf folgenden Daten bestimmt sind.
Es gibt aber auch IC's welche über SPI gesteuert werden aber keinen Chip Select Pin haben, wie z.B. der TLC5940.
Natürlich kannst Du die Adresse bzw Chip-Select Pin per Tastatur oder ein anderes Interface eingeben.
Du kannst auch die vorhandenen Adressen per I2C Scanner (Arduino Playground - I2cScanner) bzw durch Auslesen eines Registers des SPI-Devices durch Scanning aller verfügbaren Pins des Arduinos erfahren und dann dementsprechend die Devices ansprechen.
Du mußt dann aber wissen was wo dranhängt und wie und mit welchen Daten es angesprochen werden muß.
In deinem Fall müsstest Du die Addresse mit Serial.read als zwei Byte Werte einlesen und daraus den entsprechenden Integer Wert bilden.
Diesen dann im obigen Beispiel an die DeviceAddress Variabel übergeben.
Hi :D, den Unterschied zwischen I2c und SPi verstehe ich, aber danke für den link, der ist echt hilfreich.
Mein Problem ist, in diesem MAXIM board gibt es ja mehrere Register z.b. register 0 für LEDStrom 1 usw.
Meine frage ist , wie mache ich es dass er den Befehl z.b. in dem richtigen Register schreibt bzw wie mache ich das wenn ich den Strom der LED-kette1 ändern möchte?
Gebe ich es als Zahl ein oder als Befehl?
Welches MAXIM Board? Wo ist der Link zum Datasheet? Wie hast Du das Board an den Arduino angeschlossen? Wir haben nur die Information, die Du hier gepostet hast, mehr können wir nicht wissen, solange Uwe's Kristallkugel immer noch kapput ist.
Kann sein, dass Du das vorhattest, aber im ganzen vorangegangenen Thread kann ich weder "MAXIM" noch "16826" finden, also hast Du die relevanten Infos sicher noch nicht geschrieben.
Dieser wird über I²C an dem Arduino angeschlossen.
Wozu dann SPI in's Spiel bringen?
Post mal Dein Verdrahtungsschema oder mach ein entsprechendes Foto von Deiner Verdrahtung.
So die erste frage ist ,müsste ich eventuell auch den EN - Pin mit anschliessen?
Je nachdem, wie Du den Chip sonst verdrahtet hast. Evtl. kannst Du ihn auch einfach hochziehen (an Vcc anschliessen).
SO jetzt hast du die von dir benötigten Daten.
Beinahe. Du redest von einem Board. Das Datenblatt beschreibt aber nur einen Chip. Welches Board verwendest Du?
Wenn Du wirklich nur Vcc, GND, SDA und SCL verdrahtet hast, solltest Du EN an Vcc anschliessen. Und Pull-Ups für die beiden I2C-Leitungen solltest Du auch noch einsetzen.
pylon:
Auch in jenem Thread ist das Board nicht verlinkt. Ich hole das deshalb hier nach: http://datasheets.maximintegrated.com/en/ds/MAX16826EVKIT.pdf. Falls Du nicht dieses Board hast, bist Du in der Pflicht, den richtigen Link nachzuliefern.
Wenn Du wirklich nur Vcc, GND, SDA und SCL verdrahtet hast, solltest Du EN an Vcc anschliessen. Und Pull-Ups für die beiden I2C-Leitungen solltest Du auch noch einsetzen.
Hi pylon, da genau das ist das Board, habe allerdings den ControllerBoard abgetrennt und verwende nur den LED Driver Board.
So jetzt die frage zu dem EN. Du sagtest ja ich sollte den EN-Pin an VCC setzen. So jetzt dachte ich mir, kann ich nicht einen Digitalen I/O am Arduino nehmen. Diese würde ich sicherheitshalber am Anfang auf LOW setzen und wenn ich das Brauche dann auf HIGH ?
Und zu den PULL-UPs. Die bräuchte ich doch eigentlich nicht oder täusche ich mich? Woher weißt du, dass ich PUll-ups brauche? Müssten doch schon integriert sein
Bzw. diese Pull-ups gehen ja von SDA/SCL an VCC vom arduino oder an was?
Weil ich das MAXIM Board nicht über den Arduino versorge sondern mit einem extra netzteil:D
So jetzt die frage zu dem EN. Du sagtest ja ich sollte den EN-Pin an VCC setzen. So jetzt dachte ich mir, kann ich nicht einen Digitalen I/O am Arduino nehmen. Diese würde ich sicherheitshalber am Anfang auf LOW setzen und wenn ich das Brauche dann auf HIGH ?
Ja, das geht auch, wenn Du den GPIO dafür opfern willst.
Und zu den PULL-UPs. Die bräuchte ich doch eigentlich nicht oder täusche ich mich? Woher weißt du, dass ich PUll-ups brauche? Müssten doch schon integriert sein
Der Arduino hat nur sehr schwache Pull-Ups, die genügen in den meisten Fällen nicht. Wo müssten die integriert sein? Im MAXIM-Board? In Schema sind sie zumindest nicht aufgeführt, also muss ich davon ausgehen, dass es sie nicht gibt. Es ist auch nicht üblich, sie bei I2C auf einem Board zu integrieren, da es sie nur einmal pro Bus braucht.
Bzw. diese Pull-ups gehen ja von SDA/SCL an VCC vom arduino oder an was?
Weil ich das MAXIM Board nicht über den Arduino versorge sondern mit einem extra netzteil:D
Hast Du aber die Massen von beiden Boards verbunden?
Und ja, die Pull-Ups gehen an Vcc, ob Du die vom Arduino oder vom Board nehmen willst, spielt keine Rolle, aber es darf nicht Vin sein und ich sehe nicht, ob Vcc überhaupt vom Board rausgeführt wird. Die Arduino-Seite dürfte also einfacher sein. Nimm mal 3k3 oder 4k7, das sollte bei nicht allzu langen Verbindungen von SDA und SCL in etwa richtig kommen.
Hast Du aber die Massen von beiden Boards verbunden?
Und ja, die Pull-Ups gehen an Vcc, ob Du die vom Arduino oder vom Board nehmen willst, spielt keine Rolle, aber es darf nicht Vin sein und ich sehe nicht, ob Vcc überhaupt vom Board rausgeführt wird. Die Arduino-Seite dürfte also einfacher sein. Nimm mal 3k3 oder 4k7, das sollte bei nicht allzu langen Verbindungen von SDA und SCL in etwa richtig kommen.
Also die beide Massepunkte habe ich ich miteinander verbunden und dann rausgeführt als anschluss für das Netzteil.
So jetzt würde ich es folgendermaßen machen ich würde von dem MAXIM board 2xmal 4l7 drauf und zu Vin gehen. Wäre das ok?
Der Arduino hat doch welche Pullup.
Müssten doch die RN2B, RN2C sein?
Schaue schematic:
Wie kommst du auf die Werte mit 4k7? Kannst du mir das rechnerisch erklären?
Ja aber auf dem LEd Driver Board habe ich keine 5V :(.
Hat der Arduino keine Pullups für i2C?
Wenn doch wozu brauche ich die? muss ichsie dann irgendwie ausstellen