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.
Kann dir gerne die angepasste Lazarus-Schnittstelle hier einstellen, wenn gewünscht.
So wie es aussieht, ist der MCP3201 ein reiner I²C IC, ohne UART und GPIO.
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.
Über die Anwendungsverwaltung lassen sich I2C-tool und libi2c-dev installieren (Linux Mint 18)
Ein Wermutstropfen hat es noch, es läuft nur als Benutzer Root.
sudo adduser $USER i2c
sudo adduser $USER dialout
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.
Set I2C/SMBus communication
speed (sub-command)
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 23Set I2C/SMBus communication
speed (sub-command)
Ich nehme mal an, damit ist der Bus Speed gemeint.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste