Hallo!
Ich weiß nicht, ob das hier die richtige Sparte ist, aber ich versuchs mal:
Wir wollen einen Programm schreiben, dass später einmal Alpha-Strahlung messen kann.
Die Messgeräte haben wir schon und die funktionieren auch mit einem alten Programm, das ist allerdings so alt, dass wir halt ein neues haben wollen (für die Schule, Physik-LK).
Unser Lehrer hatte mal versucht, etwas zu programmieren, aber bei ihm hakte es an der Port-Ansteuerung:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| function TForm1.peak_wert: INTEGER; var i,wert: INTEGER; time: Cardinal; bits: array[0..7]of BYTE; const sleepconst=1; begin Comport.RTS(0); Comport.DTR(1); messen:=true; time:=5000+GetTickCount; repeat Application.ProcessMessages; if (GetTickCount>time) or Abbruch then begin StatusBar1.Panels[1].Text:=''; Abbruch:=true; end; until Abbruch or (ComPort.DSR = 0); repeat Application.ProcessMessages; if (GetTickCount>time) or Abbruch then begin StatusBar1.Panels[1].Text:=''; Abbruch:=true; end; until Abbruch or (ComPort.DSR = 1); if not Abbruch then begin for i:=0 to 7 do begin Comport.DTR(1); sleep(sleepconst); Comport.DTR(0); end; sleep(10*sleepconst); for i:=0 to 7 do begin Comport.DTR(1); sleep(sleepconst); bits[i]:=Comport.CTS; Comport.DTR(0); bits[i]:=bits[i] xor 1; end; Comport.RTS(0); sleep(30*sleepconst); wert:=bits[0]; for i:=1 to 7 do wert:=(wert shl 1) or bits[i]; end else wert:=0; messen:=false; result:=wert; end; |
Diese Funktion sollte mit Hilfe einer DLL, die wohl hoffentlich funktionieren wird, aus dem Internet auswerten, welcher Port angesteuert wurde.
Es sind 256 verschieden Werte möglich und die soll man später messen können.
Erkennt jemand in der Ansteueung einen Fehler, oder hat jemand eine Idee es besser zu machen?