Digital Ausgang am PC schalten

Gast #5652943
Lesenswert?

Hallo,
gibt es eine Möglichkeit einen PIN auf dem Mainboard per Betriebssystem 
digital High oder Low zu setzen? Konkret geht es darum Beleuchtung im PC 
bei Bedarf ein bzw. auszuschalten. Wäre es möglich hierfür einen 
Lüfteranschluss zu vergewaltigen? Mainboard ist ein Gigabyte X79S-UPS
Andernfalls würde ich einfach einen ESP8266 verbauen und die beleuchtung 
über WLAN schalten.
Persönliche Seite #5652975
Lesenswert?

Lars schrieb:
> gibt es eine Möglichkeit einen PIN auf dem Mainboard per Betriebssystem
> digital High oder Low zu setzen?

Sofern eine serielle Schnittstelle vorhanden ist, lassen sich zwei der 
Handshakeleitungen dafür "missbrauchen".

> Wäre es möglich hierfür einen Lüfteranschluss zu vergewaltigen?

Nein.

> Andernfalls würde ich einfach einen ESP8266 verbauen und die beleuchtung
> über WLAN schalten.

Wenn das "einfach" ist ...

Du könntest auch einen µC mit USB-Funktion an einen USB-Port hängen und 
den die Angelegenheit erledigen lassen.

Hier sollte ein simpler AtTiny85 mit V-USB genügen, den gibt es unter 
dem Namen "DigiSpark" mit Arduino-Unterstützung als kleine 
Fertigplatine.
(Firma: https://img.favpng.com/23/21/3) #5654523
Lesenswert?

ODer USB zu UART Datenkabel..mit DTR Signal..doer noch besser sowas..da 
gibte es im Netz samplecode für C, Pascal und Python..bzw der ist sogar 
schon fertig..das Du Ausgänge schalten kannst..
https://www.ebay.de/itm/CH341A-Programmer-USB-to-UART-IIC-SPI-TTL-ISP-EPP-MEM-Parallel-Onboard-Converter/173615086065?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649

Mehr code braucht es da nicht sogar mit Grafischer Oberfläche..das 
Beispiel ist Pascal/Lazarus/Delphi.
Es sind sogar gleich codebeispiele bei, wie Du ein 16x2 LCD ansteuern 
kannst etc pp

Ich hatte jetzte einfach mal Pascal angehängt, da sich das so direkt 
compilieren lässt...bei C geht das vermutlich wieder nicht mal eben so 
einfach..da ist alles in cpp h und x anderen Dateien aufgeteilt...
Bei dem code einfach noch die CH341DLL in den gleichen Ordner kopieren 
und mit lazarus kompilieren..fertig schon hast Du Buttons und kannst die 
Ausgänge schalten und sogar Eingänge abfragen!
1
unit Unit1;
2

3
interface
4

5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7
  StdCtrls, Spin, CH341DLL;
8

9
type
10
  TForm1 = class(TForm)
11
    ChipIndex: TSpinEdit;
12
    OpenBtn: TButton;
13
    CloseBtn: TButton;
14
    LEDBtn: TButton;
15
    ReadBtn: TButton;
16
    Label1: TLabel;
17
    ReportList: TListBox;
18
    procedure OpenBtnClick(Sender: TObject);
19
    procedure CloseBtnClick(Sender: TObject);
20
    procedure LEDBtnClick(Sender: TObject);
21
    procedure ReadBtnClick(Sender: TObject);
22
    procedure AddReport(aLine: String);
23
  private
24
    { Private-Deklarationen }
25
    LEDStatusByte: Byte;
26
  public
27
    { Public-Deklarationen }
28
  end;
29

30
var
31
  Form1: TForm1;
32

33
implementation
34

35
{$R *.DFM}
36

37
procedure TForm1.OpenBtnClick(Sender: TObject);
38
begin
39
   //Verbindung zum Chip herstellen... ChipIndex: 0= 1.Chip am USB, 1= 2.Chip, usw.
40
   if (CH341OpenDevice(ChipIndex.Value)>0) then AddReport('DeviceOpen...OK')
41
                                           else AddReport('DeviceOpen...error!');
42
   LEDBtnClick(self);
43
end;
44

45

46
procedure TForm1.CloseBtnClick(Sender: TObject);
47
begin
48
   //Verbindung schliessen...
49
   CH341CloseDevice(ChipIndex.Value);
50
   AddReport('Closed');
51
end;
52

53
procedure TForm1.LEDBtnClick(Sender: TObject);
54
var Buffer: Byte;
55
    BufferLen: cardinal;
56
begin
57
   if LEDStatusByte=0 then LEDStatusByte:=1;
58

59
   // Ein Byte senden... (LED 0...7)
60
   BufferLen:=1;
61
   Buffer:=not LEDStatusByte; //Output LOW = LED eingeschaltet!
62
   if CH341MemWriteAddr0(ChipIndex.Value,@Buffer,@BufferLen) then AddReport('Write...OK --- Status = '+IntToStr(Buffer))
63
                                                             else AddReport('Write error!');
64
   LEDStatusByte:=LEDStatusByte shl 1; //Lauflicht
65
end;
66

67
procedure TForm1.ReadBtnClick(Sender: TObject);
68
var Buffer: Byte;
69
    BufferLen: cardinal;
70
begin
71
   //Ein Byte lesen (DIL-Schalter 0...7); Schalterposition ON = Input LOW)
72
   BufferLen:=1;
73
   if CH341MemReadAddr0(ChipIndex.Value,@Buffer,@BufferLen) then AddReport('Read...OK --- Status = '+IntToStr(Buffer))
74
                                                            else AddReport('Read error!');
75
end;
76

77
procedure TForm1.AddReport(aLine: String);
78
begin
79
   ReportList.items.Add('Device '+IntToStr(ChipIndex.Value)+': '+aLine);
80
   if ReportList.items.Count>10 then ReportList.items.Delete(0);
81
end;
82

83
end.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren