Elektronik Experimente

Für allgemeine Fragen zur Programmierung mit PureBasic.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Hmm... bei der DLL die mitgeliefert wird sind einige Funktionen die mir nen Absturz bereiten. Weißt du warum? Ich hab die DLL so mit dem DLL Importer eingebunden in PB:

ELEXS.pbi
ELEXS.dll
OPENCOM 1
TIMEOUTS 1
CLOSECOM 0
SENDBYTE 1
READBYTE 0
DTR 1
RTS 1
TXD 1
GETCOM 0
CTS 0
DSR 0
RI 0
DCD 0
INPUTS 0
TIMEINIT 0
TIMEREAD 0
DELAY 1
REALTIME 0
NORMALTIME 0
Ich weiß da sind doubles drin, macht hier aber hoffe ich mal nichts:
Declare Function OPENCOM Lib "ELEXS" (ByVal OpenString$) As Integer
Declare Sub TIMEOUTS Lib "ELEXS" (ByVal b%)
Declare Sub CLOSECOM Lib "ELEXS" ()
Declare Sub SENDBYTE Lib "ELEXS" (ByVal Dat%)
Declare Function READBYTE Lib "ELEXS" () As Integer
Declare Sub DTR Lib "ELEXS" (ByVal b%)
Declare Sub RTS Lib "ELEXS" (ByVal b%)
Declare Sub TXD Lib "ELEXS" (ByVal b%)
Declare Function GETCOM Lib "ELEXS" () As Integer
Declare Function CTS Lib "ELEXS" () As Integer
Declare Function DSR Lib "ELEXS" () As Integer
Declare Function RI Lib "ELEXS" () As Integer
Declare Function DCD Lib "ELEXS" () As Integer
Declare Function INPUTS Lib "ELEXS" () As Integer
Declare Sub TIMEINIT Lib "ELEXS" ()
Declare Function TIMEREAD Lib "ELEXS" () As Double
Declare Sub DELAY Lib "ELEXS" (ByVal ms As Double)
Declare Sub REALTIME Lib "ELEXS" ()
Declare Sub NORMALTIME Lib "ELEXS" ()
Mein Code:

Code: Alles auswählen

HCom = opencom_("COM1:")

If HCom > 0

#WindowWidth  = 300
#WindowHeight = 80
#WindowFlags  = #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_SystemMenu

hWnd = OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #WindowFlags, "")

CreateStatusBar(0, WindowID())
AddStatusBarField(#WindowWidth)

TIMEINIT_()
RTS_(1)
DTR_(1)
TXD_(0)

Repeat
  DTR_(1)
  TIMEINIT_()
  While (DSR_() = 0) And (TIMEREAD_() < 2001)
    WindowEvent()
  Wend
  StatusBarText(0, 0, Str(TIMEREAD_()))
  DTR_(0)
Until Quit = 1
CloseCom_()
EndIf
End
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
rayman1970
Beiträge: 89
Registriert: 01.09.2004 16:10
Wohnort: Troisdorf bei Bonn
Kontaktdaten:

Beitrag von rayman1970 »

Hi DarkDragon !

Ich habe hier auch ziemliche Probleme mit den Doubles .
Die folgenden beiden Befehle TIMEINIT , TIMEREAD gehen bei mir bisher auch nicht richtig und da muss ich auch noch mal überlegen wie ich die ans laufen bringe ;-)))
In VB geht das ja problemlos , nur leider bei uns noch nicht.....
Jetzt muss ich erst mal scharf nachdenken wie ich das realisieren soll !

Gruss Rayman
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

@rayman1970: Vielleicht kommst du mithilfe von Assembler ans Ziel. Damit müssten sich auch Doubles verarbeiten lassen können.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Laurin hat geschrieben:@rayman1970: Vielleicht kommst du mithilfe von Assembler ans Ziel. Damit müssten sich auch Doubles verarbeiten lassen können.
Oder mittels DoublesUserlib, was ich aber nicht glaube. Auf PB 4.0 warten dauert mir aber definitif zu lange.

[EDIT]
rayman1970 hat geschrieben:Hi DarkDragon !

Ich habe hier auch ziemliche Probleme mit den Doubles .
Die folgenden beiden Befehle TIMEINIT , TIMEREAD gehen bei mir bisher auch nicht richtig und da muss ich auch noch mal überlegen wie ich die ans laufen bringe ;-)))
In VB geht das ja problemlos , nur leider bei uns noch nicht.....
Jetzt muss ich erst mal scharf nachdenken wie ich das realisieren soll !

Gruss Rayman
Hmm... weißt du zufällig wozu diese Funktionen da sind?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Sorry für doppelpost, aber sonst würde es keiner mitbekommen. Ich hab hier die TimerProzeduren ersetzt. Außerdem braucht man nun nurnoch die MVCom lib, solange man nicht RI bekommen will. Dies funktioniert mit der Lichtmessungsplatine:

Code: Alles auswählen

Buffer = 1024
HCom = ComOpen("COM1:", 0, Buffer, Buffer)

Global HCom, Quit

Procedure DoEvents()
  Select WindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1
  EndSelect
EndProcedure

If HCom > 0

#WindowWidth  = 300
#WindowHeight = 80
#WindowFlags  = #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_SystemMenu

hWnd = OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #WindowFlags, "")

CreateImage(1, #WindowWidth, #WindowHeight-20)
CreateImage(0, #WindowWidth, #WindowHeight-20)

CreateGadgetList(WindowID())
ImageGadget(0, 0, 0, #WindowWidth, #WindowHeight-20, ImageID())

CreateStatusBar(0, WindowID())
AddStatusBarField(#WindowWidth)

ComSetRTS(HCom, 1)
ComSetDTR(HCom, 0)
ComSetTXD(HCom, 0)

Repeat
  While ComGetDSR(HCom) <> 0 : Delay(1) : Wend
  Delay(10)
  T = 0
  Time = ElapsedMilliseconds()
  ComSetDTR(HCom, 1)
  While ComGetDSR(HCom) = 0 And T < 2000 And Quit = 0
    DoEvents()
    T = ElapsedMilliseconds()-Time
  Wend
  ComSetDTR(HCom, 0)
  FreeImage(1)
  GrabImage(0, 1, 2, 0, #WindowWidth, #WindowHeight-20)
  UseImage(0)
  StartDrawing(ImageOutput())
  DrawImage(UseImage(1), 0, 0)
  UseImage(0)
  y = Int((T/2000)*ImageHeight())
  If y < 0 : y = 0 : ElseIf y >= #WindowHeight-20 : y = #WindowHeight-21 : EndIf
  LineXY(#WindowWidth-3, LastY, #WindowWidth-1, y, RGB(0, 255, 0))
  LastY = y
  StopDrawing()
  SetGadgetState(0, UseImage(0))
  StatusBarText(0, 0, Str(T))
  DoEvents()
  Delay(10)
Until Quit = 1
ComClose(HCom)
EndIf
End
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
rayman1970
Beiträge: 89
Registriert: 01.09.2004 16:10
Wohnort: Troisdorf bei Bonn
Kontaktdaten:

Beitrag von rayman1970 »

Hi DarkDragon !

Das ist eine super Sache ! Ich werde meine Befehle auf MVCom lib anpassen . Dadurch brauche ich ja die ELEXS.DLL nicht mehr :-) .

Kennst du zufällig ein kostenloses Programm mit dem man Platinen Zeichnungen erstellen kann ? Ich will nämlich zu jedem Befehl ein Platinen Beispiel anfertigen .

Gruss Rayman
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

rayman1970 hat geschrieben:Kennst du zufällig ein kostenloses Programm mit dem man Platinen Zeichnungen erstellen kann ? Ich will nämlich zu jedem Befehl ein Platinen Beispiel anfertigen .
Ich hab hier vor 3 monaten eins gemacht. Es ist allerdings noch nicht fertig. Wenn du willst sende ich dir den source, dann kannst du das Programm weiterentwickeln. Man kann sogar die Schaltung testen. Wenn elektronen durchfließen wird alles hellblau.

[EDIT]Ich habs halt noch auf dem anderen PC.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
rayman1970
Beiträge: 89
Registriert: 01.09.2004 16:10
Wohnort: Troisdorf bei Bonn
Kontaktdaten:

Beitrag von rayman1970 »

DarkDragon hat geschrieben:
Ich hab hier vor 3 monaten eins gemacht. Es ist allerdings noch nicht fertig. Wenn du willst sende ich dir den source, dann kannst du das Programm weiterentwickeln. Man kann sogar die Schaltung testen. Wenn elektronen durchfließen wird alles hellblau.

[EDIT]Ich habs halt noch auf dem anderen PC.
Wenn du mal Zeit hast kannst du es mir ja gerne per mail schicken . Weiter entwickeln werde ich es aber wohl nicht , denn ich habe momentan schon ziemlich viele Baustellen :lol:

Gruss Rayman
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

Rayman hat folgendes geschrieben:
Kennst du zufällig ein kostenloses Programm mit dem man Platinen Zeichnungen erstellen kann ? Ich will nämlich zu jedem Befehl ein Platinen Beispiel anfertigen .
Versuch mal das hier, ist für Hobbyzwecke mehr als ausreichend :allright: . Leider nicht ganz unkompliziert, aber wenn am es mal drauf hat kann man die schönsten sachen machen. Und kostet nix :mrgreen: .

http://www.cadsoft.de/freeware.htm

Gruß mueckerich
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

@mückerich: Die Seite funktioniert nicht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten