Raspberry zu Arduino per I2C

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Raspberry zu Arduino per I2C

Beitrag von braspi »

Hallo bräuchte mal wieder Hilfe. Wie kann ich mehr als 2 mal 2 Bytes mit "I2CGet" empfangen ?

Mein Beispiel für die Kommunikation zwischen Rasp und Arduino. Senden von vielen Bytes sind kein Problem, ich will aber mehr als die üblichen 2 Bytes empfangen.
4 Bytes schaffe ich jetzt. Ich würde aber lieber einen String empfangen, z.B. "200008001". Hat jemand eine Lösung ?

Das Testprogramm:

// Korrektur

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, process, FileUtil, Forms, Controls, Graphics, Dialogs,
  StdCtrls, Buttons,
  BaseUnix;
 
const
    I2C_SLAVE            = 80;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    eZiel: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    Process1: TProcess;
    sbInfo: TSpeedButton;
    sb08Ein: TSpeedButton;
    sb08Aus: TSpeedButton;
    sbExit: TSpeedButton;
    procedure sbInfoClick(Sender: TObject);
    procedure sbExitClick(Sender: TObject);
    procedure sb08EinClick(Sender: TObject);
    procedure sb08AusClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.sbInfoClick(Sender: TObject);
var
   AStringList : TStringList;
   AProcess    : TProcess;
begin
     AProcess    := TProcess.Create(nil);
     AStringlist := TStringList.create;
 
     AProcess.commandline := 'i2cdetect -y 1';
     AProcess.Options     := AProcess.Options + [poWaitOnExit, poUsePipes];
 
 
     Aprocess.Execute;
     Astringlist.LoadFromStream(AProcess.Output);
 
     Memo1.Clear;
     Memo1.Lines.Add('       Aktive I2C-Adressen');
     Memo1.Lines.Add('');
     Memo1.Lines.Add(AStringlist.Text) ;
 
     AStringList.Free;
     AProcess.Free;
end;
 
procedure TForm1.sbExitClick(Sender: TObject);
begin
     Form1.Close;
end;
 
procedure TForm1.sb08EinClick(Sender: TObject);
var
   AStringList : TStringList;
   AProcess    : TProcess;
   sDummy      : string;
   iDummy      : integer;
begin
     AProcess    := TProcess.Create(nil);
     AStringlist := TStringList.create;
 
     // Set , in meinem Beispiel : Sende "200008001" an ...
     AProcess.commandline := 'i2cset -y 1 0x' + eZiel.Text +  ' 0x32 0x30 0x30 0x30 0x30 0x38 0x30 0x30 0x31 i';
     AProcess.Options     := AProcess.Options + [poWaitOnExit, poUsePipes];
     Aprocess.Execute;
 
     // Get
     AProcess.commandline := 'i2cget -y 1 0x' + eZiel.Text + ' 1 w';
     AProcess.Options     := AProcess.Options + [poWaitOnExit, poUsePipes];
     Aprocess.Execute;
     Astringlist.LoadFromStream(AProcess.Output);
 
      // Empfangene Daten umwandeln. Daten werden im Arduino generiert (0x00 bis 0xff) und (0x00 bis 0xff)
      // also maximal 0xffff = 65535d
       sDummy := AStringList.Text;                                                                                                  // mit Steuerzeichen
       sDummy := sDummy[1] + sDummy[2] + sDummy[3] + sDummy[4] + sDummy[5] + sDummy[6];    // ohne Steuerzeichen
 
       iDummy := StrToInt(sDummy);                                                                                                // umwandeln in Integer
       Memo1.Lines.Add(sDummy + ' ' + IntToStr(iDummy));                                                              // Ausgabe in Memo
 
     AStringList.Free;
     AProcess.Free;
 
end;
 
procedure TForm1.sb08AusClick(Sender: TObject);
var
   AStringList : TStringList;
   AProcess    : TProcess;
   sDummy      : string;
   iDummy      : integer;
begin
     AProcess    := TProcess.Create(nil);
     AStringlist := TStringList.create;
 
     // Set                                                    2    0    0    0    0    8    0    0    0
     AProcess.commandline := 'i2cset -y 1 0x' + eZiel.Text + ' 0x32 0x30 0x30 0x30 0x30 0x38 0x30 0x30 0x30 i';
     AProcess.Options     := AProcess.Options + [poWaitOnExit, poUsePipes];
     Aprocess.Execute;
 
     // Get
     AProcess.commandline := 'i2cget -y 1 0x' + eZiel.Text + ' 1 w';
     AProcess.Options     := AProcess.Options + [poWaitOnExit, poUsePipes];
     Aprocess.Execute;
     Astringlist.LoadFromStream(AProcess.Output);
       // Empfangene Daten umwandeln
       sDummy := AStringList.Text;
       sDummy := sDummy[1] + sDummy[2] + sDummy[3] + sDummy[4] + sDummy[5] + sDummy[6];
 
       iDummy := StrToInt(sDummy);
       Memo1.Lines.Add(sDummy + ' ' + IntToStr(iDummy));
 
     AStringList.Free;
     AProcess.Free;
end;
 
end.
Zuletzt geändert von braspi am Mi 10. Mai 2017, 11:40, insgesamt 2-mal geändert.

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Raspberry zu Arduino per I2C

Beitrag von braspi »

gelöscht.
Zuletzt geändert von braspi am Mi 10. Mai 2017, 11:40, insgesamt 2-mal geändert.

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Raspberry zu Arduino per I2C

Beitrag von braspi »

Hier der passende Arduino-Sketch :

Code: Alles auswählen

 
#include <Wire.h>
 
#define SLAVE_ADDRESS 0x08
 
int number = -1;
String s0  = "";
int data[] = {0,0,0,0,0,0,0,0,0};
 
byte rec_a;
byte rec_b;
 
void setup()
{
 
  pinMode(8, OUTPUT);
  Serial.begin(9600);                               // start serial for output
 
  // initialize i2c as slave
  Wire.begin(SLAVE_ADDRESS);
 
  // define callbacks for i2c communication
  Wire.onReceive(receiveData);
  Wire.onRequest(sendData);
 
  Serial.println("Ready!");
}
 
void loop()
{
  delay(100);
}
 
// callback for received data
void receiveData(int byteCount)
{
  s0 = "";
  while(Wire.available())
      {
        number = Wire.read();
 
        s0 = s0 + char(number);
 
        Serial.print("Daten empfangen [HEX]: ");
        Serial.println(number,HEX);
      }
 
      Serial.println("***************"); 
      Serial.print(" .. als String = ");   
      Serial.println(s0);                   // Achtung String
 
      number = s0.toInt();                  // Umwandlung String in Integer
 
      switch (number) {
         case 200008000 : { digitalWrite(8, LOW);     // set the LED off 
                            rec_a = 01;
                            rec_b = 0xfe;                                   
                            break;  }
         case 200008001 : { digitalWrite(8, HIGH);    // set the LED on                                     
                            rec_a = 02;
                            rec_b = 0xff;
                            break;  }
         default        :   { break;  }       
 
      }
}
 
// callback for sending data
void sendData()
{
  Wire.write(rec_b);   // niederwertig = b
  Wire.write(rec_a);   // höherwertig  = a
 
  Serial.print("sendData ab : ");   
  Serial.print(rec_a);Serial.println(rec_b);
}
Zuletzt geändert von braspi am So 23. Apr 2017, 11:31, insgesamt 1-mal geändert.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Raspberry zu Arduino per I2C

Beitrag von Mathias »

Hallo brächte mal wieder Hilfe. Wie kann ich mehr als 2 mal 2 Bytes mit "I2CGet" empfangen ?

Mit I²C kann man max. 32Bytes in beide Richtungen schicken.

Wieso machst du dies so kompliziert mit "AProcess.commandline" ?
Sprich doch direkt /dev/i2c-? an. Für dies brauchst du keine externe Programme.

Ich habe dafür extra eine Klasse gemacht. Bei Create muss die I²C-Device übergeben werden, beim Raspi wird dies /dev/i2c-0 sein.
Ich hoffe, dies hilft dir weiter.

Wieso kommunizierst du nicht direkt über den USB ?

PS: Setze dich bitte die Code-Tags.

Code: Alles auswählen

unit I2C;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Dialogs, BaseUnix;
 
type
 
  { TI2C }
 
  TI2C = class(TObject)
  private
    fI2C_Device: cint;
  public
    property I2C_Device: cint read fI2C_Device;
    constructor Create(Adevice: string);
    destructor Destroy; override;
 
    procedure SetDevice(addr:cint);
    procedure writeBuf(buf: array of byte);
    procedure readBuf(var buf: array of byte);
  end;
 
implementation
 
{ TI2C }
 
const
  I2C_SLAVE = $0703;
 
constructor TI2C.Create(Adevice: string);
begin
  inherited Create;
 
  fI2C_Device := FpOpen(Adevice, O_RDWR);
  if fI2C_Device = -1 then begin
    ShowMessage('Kann I²C nicht öffnen, Error:' + IntToStr(fI2C_Device));
  end;
end;
 
destructor TI2C.Destroy;
begin
  FpClose(fI2C_Device);
 
  inherited Destroy;
end;
 
procedure TI2C.SetDevice(addr: cint);
begin
  fpIOCtl(fI2C_Device, I2C_SLAVE, pointer(addr));
end;
 
procedure TI2C.writeBuf(buf: array of byte);
begin
  FpWrite(fI2C_Device, buf, Length(buf));
end;
 
procedure TI2C.readBuf(var buf: array of byte);
begin
  FpRead(fI2C_Device, buf, Length(buf));
end;
 
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Raspberry zu Arduino per I2C

Beitrag von braspi »

Hallo Mathias,
funktioniert super. Da habe ich mich stundenlang unnötig gequält. Eine Stunde tippen und der Keks war gegessen.
Leider wird oft nur ein Code-Schnippsel gezeigt und dann muss ich stundenlang rumprobieren.
Herzlichen Dank.

Warum i2c, weil meine Modeleisenbahn auch über i2c gesteuert wird und weil ich es ausprobieren wollte.

Hier der Code : (1 Memo, 5 Buttons, 1 Edit, 2 RadioButton, ist nur ein Test für I2C von Raspberry zu Arduino)

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, process, FileUtil, Forms, Controls, Graphics, Dialogs,
  StdCtrls, Buttons,
  i2c;
 
const
    I2C_SLAVE            = 08;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    eZiel: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    Process1: TProcess;
    rb_1: TRadioButton;
    rb_0: TRadioButton;
    sbInfo: TSpeedButton;
    sbExit: TSpeedButton;
    sbSetDevice: TSpeedButton;
    sbEin: TSpeedButton;
    sbAus: TSpeedButton;
    sbDestroyDevice: TSpeedButton;
    sbCreatedevice: TSpeedButton;
    procedure OnCreate(Sender: TObject);
    procedure OnShow(Sender: TObject);
    procedure sbCreatedeviceClick(Sender: TObject);
    procedure sbInfoClick(Sender: TObject);
    procedure sbExitClick(Sender: TObject);
    procedure sbSetDeviceClick(Sender: TObject);
    procedure sbEinClick(Sender: TObject);
    procedure sbAusClick(Sender: TObject);
    procedure sbDestroyDeviceClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    i2c     : TI2C;
    sZiel   : string;
    iZiel   : byte;
    sDevice : string;
    sDummy  : string;
    buf      : array [1..9] of byte;
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.sbInfoClick(Sender: TObject);
var
   AStringList : TStringList;
   AProcess    : TProcess;
begin
     AProcess    := TProcess.Create(nil);
     AStringlist := TStringList.create;
 
     AProcess.commandline := 'i2cdetect -y 1';
     AProcess.Options     := AProcess.Options + [poWaitOnExit, poUsePipes];
 
 
     Aprocess.Execute;
     Astringlist.LoadFromStream(AProcess.Output);
 
     Memo1.Clear;
     Memo1.Lines.Add('       Aktive I2C-Adressen');
     Memo1.Lines.Add('');
     Memo1.Lines.Add(AStringlist.Text) ;
 
     AStringList.Free;
     AProcess.Free;
end;
 
procedure TForm1.OnCreate(Sender: TObject);
begin
 
end;
 
procedure TForm1.OnShow(Sender: TObject);
begin
     if rb_1.Checked then sDevice := '/dev/i2c-1'
     else                 sDevice := '/dev/i2c-0';
 
     sZiel   := eZiel.Text;
end;
 
procedure TForm1.sbCreatedeviceClick(Sender: TObject);
begin
     i2c := TI2C.Create(sDevice);
 
     sbDestroyDevice.Enabled := true;
     sbSetDevice.Enabled     := true;
     sbCreateDevice.Enabled  := false;
end;
 
procedure TForm1.sbExitClick(Sender: TObject);
begin
     i2c.Free;
 
     Form1.Close;
end;
 
procedure TForm1.sbSetDeviceClick(Sender: TObject);
begin
     i2c.SetDevice(StrToInt(sZiel));
 
     sbEin.Enabled:= true;
     sbAus.Enabled:= true;
end;
 
procedure TForm1.sbEinClick(Sender: TObject);
begin
     buf[1] := 2;  sDummy := IntToStr(buf[1]);                 // 2 = Set
     buf[2] := 0;  sDummy := sDummy + IntToStr(buf[2]);
     buf[3] := 0;  sDummy := sDummy + IntToStr(buf[3]);
     buf[4] := 0;  sDummy := sDummy + IntToStr(buf[4]);
     buf[5] := 0;  sDummy := sDummy + IntToStr(buf[5]);
     buf[6] := 8;  sDummy := sDummy + IntToStr(buf[6]);        // PIN
     buf[7] := 0;  sDummy := sDummy + IntToStr(buf[7]);
     buf[8] := 0;  sDummy := sDummy + IntToStr(buf[8]);
     buf[9] := 1;  sDummy := sDummy + IntToStr(buf[9]);        // Einschalter
 
 
     i2c.writeBuf(buf);
     Memo1.Lines.Add('Sende ' + sDummy);
end;
 
procedure TForm1.sbAusClick(Sender: TObject);
begin
     // Befehl für Arduino
     buf[1] := 2;  sDummy := IntToStr(buf[1]);                 // 2 = Set
     buf[2] := 0;  sDummy := sDummy + IntToStr(buf[2]);
     buf[3] := 0;  sDummy := sDummy + IntToStr(buf[3]);
     buf[4] := 0;  sDummy := sDummy + IntToStr(buf[4]);
     buf[5] := 0;  sDummy := sDummy + IntToStr(buf[5]);
     buf[6] := 8;  sDummy := sDummy + IntToStr(buf[6]);        // PIN
     buf[7] := 0;  sDummy := sDummy + IntToStr(buf[7]);
     buf[8] := 0;  sDummy := sDummy + IntToStr(buf[8]);
     buf[9] := 0;  sDummy := sDummy + IntToStr(buf[9]);        // Ausschalter
 
     // Sende Befehl zu Arduino
     i2c.writeBuf(buf);
     Memo1.Lines.Add('Sende ' + sDummy);
 
     sDummy := '';
 
     // Lese Antwort von Arduino
     i2c.readBuf(buf);
 
     sDummy := IntToStr(buf[1]);
     sDummy := sDummy + ' ' + IntToStr(buf[2]);
     sDummy := sDummy + ' ' + IntToStr(buf[3]);
     sDummy := sDummy + ' ' + IntToStr(buf[4]);
     sDummy := sDummy + ' ' + IntToStr(buf[5]);
     sDummy := sDummy + ' ' + IntToStr(buf[6]);
     sDummy := sDummy + ' ' + IntToStr(buf[7]);
     sDummy := sDummy + ' ' + IntToStr(buf[8]);
     sDummy := sDummy + ' ' + IntToStr(buf[9]);
 
     Memo1.Lines.Add('Empfange ' + sDummy);
end;
 
procedure TForm1.sbDestroyDeviceClick(Sender: TObject);
begin
     i2c.Destroy;
end;
 
end.


und der passende Sketch :

Code: Alles auswählen

 
// khn Sketch für Version 2
 
// i2cset -y 1 0x08 0x01        Einschalten
// i22set -y 1 0x08 0x00        Ausschalten
// i2cget -y 1 0x08             Status abfragen
 
#include <Wire.h>
 
#define SLAVE_ADDRESS 0x08
 
int number = -1;
char c;
String s0  = "";
int data[] = {0,0,0,0,0,0,0,0,0};
 
byte rec_a;
byte rec_b;
 
void setup()
{
 
  pinMode(8, OUTPUT);
  Serial.begin(9600);                               // start serial for output
 
  // initialize i2c as slave
  Wire.begin(SLAVE_ADDRESS);
 
  // define callbacks for i2c communication
  Wire.onReceive(receiveData);
  Wire.onRequest(sendData);
 
  Serial.println("Ready!");
}
 
void loop()
{
  delay(100);
}
 
// callback for received data
void receiveData(int byteCount)
{
  s0 = "";
  while(Wire.available())
      {
        number = Wire.read();       
        //s0 = String(number,DEC);
        Serial.print("Daten empfangen [itoa]: ");
        Serial.println(s0);
        s0 = s0 + String(number,DEC);
 
        Serial.print("Daten empfangen [HEX]: ");
        Serial.println(number,HEX);
      }
 
      Serial.println("***************"); 
      Serial.print(" .. als String = ");   
      Serial.println(s0);                   // Achtung String
 
      number = s0.toInt();                  // Umwandlung String in Integer
 
      switch (number) {
         case 200008000 : { digitalWrite(8, LOW);     // set the LED off 
                            rec_a = 01;
                            rec_b = 3;                                   
                            break;  }
         case 200008001 : { digitalWrite(8, HIGH);    // set the LED on                                     
                            rec_a = 2;
                            rec_b = 0;
                            break;  }
         default        :   { break;  }       
 
      }
}
 
// callback for sending data
void sendData()
{
  Wire.write(rec_a);    // nur ein Test
  Wire.write(2);        //
  Wire.write(rec_b);    //
  Wire.write(4);        //
  Wire.write(3);        //
  Wire.write(6);   
  Wire.write(7);   
  Wire.write(8);   
  Wire.write(9);   
 
 
  Serial.print("sendData ab : ");   
  Serial.print(rec_a);Serial.println(rec_b);
}
Zuletzt geändert von braspi am So 23. Apr 2017, 11:19, insgesamt 2-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Raspberry zu Arduino per I2C

Beitrag von wp_xyz »

Was Mathias noch geschrieben hatte, war die Bitte, Code mit den Tags [ code=laz] und [ /code] einzuschließen (aber ohne das Leerzeichen nach der öffnenden Klammer, das hier im Text benötigt wird, damit die Forumssoftware nicht alles zwischen den Tags als Code interpretiert). Durch diese Code-Tags wird Source-Code viel lesbarer dargestellt und das ist eine große Hilfe für den Leser.

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Raspberry zu Arduino per I2C

Beitrag von braspi »

Hallo wp_xyz, ich weiss garnicht was das ist und wie ich das ändern soll. Ich habe einfach per Copy&Paste die Sachen eingefügt. Tut mir leid, wenn ich etwas falsch gemacht habe. Ich wünsche euch ein schönes Wochenende.

Nachtrag:
Aber es stimmt euer Text sieht um einiges besser aus.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Raspberry zu Arduino per I2C

Beitrag von pluto »

Du kannst deine eigenen Beiträge hier bearbeiten. Oben über den Beitrag findest du ein entsprechenden Link/Button.
Wenn du schreibst, siehst du eine Zeile mit Buttons da steht z.b. B I U und soweiter drauf.
Wenn du jetzt weiter nach Rechts gehst, findest du eine ComboBox mit dem Text Highlighter d.h. damit fügst du eine Code Hervorhebung vor, die das Lesen vom Code stark vereinfacht.

Edit01: gerade gesehen: Rechts oben von deinen Jeweiligen Beiträgen findest du ein Button mit dem Text: Ändern.
MFG
Michael Springwald

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Raspberry zu Arduino per I2C

Beitrag von Mathias »

Warum i2c, weil meine Modeleisenbahn auch über i2c gesteuert wird und weil ich es ausprobieren wollte.

Hast du irgend eine Zentrale, welche I²C versteht ?
Leider wird oft nur ein Code-Schnippsel gezeigt und dann muss ich stundenlang rumprobieren.

Dies ist leider so, wen man etwas spezielles sucht, spuck Google sehr viel Mist aus.

So nebenbei, funktioniert meine I²C-Klasse auch auf dem PC, ist vielleicht für dich praktisch, da Lazarus auf dem Raspi sehr langsam ist.
Du brauchst dafür nicht mal spezial-Hardware, mit dem VGA-Anschluss, hast du unter Linux eine gratis I²C-Schnittstelle.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Raspberry zu Arduino per I2C

Beitrag von braspi »

Hallo Mathias,
eine Zentrale habe ich nicht. Bei ELV gibt es i2c-Module mit denen kann ich mein Licht steuern, Ein-Aus oder Dimmen und auch meine Weichenantriebe (über Relais) schalten.
Die Software habe ich mit Delphi geschrieben.

-USB-I2C-Interface, Komplettbausatz inkl. Gehäuse, bearbeitet und bedruckt, USB-Kabel, 3 Anschlusskabel
Artikel-Nr.: 68-08 41 23
-LED-I2C-Steuertreiber, 16 Kanäle, Komplettbausatz
Artikel-Nr.: 68-09 83 77
Ist aber schon lange her, als das programmierte.

Zu Google und Foren : Was ich wirklich hasse ist, das "Beantworten" und Moralisieren von Leuten, die einfach besser NICHT "helfen" sollten. So Sätze wie : "welches BS benutzt du ?", "ich abe gehört ...", "ich glaube .."
Antwort brauche ich nur, wenn es jemand wirklich gemacht hat. Deine Antwort war einfach, das was ich mir wünsche. Komplett geladen, eingefügt, die Anweisung des Pfads einzufügen ... und ES FUNKTIONIERT. Danke.


MfG kh

PS: Die Software für mein Testprogramm ist komplett ladbar bei http://teso.de/web.teso_16_raspi/rp2ar.htm

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Raspberry zu Arduino per I2C

Beitrag von pluto »

Was ich wirklich hasse ist, das "Beantworten" und Moralisieren von Leuten, die einfach besser NICHT "helfen" sollten. So Sätze wie : "welches BS benutzt du ?", "ich abe gehört ...", "ich glaube .."
Antwort brauche ich nur, wenn es jemand wirklich gemacht hat.

Oder sowas wie : Such doch mit Google, habe ich gemacht und was finde ich? Nur solche Antworten zu irgendein Thema. In einigen Foren zu Arduino ist der Ton sehr rau habe ich den Eindruck.
MFG
Michael Springwald

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Raspberry zu Arduino per I2C

Beitrag von Mathias »

Oder sowas wie : Such doch mit Google

Ein Forum ist zum Fragen da, ansonsten braucht es ja keines.
Das Forum von Linux Mint ist auch so komisch. Wehe man hat eine Beta von einem Paket installiert, dann darf man dort gar nichts fragen, man bekommt keine gescheite Antwort. :cry:
-USB-I2C-Interface, Komplettbausatz inkl. Gehäuse, bearbeitet und bedruckt, USB-Kabel, 3 Anschlusskabel
Artikel-Nr.: 68-08 41 23

Wie ist die Geschwindigkeit von diesem Teil ?
Dieses Teil hatte ich auch schon ergooglet, als ich aber erfahren habe, das ich mit dem VGA-Anschluss schon I²C an Board habe, hat sich dies erübrigt.
Als günstige Alternative, gibt es noch den MCP2221, aber die Kommunikation ist sehr langsam.

-LED-I2C-Steuertreiber, 16 Kanäle, KomplettbausatzArtikel-Nr.: 68-09 83 77

Da gäbe es alternativ den MCP23S17.

Ich wollte nur die Alternativen erwähnen, da dies sehr günstig sind, aber dafür muss man ein wenig löten.

Die schnellste I²C-Schnittstelle habe ich in Kombination mit einem Arduino hingekriegt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Raspberry zu Arduino per I2C

Beitrag von braspi »

Geschwindigkeit keine Ahnung. USB als serielle Schnittstelle bis 9xx xxx. Läuft bei mir mit 115200. MfG kh

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Raspberry zu Arduino per I2C

Beitrag von Mathias »

braspi hat geschrieben:Geschwindigkeit keine Ahnung. USB als serielle Schnittstelle bis 9xx xxx. Läuft bei mir mit 115200. MfG kh

Verstehe ich dich richtig, das Teil wird wie Serielle Schnittstelle angesprochen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

braspi
Beiträge: 57
Registriert: So 20. Mär 2016, 16:39

Re: Raspberry zu Arduino per I2C

Beitrag von braspi »

Ja.

Antworten