Pages: [1] 2 3 4   Go Down
Author Topic: Arduino steuert device über I²C und SPI an  (Read 3709 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

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?
Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Siehe hier unter SS (Slave Select): http://arduino.cc/en/Reference/SPI


Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21665
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 (http://playground.arduino.cc/Main/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ß.

Grüße Uwe
« Last Edit: April 28, 2013, 08:49:38 am by uwefed » Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei I2C hingegen werden die Devices über eine Addresse angesprochen.

Code:
#include <Wire.h>

int DeviceAddress;

void setup(void) {
  Serial.begin(9600);
  DeviceAddress = 0x50;
  Wire.begin();
}

void loop(void) {
  Wire.beginTransmission(DeviceAddress);
  // Restlicher Code, Wire.send( ..... );
  Wire.endTransmission();
}

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.
Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke euch, werde es sobald es geht ausprobieren und euch berichten.

Logged

Wien
Online Online
Edison Member
*
Karma: 28
Posts: 1895
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

bin nicht ganz sicher, ob Dir schon klar ist, daß I2C und SPI verschiedene dinge sind.

vor ein paar tagen gab's diesen thread dazu:
http://arduino.cc/forum/index.php/topic,162918.0.html

gruß stefan
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi smiley-grin, 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?
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
in diesem MAXIM board gibt es ja mehrere Register

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.
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hatte es oben geschrieben ,aber mache es nochmal smiley-grin.
Also das ist der MAXIM 16826 Led driver.
Dieser wird über I²C an dem Arduino angeschlossen.
Datasheet: http://www.maximintegrated.com/datasheet/index.mvp/id/5732

So die erste frage ist ,müsste ich eventuell auch den EN - Pin mit anschliessen? Wenn ja, könnte ich ja einen freien digitalen pin am arduino nehmen?

SO jetzt hast du die von dir benötigten Daten.
Würde mich über einige Tipps freuen , danke
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Hatte es oben geschrieben ,aber mache es nochmal

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.

Quote
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.

Quote
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).

Quote
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?
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21665
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

War wohl im Gedanken des Schreibes mit http://arduino.cc/forum/index.php/topic,150595.0.html verlinkt.  smiley-wink smiley-wink
Grüße Uwe
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

JA genau Uwe  smiley-wink.
Sorry

Also man könnte sich also auch hier auf dem thread beziehen. Würde mich auf eine Antwort freuen.
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

War wohl im Gedanken des Schreibes mit http://arduino.cc/forum/index.php/topic,150595.0.html verlinkt.  smiley-wink smiley-wink
Grüße Uwe

Wäre über eine Antwort froh
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Danke dir smiley-grin
Logged

Pages: [1] 2 3 4   Go Up
Jump to: