MCP2221 Baustein ansprechen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

MCP2221 Baustein ansprechen

Beitrag von Mathias »

Hat jemand von euch schon mal eine MCP2221 angesprochen ?
Am liebsten unter Linux mit Lazarus.

Hierbei handelt es sich um einen Baustein, welcher einen I²C-Bus am USB zu Verfügung stellt.

Leider habe ich bis jetzt nur ein paar Examples für Java unter Windows gefunden. http://www.microchip.com/wwwproducts/en/MCP2221

Wen es wenigstens etwas mit C/C++ hätte, dann könnte man es vielleicht auf Lazarus portieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
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 das etwas gefunden: https://bigdanzblog.wordpress.com/2014/ ... ee-pascal/

Sieht aber nach Raspberry aus.
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 Interessanter Baustein...

Zuerst dachte ich an Arduino, aber das scheidet wohl aus. So bleibt dir wohl nichts anders übrig als ein Treiber dafür zu finden.
Wie wird er unter Linux erkannt?
was sagt z.b. lsusb? was sagt dmesg?

EDIT01: Schon mal gut, dass es scheinbar dafür Linux Treiber gibt, ich nehme an, die hast du schon gefunden und installiert?

EDIT02: Vielleicht hilft dir libUSB weiter. Damit konnte meine USB Funk Fernbedienung auslesen(Zugegeben, mit etwas helfe vom Forum *G*).

EDIT03: http://ww1.microchip.com/downloads/en/D ... Readme.txt
Da steht es.... denke ich Mein Englisch ist nicht so gut, aber so wie es aussieht brauchst du einfach nur ein Seriellen Monitor.
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: MCP2221 Baustein ansprechen

Beitrag von Mathias »

Mit lauter googeln habe habe ich noch entdeckt, das jede VGA-Karte einen I²C-Bus hat, auch meine NVidia.
Somit konnte ich folgenden Code laufen lassen.
Dieser liest Messdaten, aus einem ADS1115 aus.
Ein Wermutstropfen hat es noch, es läuft nur als Benutzer Root. Und ob es schlau ist, dir Grakrt. zu missbrauchen, kann ich auch nicht sagen.

Code: Alles auswählen

program project1;
{$mode objfpc}{$H+}
uses
  baseUnix, Classes, SysUtils;
const
  I2C_SLAVE = 1795;
var
  buf: packed array [0..3] of byte;
  devPath: string = '/dev/i2c-1';
  handle: Cint;
  iDevAddr: Cint = $48;
  Config: word;
begin
  handle := fpopen(devPath, O_RDWR);
  WriteLn('Handle: ', handle);
  Sleep(1000);
  if handle = -1 then begin
    halt;
  end;
 
  fpIOCtl(handle, I2C_SLAVE, pointer(iDevAddr));
  while True do begin
    Config := ($4000 + 0 * $1000) or $80C3;
 
    buf[0] := 1;
    buf[1] := Config shr 8;
    buf[2] := Config mod $100;
    fpwrite(handle, buf, 3);
    sleep(10);
 
    buf[0] := 0;
    buf[1] := 0;
    buf[2] := 0;
    fpwrite(handle, buf, 1);
    sleep(10);
 
    fpread(handle, buf, 2);
 
    WriteLn( buf[0] * $100 + buf[1]: 6);
    sleep(10);
 
  end;
 
  fpclose(handle);
end.

Somit wird wohl ein einfacher I²C Zugriff auf den MCP2221 möglich sein.
Nur wie sieht es mit konfigurieren aus, zB. I²C-Takt ?
Ob dies mit fpIOCtl möglich ist, :idea:
Auch sind auf dem IC noch GPIO vorhanden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

volker
Beiträge: 24
Registriert: Mi 14. Nov 2012, 14:36
OS, Lazarus, FPC: Rosa Linux Desktop R8 (L 1.6, FPC 2.6.4)
CPU-Target: 32Bit

Re: MCP2221 Baustein ansprechen

Beitrag von volker »

Also ich habe gerade ein Projekt mit dem IOWarrior http://www.codemercs.com/de/io-warrior/31-io-warrior IOW24
fertiggestellt.
Ich weiß nicht, ob dir das hilft, aber das Auslesen von Messdaten über USB mit Lazarus unter Linux war da super-einfach.
Ich habe einen A/D-Wandler MCP3201 (0...5 V Eingang, 12 bit Ausgang über SPI Serial Interface) an den IOW24 gehängt... und schon funktionierts.
Beim IOWarrior ist eine dll für Windows und eine Linux-Schnittstelle dabei und Beispiel-Code für Delphi. Mit ein paar Änderungen für Lazarus hat das auf Anhieb geklappt.
Kann dir gerne die angepasste Lazarus-Schnittstelle hier einstellen, wenn gewünscht.

edit: Ich sehe gerade, der IOW24 kann auch I2C Schnittstelle.

Mathias
Beiträge: 6160
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 »

Danke erst mal.

Kann dir gerne die angepasste Lazarus-Schnittstelle hier einstellen, wenn gewünscht.

Dies wäre sicher interessant.
Läuft der IOWarrior auch über USB-HID ?

Ich muss das Ganze bei Gelegenheit mal genauer angucken, zuerst muss ich auch den MCP2221 bestellen.

So wie es aussieht, ist der MCP3201 ein reiner I²C IC, ohne UART und GPIO.
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 »

So wie es aussieht, ist der MCP3201 ein reiner I²C IC, ohne UART und GPIO.

So ganz ohne kann ich mir gar nicht vorstellen. Ein Uart wird drauf sein, der die Signale vom I²C nach "Digital" wandelt.
Wie schließt du ihn denn an? Doch an USB?
MFG
Michael Springwald

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 »

Ich habe gestern/heute jemanden gefragt der sich auskannte:
1. Der Grafikkarte schadet es jedenfalls nicht. Er würde oder hat es auch so gemacht und hat sich sogar ein Adapter dafür gebaut.
2. Er hat sich auch eine Platine erstellt, welches I²C auf USB konvertiert und das lädt der Kernel Automatisch.
D.H. an diesen Adapter kann man alles anschließen, was I²C spricht. Ich habe ihn eine Platine abgekauft.
Er meinte auch, Portexpanter werden in der Regel sehr gut unterstützt vom Kernel und stellen eine Gpio Interface bereit.
Welches man genau so bedienen kann wie auf einem PI.

Es gibt aber auch fertige Module zum Kaufen, welches I²C auf USB machen. bei Alieexpress habe ich mal welche gefunden. Ich werde in der nächsten Zeit ein paar Tests machen. Ich habe zwar kein MCP aber andere I²C Komponenten.

Im Übrigen meinte er auch, ich könnte wahrscheinlich deinen Code den du gefunden hast bzw. geändert hast sofort übernehmen.

Wenn seine Aussage Zutriffst, gibt es mehrer Tools für Linux die mit I2C irgendwie anfangen, die suche ich noch.
Damit kannst du dann z.b. die adresse feststellen und erste Tests machen.
MFG
Michael Springwald

Jole
Beiträge: 114
Registriert: Fr 4. Jul 2014, 14:39
OS, Lazarus, FPC: Linux
CPU-Target: amd64

Re: MCP2221 Baustein ansprechen

Beitrag von Jole »

Über die Anwendungsverwaltung lassen sich I2C-tool und libi2c-dev installieren (Linux Mint 18), einfach in der suche i2c eingeben. Falls es auf deinem Linux keine Anwendungsverwaltung gibt dann tus natürlich auch die Synaptic Paketverwaltung.

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 »

Mein Adapter habe ich zum laufen bekommen, ich konnte sogar über I²C ein I²C Adapter für ein LCD2004 anschließen.
Mit etwas suchen habe ich ein PI Code gefunden, der auch auf einem PC geht. Tolle Sache.

So ein MCP2221 habe ich zwar noch nicht, aber im Prinzip müsste der, wie gesagt als GPIO zuverfügunggestellt werden.
Das ist vergleichbar mit dem PI:
Das meiste was dort läuft, müsste auf dem PC dann auch laufen. Es gibt ein paar LIb, die ich gefunden habe von Adafruit, die laufen nicht auf dem PC.
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: MCP2221 Baustein ansprechen

Beitrag von Mathias »

1. Der Grafikkarte schadet es jedenfalls nicht. Er würde oder hat es auch so gemacht und hat sich sogar ein Adapter dafür gebaut.

Schaden nicht, aber es kann Fehlübertragungen geben.
Bei meinem Mess-Programm, sind etwa 30 Messungen gut, dann kommt ein Fehlmessungen, anschliessend ist wieder gut, bei ca 3000-5000 Messungen.
Vielleicht macht der Grafik-Treiber spontan ische Abrufe, ob ein Monitor angeschlossen ist.

Über die Anwendungsverwaltung lassen sich I2C-tool und libi2c-dev installieren (Linux Mint 18)

Habe ich gemacht, sonst würde das mit dem VGA nicht funktionieren.

Ein Wermutstropfen hat es noch, es läuft nur als Benutzer Root.

Dies ist gelöst.

Code: Alles auswählen

sudo adduser $USER i2c

das selbe wie bei den COM-Ports.

Code: Alles auswählen

sudo adduser $USER dialout
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 »

Schaden nicht, aber es kann Fehlübertragungen geben.
Bei meinem Mess-Programm, sind etwa 30 Messungen gut, dann kommt ein Fehlmessungen, anschliessend ist wieder gut, bei ca 3000-5000 Messungen.
Vielleicht macht der Grafik-Treiber spontan ische Abrufe, ob ein Monitor angeschlossen ist.

Ich werde mal in der Nächsten Woche nachfragen, ob er eine Lösung dafür weiß.
Vielleicht misst du zu schnell? Was genau misst du?
MFG
Michael Springwald

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 »

Im Datenblatt habe ich vielleicht etwas gefunden, nur mein Englisch ist nicht so gut:
http://cdn-reichelt.de/documents/datenb ... 221_DB.pdf
Auf Seite 23

Set I2C/SMBus communication
speed (sub-command)

Ich nehme mal an, damit ist der Bus Speed gemeint.
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: MCP2221 Baustein ansprechen

Beitrag von Mathias »

pluto hat geschrieben:Im Datenblatt habe ich vielleicht etwas gefunden, nur mein Englisch ist nicht so gut:
http://cdn-reichelt.de/documents/datenb ... 221_DB.pdf
Auf Seite 23

Set I2C/SMBus communication
speed (sub-command)

Ich nehme mal an, damit ist der Bus Speed gemeint.

Zuerst muss man aber wissen, wie man die HID-Device anspricht.
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 »

Ach ja und noch was ist mir aufgefallen: Warum hast du den eigentlich an die Grafikkarte angeschlossen?
Laut Datenblatt hat er ein direkten USB Ausgang D+ D-. Ich bin mir nicht 100% Sicher, aber ich wette, dort brauchst du nur ein USB Kabel anzuschließen.

In deinem Code sendest du ja bereits ein Kommando zum IC. drei mal 000. Ich könnte mir gut vorstellen, dass das so heißt:
0x00. Aber ich habe damit keine Erfahrung. Du könntest ja mal eine LED anschließen.
Ich kenne das jedenfalls so, dass man erst mal den PIN konfigurieren muss und das steht im Datenblatt drin.

Vielleicht kaufe ich mir den auch mal, dann kann ich damit rumspielen.
Im Prinzip müsstest du in deinem dev Verzeichnis irgendwo ein GIPO unterverzeichnis haben, wenn ich es richtig verstanden habe. Es müsste so laufen, wie beim PI. Daran kannst du dich gut Orientieren.

Bei meinem LCD habe ich es auch erst mal so gemacht.
MFG
Michael Springwald

Antworten