Go Down

Topic: 3 controllinos als "eine controllino" (Read 1 time) previous topic - next topic

DrDiettrich

Your code requests 1 byte, not 6 as stated in the comment.

AndreasLiotta

RS485 ist nicht I2C! SCL und SDA gibt es an X1.

merci! ich dachte, es wäre dasselbe

agmue

#17
Jun 11, 2019, 03:07 pm Last Edit: Jun 11, 2019, 03:09 pm by agmue
merci! ich dachte, es wäre dasselbe
Beides ist eine Schnittstelle zur seriellen Datenübertragung, aber I2C ist als ein Bus konzipiert, während RS232/RS422/RS485 Punkt-zu-Punkt Verbindungen sind. RS485 hat Differenzsignale für größere Entfernungen als RS232.

RS485 wäre auch eine Option für Dich, allerdings mußt Du dann das Protokoll für drei Teilnehmer selbst implementieren. Das dürfte vermutlich mehr Aufwand sein als I2C, auch wenn es für alle (un)möglichen Fälle Programmbibliotheken zur Unterstützung gibt.

Nick Gammon RS485
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

AndreasLiotta

vielen Dank für die Tipps, aber leider konnte ich nicht weiter gehen, nicht mal ein einfaches Beispiel Master Slave zwischen 2 Controllino. Ich glaube, es liegt an der Verbindung zwischen den 2 Controllino's, die ich irgendwie falsch mache

Gruß,
Andi

Tommy56

#19
Jun 12, 2019, 05:03 pm Last Edit: Jun 12, 2019, 05:04 pm by Tommy56
vielen Dank für die Tipps, aber leider konnte ich nicht weiter gehen, nicht mal ein einfaches Beispiel Master Slave zwischen 2 Controllino. Ich glaube, es liegt an der Verbindung zwischen den 2 Controllino's, die ich irgendwie falsch mache
Ups, ich will ja auch noch was schreiben ;)

Da wir nicht auf Deinen Schreibtisch schauen können, musst Du uns das schon aufmalen oder mit einem guten Foto zeigen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

agmue

Ich glaube, es liegt an der Verbindung zwischen den 2 Controllino's, die ich irgendwie falsch mache
Alle SCLs miteinander verbinden und auch alle SDAs und die PullUp-Widerstände nicht vergessen, so sie nicht schon auf den Platinen verbaut sind. Zusätzliche schaden aber nicht.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Tommy56

Und jedem Slave eine andere Adresse geben nicht vergessen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

postmaster-ino

Hi

Und als ersten Sketch einen I²C-Scanner schadet bestimmt auch nicht.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

Tommy56

Auf dem Master, um zu schauen, ob die Slaves reagieren.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

AndreasLiotta

#24
Jun 13, 2019, 08:36 am Last Edit: Jun 13, 2019, 08:41 am by AndreasLiotta
so sieht die gesamte Aufbau aus

zuerst wollte ich mit nur 2 Controllion's testen.

Die beiden Controllino befinden sich im gleichen Netzwerk (switch)

Blau: GND
Gelb: RS485 -
Orange: RS485 +

//Master

Code: [Select]
#include <Wire.h>

void setup()
{
 Wire.begin();        // join i2c bus
}

void loop()

{  
 //get data of a analogIn from a slave
 requestFromSlave(4);
 
 //turn led 13 on at the master and the slave
 digitalWrite(13,HIGH);
 slavePinOn(4,13);
 delay(500);
 
 //turn led 13 off at the master and the slave
 digitalWrite(13,LOW);
 slavePinOff(4,13);
 delay(500);
}

void requestFromSlave(int slave){
  Wire.requestFrom(slave, 2);   //request 2 bytes.

   while(Wire.available()>1)    
 {
   int pin = Wire.receive();    //in this example the master will receive a pin and a value for an analogWrite
   int value = Wire.receive();
   analogWrite(pin,value);
 }
}

void slavePinOn(int slaveID, int pin){
   Wire.beginTransmission(slaveID);
   Wire.send('a');
   Wire.send(pin);
   Wire.send(1);
   Wire.endTransmission();
   delayMicroseconds(10);
}

void slavePinOff(int slaveID, int pin){
   Wire.beginTransmission(slaveID);
   Wire.send('b');
   Wire.send(pin);
   Wire.send(0);
   Wire.endTransmission();
   delayMicroseconds(10);
}


//Slave

Code: [Select]
#include <Wire.h>

byte analogValue=0;


void setup()
{
 Wire.begin(4);                // join i2c bus with address #4
 Wire.onRequest(requestEvent); // register event
 Wire.onReceive(receiveEvent);
 for(int i=2; i<=13; i++){     //set some pins as output
   pinMode(i,OUTPUT);
 }
}

void loop()
{
 //prepare a analog value
 int tempValue = analogRead(0);
 analogValue = map(tempValue, 0, 1023, 0, 255);

}



 void receiveEvent(int howMany)
{
 while(Wire.available() < 2);                              // Wait for 2 bytes to become available
 char caseState = Wire.receive();
 
 switch (caseState){
   case 'a':{
    
     int pin = Wire.receive();                      
     int ledValue =Wire.receive();
     pinOn(pin);
 }
   break;
   case 'b':{
     int pin = Wire.receive();                        
     int ledValue =Wire.receive();                    
     pinOff(pin);
   }
   break;
 
 }
}  

void requestEvent()//When data is requested by the master send a bytearray back.
{
 byte data[2];
 data[0] = 11;//the pin on the master
 data[1] = analogValue;//the value

 Wire.send(data,2);
}


void pinOn(int pin){//function to turn pin on
     digitalWrite(pin,HIGH);
}
void pinOff(int pin){//function to turn pin off
     digitalWrite(pin,LOW);
}

noiasca

#25
Jun 13, 2019, 08:49 am Last Edit: Jun 13, 2019, 08:51 am by noiasca
Wiederholung: die Anschlüsse RS485 sind _NICHT_ die Anschlüsse für I2C.
Entweder du machst einen Sketch für RS485 oder du must die I2C Pins (+GND) verbinden.

Stelle deine Verkabelung richtig und poste wieder ein Bild von deinem Aufbau.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

AndreasLiotta

#26
Jun 13, 2019, 09:18 am Last Edit: Jun 13, 2019, 09:21 am by AndreasLiotta
wo finde ich den i²c pin auf meinem Controllino board
ich kann es in der beiliegenden Pin-out Tabelle nicht finden


agmue

wo finde ich den i²c pin auf meinem Controllino board
Siehe meinen Beitrag #14.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

AndreasLiotta

#28
Jun 13, 2019, 11:12 am Last Edit: Jun 13, 2019, 11:14 am by AndreasLiotta
Siehe meinen Beitrag #14.

Ich habe nun die Verbindung so aufgebaut.
und ich habe mich auf das Bild basiert



ich habe leider nur 5,1kOhm. macht das Probleme?
muss ich in meinem Code für SDA/SCL was definieren?

Orange und Grün: SDA
Braun und Blau: SCL
Gelb: 5V



uwefed

Der "Report to moderator" ist nicht dazu da um den Moderator anzustupsen Fragen der Diskussion zu beantworten.
Grüße Uwe

Go Up