Steuerung von VEEK mit C#

      Steuerung von VEEK mit C#

      Für alle, die den VEEK-Ausgang (0...3,3V) z.B. zur Kontrasteinstellung oder zum Dimmen des Backlights von C# oder VB aus nutzen wollen:

      Source Code

      1. private const Int32 CONTRASTCOMMAND = 6149;
      2. private enum ContrastCommand : byte
      3. {
      4. ContrastGet = 0, // Parm=Ignored, Out=Current setting
      5. ContrastSet = 1, // Parm=NewSet, Out=Resulting setting
      6. ContrastInc = 2, // Parm=Amount, Out=Resulting setting
      7. ContrastDec = 3, // Parm=Amount, Out=Resulting setting
      8. ContrastDefault = 4, // Parm=Ignored, Out=Resulting setting
      9. ContrastMax = 5
      10. }
      11. [DllImport("coredll.dll")]
      12. static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);
      13. [DllImport("coredll.dll")]
      14. static extern bool DeleteDC(IntPtr hdc);
      15. [DllImport("coredll.dll", SetLastError = true)]
      16. private static extern Int32 ExtEscape(IntPtr hdc, Int32 nEscape, Int32 cbInput, byte[] plszInData, Int32 cbOutput, IntPtr lpszOutData);
      17. void SetContrast(UInt16 Value)
      18. {
      19. // hierzu muss die Kontrast-Regelung aktiviert sein!
      20. // Dazu im display driver textfile das einfügen:
      21. // reg set value ContrastEnable dword 1
      22. // Bereich für Value: 0...1023
      23. IntPtr dcLCD = CreateDC("ddi_smivgx_ddraw.dll", "", "", IntPtr.Zero);
      24. byte[] vpm = { 0, 0, 0, 0, 0, 0, 0, 0 };
      25. vpm[0] = (byte)ContrastCommand.ContrastSet;
      26. vpm[4] = (byte)(Value & 0xFF);
      27. vpm[5] = (byte)((Value >> 8) & 0xFF);
      28. ExtEscape(dcLCD, CONTRASTCOMMAND, 8, vpm, 0, IntPtr.Zero);
      29. DeleteDC(dcLCD);
      30. }

      Bertram Hildebrand, 30.10.2008

      Re: Steuerung von VEEK mit C#

      Hallo,

      irgendwie funktioniert das bei mir leider nicht! :-(

      Die Kontrast-Regelung (reg set value ContrastEnable dword 1) habe ich aktiviert.

      Da der Compiler die Funktion ExtEscape nicht kannte habe ich folgendes ergänzt

      Source Code

      1. [DllImport("coredll.dll")]
      2. static extern int ExtEscape (IntPtr hdc, uint nEscape, uint cbInput, byte[] lpszInData, int cbOutput, IntPtr lpszOutData);

      Ich verwende eine NetDCU8.

      Ãœber DCUTermi kann ich den Veek-Ausgang durch die Kommandos (contrast set 1) oder (contrast set 4000) von 0 bis 3V durchstimmen. Aber über die oben erwähnte C#-Software geht es leider nicht.

      Was mache ich falsch?

      Re: Steuerung von VEEK mit C#

      Hab noch etwas probiert, hiermit funktionierte es bei mir:
      Bei mir geht der Einstellbereich von 0 bis 4096.

      Source Code

      1. [DllImport("coredll.dll", SetLastError = true)]
      2. private static extern IntPtr GetDC(IntPtr hwnd);
      3. private const Int32 CONTRASTCOMMAND = 6149;
      4. private enum ContrastCommand : byte
      5. {
      6. ContrastGet = 0, // Parm=Ignored, Out=Current setting
      7. ContrastSet = 1, // Parm=NewSet, Out=Resulting setting
      8. ContrastInc = 2, // Parm=Amount, Out=Resulting setting
      9. ContrastDec = 3, // Parm=Amount, Out=Resulting setting
      10. ContrastDefault = 4, // Parm=Ignored, Out=Resulting setting
      11. ContrastMax = 5
      12. }
      13. public void SetContrast(Int16 Value)
      14. {
      15. // hierzu muss die Kontrast-Regelung aktiviert sein!
      16. // Dazu im display driver textfile das einfügen:
      17. // reg set value ContrastEnable dword 1
      18. // Bereich für Value: 0...4096
      19. IntPtr dcLCD = GetDC(IntPtr.Zero);
      20. byte[] vpm = { 0, 0, 0, 0, 0, 0, 0, 0 };
      21. vpm[0] = (byte)ContrastCommand.ContrastSet;
      22. vpm[4] = (byte)(Value & 0xFF);
      23. vpm[5] = (byte)((Value >> 8) & 0xFF);
      24. ExtEscape(dcLCD, CONTRASTCOMMAND, 8, vpm, 0, IntPtr.Zero);
      25. }

      Re: Steuerung von VEEK mit C#

      Hello,
      thereby a sample in c++:

      Source Code

      1. DWORD GetContrast(void)
      2. {
      3. struct ContrastCmdInputParm ContrastParm, RetParm;
      4. HDC DCLCD;
      5. int iRes;
      6. ContrastParm.command = CONTRAST_CMD_GET;
      7. ContrastParm.parm = 0;
      8. DCLCD = CreateDC(TEXT("xxxDDI.dll"), NULL, NULL, NULL);
      9. iRes = ExtEscape(DCLCD, CONTRASTCOMMAND, sizeof (struct ContrastCmdInputParm),
      10. (LPCSTR)&ContrastParm, sizeof (struct ContrastCmdInputParm), (LPSTR)&RetParm);
      11. if(iRes<=0)
      12. {
      13. // Error or not implemented
      14. return (DWORD)-1
      15. }
      16. else
      17. {
      18. if (DeleteDC(DCLCD))
      19. return RetParm.parm;
      20. else
      21. return (DWORD)-1;
      22. }
      23. }
      F&S Elektronik Systeme GmbH
      As this is an international forum, please try to post in English.
      Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.