I2C - PC Version

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
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)

I2C - PC Version

Beitrag von pluto »

Hallo

Ich habe mich mal gestern/heute mit dem I2C PC Version befasst. Ich habe mein AM2320 Sensor sofort zum laufen bekommen und auch mein LCD.

Problem war nur: Beim jeden "Update" vom LCD gab es ein kurzes "Flackern" und ich weiß nun auch warum:
in der I2C_Class wurde in der Methode "SetDevice" nur das Device mit fpIOCtl geöffnet... Das war das Kern Problem.
Also habe ich eine CloseDevice Methode geschrieben:

Code: Alles auswählen

 
procedure TI2C.SetDevice(addr: cint);
begin
  Handle:=fpIOCtl(fI2C_Device, I2C_SLAVE, Pointer(addr));
end;
 
procedure TI2C.CloseDevice(Addr: cint);
begin
  FpClose(Handle);
end;
 

So sieht das ganze nun aus...
In write4Bits bei TLCD musste auch etwas angepasst werden, dann ging es.

Code: Alles auswählen

 
procedure TLCD.write4Bits(Value: byte);
const
  ENABLE_MASK: byte = $04;
begin
  I2C_Class.SetDevice(Device_Addr);
  I2C_Class.writeBuf(Value or backlightStsMask or ENABLE_MASK);
  Sleep(1);
  I2C_Class.writeBuf((Value and not ENABLE_MASK) or backlightStsMask);
  Sleep(1);
  I2C_Class.CloseDevice(Device_Addr);
end;
 



Jetzt kann das ganze auch für mehrer I2C Geräte genutzt werden.

Ich verwende ein I2C Adapter nach USB:
http://mainframe.io/project/i2c-tiny-usb.dark.html

Klappt Prima damit. Im Anhang findet ihr das Projekt. Sieht noch nicht schön aus, aber es geht.

Dabei ist mir auch die Idee gekommen: Eine Gemeinsame Schnittstelle zu schreiben für I2C einmal für AVR und einmal für den PC über Kompiler Schalter sollen dann die eine oder andere Version "genommen" werden. Bisher ist das aber nur eine Idee... ich überlege noch wie ich das ganze am besten umsetzten kann.
Dateianhänge
I2C_LCD_PCVersion_A.zip
(133.04 KiB) 71-mal heruntergeladen
MFG
Michael Springwald

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

Re: I2C - PC Version

Beitrag von Mathias »

Das ist mir neu, das fpIOCtl eine Handle zurück liefert. Ich dachte immer, das dies ein Fehlercode ist.

FpClose(), schliesst ein Handle, welcher mit FpOpen() geöffnet wurde.

So nebenbei hatte ich kein Flimmerproblem auf dem PC.

Ich verwende ein I2C Adapter nach USB:
http://mainframe.io/project/i2c-tiny-usb.dark.html
Ich hatte den VGA-Ausgang des PCs genutzt.
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: I2C - PC Version

Beitrag von pluto »

Das ist mir neu, das fpIOCtl eine Handle zurück liefert.

Ich bin mir da auch nicht sicher, aber so geht es recht gut muss ich sagen.

Ich hatte den VGA-Ausgang des PCs genutzt.

Ist vielleicht sogar Sinnvoller, aber einfacher fand ich den USB Adapter zu nutzen....
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: I2C - PC Version

Beitrag von pluto »

Ich weiß nicht warum, aber jetzt klappt das mit dem LCD nicht mehr. Der Sensor wird Brav ausgelesen aber das LCD kann ich nicht mehr beschreiben. Vielleicht war es Zufall das es ging.

Ich denke, es könnte am RS/RW/D Pin liegen, die müssen auf LOW oder HIGH.... Eigentlich...Vielleicht Standen die genau richtig....
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: I2C - PC Version

Beitrag von pluto »

Ich bin mir noch nicht sicher, aber jetzt geht es ohne DeviceClose.... Jedoch muss eine Zeile scheinbar angepasst werden:
displayControl :=$08;
da statt vorher:
displayControl :=LCD_DISPLAY_ON or LCD_CURSOROFF or LCD_BLINKOFF;
das werde ich "Morgen" noch mal prüfen bzw. in ein paar Stunden....
MFG
Michael Springwald

Antworten