MCP2221 Baustein ansprechen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: MCP2221 Baustein ansprechen

Beitrag von Nixsager »

Darf ich mal fragen ob mit VGA, Video Graphics Array gemeint ist?
Falls ja wie misst man was darüber? :o
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Darf ich mal fragen ob mit VGA, Video Graphics Array gemeint ist?
Ja, dort wo man einen VGA-Bildschirm einsteckt.
Das kann natütlich auch eine GeForce für 1000€ sein. :mrgreen:
Falls ja wie misst man was darüber?
Über den I²C-Bus, an dem ich einen ADS1115 angeschlossen habe.

Bild
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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: MCP2221 Baustein ansprechen

Beitrag von pluto »

Ein grosser Wermuttropfen hat es trotzdem, es misst schätzungsweise etwa über 10x langsamer, als über den VGA.

man kann die Geschwindigkeit von I²C anpassen. Normalerweise läuft sie zum Beispiel beim PI und scheinbar auch bei meinem Laptop mit 100 kherz(Wenn ich mich nicht täusche). Vielleicht kann der Baustein nicht mehr oder man muss die Geschwindigkeit einstellen.

Über den I²C Bus der Grafikkarte werden z.b. einige Infos über den LCD preis gegeben. Also die EDID Infos.
So wie ich jetzt gehört habe. Kann mir aber nicht vorstellen, dass die auf 400 KHerz getaktet ist.

Hast du Pullup Widerstände? Etwas zwischen 1 K-Ohm und 10 K-Ohm. Scheinbar ist 4,7 K-Ohm Standard. Ich brauche jetzt keinen.

Ich habe mal etwas gespielt mit meinem I²C Adapter, eine tolle Sache: Ich konnte damit ein LCD 2004 mit Text versorgen über eine 30 Meter lange Leitung sowie ein Arduino uno. beide waren Slave. Der Master war in diesen Aufbau mein Laptop. Für einfache schnelle Test eine Prima Sache.

Edit01: Nachtrag: Ich verwende die Infos vom Pi für mein Laptop über I²C z.b. musst du bestimmte Kernel-Module für I²C laden ich meine das war I2C-DEV oder so ähnlich. Aber hättest du das nicht, würde es auch nicht laufen.
MFG
Michael Springwald

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Hast du Pullup Widerstände? Etwas zwischen 1 K-Ohm und 10 K-Ohm. Scheinbar ist 4,7 K-Ohm Standard.

Habe ich auch eingebaut 2 Stück 10K.

man kann die Geschwindigkeit von I²C anpassen.
Das weis ich, nur die Frage ist, wie ?
Auf dem Atmega, dort kann ich 100K, 200K oder 400K einstellen.

Ich denke, man muss etwas mit fpIOCtl machen, nur die Frage wie ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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: MCP2221 Baustein ansprechen

Beitrag von pluto »

Habe ich auch eingebaut 2 Stück 10K.

Ändere mal den Wert, auf 4,7 K-Ohm

Das weis ich, nur die Frage ist, wie ?


Das ist jetzt zwar für python aber vielleicht hilft es weiter.
https://www.raspberrypi.org/forums/view ... 44&t=34734

Das hier sieht besser aus.
http://www.mindsensors.com/blog/how-to/ ... spberry-pi

Ich habe "Raspberry PI I²c geschwindigkeit einstellen" mit Google gesucht.
MFG
Michael Springwald

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Ändere mal den Wert, auf 4,7 K-Ohm

Wie erwartet immer noch gleich.

Das ist jetzt zwar für python aber vielleicht hilft es weiter.
https://www.raspberrypi.org/forums/view ... 44&t=34734

Das einzige was ich sah, das der Takt auf 100'000 eingestellt ist.
Bei mit ist kein baudrate sondern ferquency vorhanden und dort stand es drinnen.

Code: Alles auswählen

/sys/module/i2c_mcp2221/parameters/frequency 


Aber dies wäre nur ein 4facher Unterschied, gegenüber des VGA.
Auch mit dem Umweg über einem Arduino, welcher auf 400KHz eingestellt, läuft es etwa gleich schnell wie über den VGA.
Könnte es evtl. auch ein Timing des USB-Portes sein ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Ich habe noch folgendes probiert:

Code: Alles auswählen

tux-To-be-filled-by-O-E-M tux # i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 49 -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                         
tux-To-be-filled-by-O-E-M tux # i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- 37 -- -- 3a -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --   

Bei der Device 2 (HDMI), werden die Werte sehr schnell gelistet.
Aber bei der Device 3 (MCP2221) schläft einem das Gesicht ein.
So nebenbei sieht man, das an der 48 und 49 meine ADS1115 hängen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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: MCP2221 Baustein ansprechen

Beitrag von pluto »

Aber bei der Device 3 (MCP2221) schläft einem das Gesicht ein.
So nebenbei sieht man, das an der 48 und 49 meine ADS1115 hängen.

Ich könnte es mal nachbauen mit meinem Adapter. Was genau list du ein?
Ich würde ein LDR einlesen und jede Sekunde raushauen.

Es könnte natürlich was mit USB zu tun haben. Kann ich mir aber nicht vorstellen.
MFG
Michael Springwald

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Ich könnte es mal nachbauen mit meinem Adapter. Was genau list du ein?

Ich lese in einer Schleife möglichst viele Daten ein, bis man den Stop-Button drückt.
Die Lesung eines Messwertes wird in einer Funktion getätigt.
Die Funktion ist auf zwei Messvarianten ausgelegt, entweder über den Arduino-Umweg oder I²C-Direkt.

Code: Alles auswählen

function TMess.Meas(Kanal: integer): single;
var
  s: string;
  ch: char;
  e, i: integer;
  serbuf: record
    Mess, Poti: Int16;
  end;
 
  SendChar: char;
  buf: packed array [0..3] of byte;
  config: word;
 
const
  zuf: integer = 0;
 
begin
  with MessPara do begin
    if MessDelay <> 0 then begin
      Sleep(MessDelay);
    end;
  end;
 
  case Schnittstelle of
    i2c: begin
      {$IFDEF Linux}
      if Kanal = SondeKanal then begin
        fpIOCtl(deviceHandle, I2C_SLAVE, pointer(i2C_Addr_Sonde));
        Config := ($4000 + 0 * $1000) or $80C3;
      end;
 
      if Kanal = PotiKanal then begin   
        fpIOCtl(deviceHandle, I2C_SLAVE, pointer(i2C_Addr_Poti));
      end;
 
      buf[0] := 1;
      buf[1] := Config shr 8;
      buf[2] := Config mod $100;
      buf[2]:=  %11100011;  // Achtung low/high vetauscht !
      buf[1]:=  %11000001;  // 6.144V
 
      fpwrite(deviceHandle, buf, 3);
 
      buf[0] := 0;
      buf[1] := 0;
      buf[2] := 0;
 
      fpwrite(deviceHandle, buf, 1);
      fpread(deviceHandle, buf, 2);
 
      Result := buf[0] * $100 + buf[1];
 
        {$ENDIF}
    end;
    com: begin
      buf[0] := %11100011;
      buf[1] := %11000011;
      buf[2] := %11100011;
      buf[3] := %11000011;
 
      ser.SendBuffer(@buf, 4);
      ser.RecvBufferEx(@serbuf, 4, 1000);
      if Kanal = SondeKanal then begin
        Result := serbuf.Mess;
      end;
 
      if Kanal = PotiKanal then begin
        Result := serbuf.Poti;
      end;
 
    end;
  end;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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: MCP2221 Baustein ansprechen

Beitrag von pluto »

Habe mal im Internet gesucht und diesen Beitrag gefunden:
http://www.mikrocontroller.net/topic/406603
scheint so als ob die Frage geklärt ist: USB ist schuld.

Ich stelle es mir im Prinzip so vor(im Moment): Du hast dein I2C Device, welches über den Baustein bereit gestellt wird auf der anderen Seite hast du USB.
Nun musst du ja die Signale von I²C praktisch Codieren nach USB und andersherum. Das könnte den Geschwindigkeitsverlust erklären.

Wenn es bei deinem Projekt auf Speed angekommt würde ich vielleicht ehre zu SPI greifen. SPI ist/soll deutlich schneller sein als I²C.
Oder du betreibst es weiter über dein VGA Port. Das scheint ja gut zu gehen. Baust dir dafür eine Platine so das du mehrer I²C Bausteine anschließend kannst sicherst die ab(wenn nötig) und das Problem ist gelöst oder wie du schon gemacht hast: Ein Arduino da zwischen.

Der den Geschwindigkeitsverlust Praktisch ausgleicht. Ist zwar nicht schön, aber wohl die Einzigste Lösung im Moment.
MFG
Michael Springwald

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Hast du den Autor des Thread gesehen, das war ich.
So wie es scheint, ist es momentan eine Sackgasse.

Ich haette gedacht, das es mit dem mcp am effizientesten ist, aber man kann sich taeuschen. :roll:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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: MCP2221 Baustein ansprechen

Beitrag von pluto »

Hast du den Autor des Thread gesehen, das war ich.
So wie es scheint, ist es momentan eine Sackgasse.

Ja, ich wollte aber wegen Doppelposting nicht sagen... Das wird im allgemeinen nicht gerne gesehen in Foren.
MFG
Michael Springwald

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Habe mal im Internet gesucht und diesen Beitrag gefunden:
http://www.mikrocontroller.net/topic/406603

Ich habe dort noch ein bisschen weiter gefragt, wer weis vielleicht kann ich den USB auch einfacher ausreizen.
Die Kommunikation zwischen Arduino und PC läuft auch mit vollem Speed, obwohl dies nur ein COM-Port mit begrenzter Baudrate ist.

Ja, ich wollte aber wegen Doppelposting nicht sagen... Das wird im allgemeinen nicht gerne gesehen in Foren.

Ja es gibt leider Hoster, die haben dies gar nicht gerne, und sperren einem wen so einer Kleinigkeit.

Das grösste Problem, wen man keine Doppelpost machen darf.
Man stellt eine Frage, der Thread ist dann wie erwartet an oberster Stelle. In der Zwischenzeit gucken ein paar User den Thread an.
Wen man aber im Post noch etwas ergänzen will, und dies auch macht, sehen die anderen User das nicht mehr, weil am Post immer das Erstellung-Datum und nicht das Änderung-Datum ist.
Also ist somit der logische weg eine neun Post zu schreiben, um die anderen User zu orientieren.

Mit Doppelpost, wo nur steht "keiner eine Idee", da habe ich auch meine Mühe.

Zum Glück sind die meisten Foren heutzutage recht tolerant.
Ich wäre es auch als Admin. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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: MCP2221 Baustein ansprechen

Beitrag von pluto »

Zum Glück sind die meisten Foren heutzutage recht tolerant.
Ich wäre es auch als Admin.

Hier wird das glaube ich auch nicht so eng gesehen... Aber schöner wäre es, du hättest es im Ersten Beitrag eingetragen am Ende.
Vielleicht war es auch nur Zufall, dass ich gerade Gesucht hatte und per Zufall diesen Beitrag gefunden habe.
Egal.

Scheint also am USB zu liegen. Aber brauchst du wirklich diese Hohe Geschwindigkeit für dein Projekt?
In der Regel dürfte doch Messungen pro 1 oder 2 Sekunden vollkommen ausreichen oder nicht?
MFG
Michael Springwald

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

Re: MCP2221 Baustein ansprechen

Beitrag von Mathias »

In der Regel dürfte doch Messungen pro 1 oder 2 Sekunden vollkommen ausreichen oder nicht?

Tut es nicht, da würde ein komplette Messung mehrer Stunde dauern.

Wir stellen in der Firma Messonden für Tankinhaltmmesung her. Diese habe ein Reedkette im 1cm Abstand, und die Reeds werden mit einem Schwimmer gesteuert.
Zum testen der Sonden, legen wird dies quer auf einen Testplatz. Dort wird der Schwimmer mit einem Schlitten bewegt. Gleichzeitig wird die Sonde ausgemessen.
Und dies gibt dann eine Messkurve. Dazu werden etwa 300 Messungen/Sekund gebraucht. Je mehr Messungen um so genauer das Ergebnis.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten