I2C - PC Version

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

I2C - PC Version

Beitragvon pluto » 5. Sep 2018, 13:23 I2C - PC Version

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6670
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon Mathias » 5. Sep 2018, 15:33 Re: I2C - PC Version

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 5. Sep 2018, 17:39 Re: I2C - PC Version

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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6670
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon pluto » 5. Sep 2018, 18:25 Re: I2C - PC Version

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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6670
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon pluto » 5. Sep 2018, 19:22 Re: I2C - PC Version

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
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6670
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried