Go Down

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

milito

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?

Megaionstorm

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


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

uwefed

#2
Apr 28, 2013, 03:47 pm Last Edit: Apr 28, 2013, 03:49 pm by uwefed Reason: 1
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

Megaionstorm

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

Code: [Select]
#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.
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

milito

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


Go Up