Home    Impressum / Datenschutz    Shop    Download    Links     Blog  

Ansteuerung der I2C-Baugruppen mit PureBasic

Kopplung zum I2C-Slave über den I2C-Koppler ohne port.dll

 Zitat:

Sehr geehrter Herr Horter,

Im Anhang finden Sie ein zip-Archiv, in dem sich vier Dateien befinden:

1. RS232_I2C.pb dies ist die Quelldatei (pruebasic) für das Testprogramm
2. RS232_I2C_Window.pb dies ist eine Include-Datei, sie enthält alle Elemente, die für die
    Darstellung des Fensters erforderlich sind.
3. RS232_I2C_Formular.pbv dies ist die Project-Datei für Visual Designer, mit das Fenster
    interaktiv erstellt wurde
4. TEST_RSI2C.exe das lauffähige Programm

Das Programm kommt ohne die Port.dll aus, nutzt aber zwei zusätzliche Bibliotheken, die nicht im Quelltext auftauchen:
1. MVCOM
2. PureCOLOR
Diese müssen im UserLib-Verzeichniss von Purebasic vorhanden sein, wenn man den Quelltext ändern und neu kompilieren möchte.

mit freundlichen Grüssen
Ingo G.

; PureBasic Visual Designer v3.90 build 1361
; Deklaration der Variablen


Global com_status.b, Port.s, Handshake.l, Buffer.l, HCom.l
Global sda_status.b, scl_status.b

; Einbinden dr Include-Dateien
IncludeFile "RS232_I2C_Window.pb"

; Definiton der Proceduren
Procedure.l WindowCallBack(WindowId.l, Message.l, wParam.l, lParam.l)
ReturnValue = #PB_ProcessPureBasicEvents
ReturnValue = PureCOLOR_CallBack(WindowId, Message, wParam, lParam, ReturnValue)
ProcedureReturn ReturnValue
EndProcedure


Procedure Test_COM_Ports()
anzahl = 0
Handshake = 0
Buffer = 1024
For i = 1 To 9
Port = "com"+ Str(i) + ":" + GetGadgetText(#BAUTRATE) + ",n,8,1"
HCom = ComOpen(Port, Handshake,Buffer,Buffer)
If HCom > 0
AddGadgetItem(#COM_PORT, -1,"com" + Str(i))
ComClose(HCom)
anzahl = anzahl + 1
EndIf
Next i
SetGadgetState(#COM_PORT,0) ; Default Port ist der erste Eintrag in der Liste
If anzahl = 0
MessageRequester("W A R N U N G", "Es wurde keine RS232 gefunden",0)
EndIf
EndProcedure




Procedure Handle_RS232()
If com_status = 0
SetGadgetText(#COM_OPEN,"schliessen")
com_status = 1
Port = GetGadgetText(#COM_PORT)+ ":" + GetGadgetText(#BAUTRATE) + ",n,8,1"
Handshake = 0
Buffer = 1024
HCom = ComOpen(Port, Handshake,Buffer,Buffer)
If HCom > 0
ComSetDTR(HCom,1)
ComSetRTS(HCom,1)
SetGadgetText(#SDA_SET_SHOW, "1")
PureCOLOR_SetGadgetColor(#SDA_SET_SHOW, RGB(0,0,0), RGB(0,255,0))
SetGadgetText(#SCL_SET_SHOW, "1")
PureCOLOR_SetGadgetColor(#SCL_SET_SHOW, RGB(0,0,0), RGB(255,255,128))
SetGadgetText(#SDA_GET_SHOW, "1")
PureCOLOR_SetGadgetColor(#SDA_GET_SHOW, RGB(0,0,0), RGB(0,255,0))
SetGadgetText(#INT_GET_SHOW, "0")
PureCOLOR_SetGadgetColor(#INT_GET_SHOW, RGB(0,0,0), RGB(255,255,255))
sda_status = 1
scl_status = 1
Else
MessageRequester("F E H L E R", "COM-Port konnten nicht geöffnet werden",0)
SetGadgetText(#COM_OPEN,"öffnen")
com_status = 0
EndIf
Else
SetGadgetText(#COM_OPEN,"öffnen")
ComClose(HCom) ; Close the communication port
HCom = -1
com_status = 0
EndIf
EndProcedure

Procedure Toggle_SDA()
If HCom > 0
If sda_status = 0
SetGadgetText(#SDA_SET_SHOW, "1")
PureCOLOR_SetGadgetColor(#SDA_SET_SHOW, RGB(0,0,0), RGB(0,255,0))
ComSetDTR(HCom,1)
sda_status = 1
Else
SetGadgetText(#SDA_SET_SHOW, "0")
PureCOLOR_SetGadgetColor(#SDA_SET_SHOW, RGB(0,0,0), RGB(255,255,255))
ComSetDTR(HCom,0)
sda_status = 0
EndIf
Else
MessageRequester("F E H L E R S D A", "COM-Port ist nicht geöffnet",0)
EndIf
EndProcedure


Procedure Take_SDA()
If HCom > 0
If ComGetDSR(HCom)
SetGadgetText(#SDA_GET_SHOW, "1")
PureCOLOR_SetGadgetColor(#SDA_GET_SHOW, RGB(0,0,0), RGB(0,255,0))
Else
SetGadgetText(#SDA_GET_SHOW, "0")
PureCOLOR_SetGadgetColor(#SDA_GET_SHOW, RGB(0,0,0), RGB(255,255,255))
EndIf
Else
MessageRequester("F E H L E R S D A", "COM-Port ist nicht geöffnet",0)
EndIf
EndProcedure


Procedure Toggle_SCL()
If HCom > 0
If scl_status = 0
PureCOLOR_SetGadgetColor(#SCL_SET_SHOW, RGB(0,0,0), RGB(255,255,128))
SetGadgetText(#SCL_SET_SHOW, "1")
ComSetRTS(HCom,1)
scl_status = 1
Else
PureCOLOR_SetGadgetColor(#SCL_SET_SHOW, RGB(0,0,0), RGB(255,255,255))
SetGadgetText(#SCL_SET_SHOW, "0")
ComSetRTS(HCom,0)
scl_status = 0
EndIf
Else
MessageRequester("F E H L E R S C L ", "COM-Port ist nicht geöffnet",0)
EndIf
EndProcedure

Procedure Take_INT()
If HCom > 0
If ComGetCTS(HCom)
SetGadgetText(#INT_GET_SHOW, "1")
PureCOLOR_SetGadgetColor(#INT_GET_SHOW, RGB(0,0,0), RGB(255,0,0))
Else
SetGadgetText(#INT_GET_SHOW, "0")
PureCOLOR_SetGadgetColor(#INT_GET_SHOW, RGB(0,0,0), RGB(255,255,255))

EndIf
Else
MessageRequester("F E H L E R I N T", "COM-Port ist nicht geöffnet",0)
EndIf
EndProcedure


; Hier beginnt das Hauptprogramm
com_status = 0 ; RS232 ist ausgeschaltet
sda_status = 0 ; SDA ist ausgeschaltet
scl_status = 0 ; SCL ist ausgeschaltet

Open_RS232_I2C_KOPPLER() ; WINDOW aufbauen
SetWindowCallback(@WindowCallBack()) ; Listeneinträge für Bautrate
AddGadgetItem(#BAUTRATE, -1,"75")  ; hier wird die Liste generiert,
AddGadgetItem(#BAUTRATE, -1,"150") ; aus der der Nutzer eine Bautrate
AddGadgetItem(#BAUTRATE, -1,"300") ; auswählen kann
AddGadgetItem(#BAUTRATE, -1,"600")
AddGadgetItem(#BAUTRATE, -1,"1200")
AddGadgetItem(#BAUTRATE, -1,"2400")
AddGadgetItem(#BAUTRATE, -1,"4800")
AddGadgetItem(#BAUTRATE, -1,"9600")
AddGadgetItem(#BAUTRATE, -1,"19200")
SetGadgetState(#BAUTRATE,7) ; 9600 ist der DefaultWert

; Nun wurd es Farbig
PureCOLOR_SetGadgetColor(#SDA_SET_SHOW, RGB(0,0,0), RGB(255,255,255))
PureCOLOR_SetGadgetColor(#INT_GET_SHOW, RGB(0,0,0), RGB(255,255,255))
PureCOLOR_SetGadgetColor(#SCL_SET_SHOW, RGB(0,0,0), RGB(255,255,255))
PureCOLOR_SetGadgetColor(#SDA_GET_SHOW, RGB(0,0,0), RGB(255,255,255))
PureCOLOR_SetGadgetColor(#COM_CONTROL_HEADLINE, RGB(0,0,0), RGB(168,176,200))
PureCOLOR_SetGadgetColor(#I2C_CONTROL_HEADLINE, RGB(0,0,0), RGB(168,176,200))
PureCOLOR_SetGadgetColor(#BAUTRATE_HEADLINE, RGB(0,0,0), RGB(168,176,200))
PureCOLOR_SetGadgetColor(#COM_PORT_HEADLINE, RGB(0,0,0), RGB(168,176,200))

; Jetzt noch die Beschreibung einfügen
AddGadgetItem(#Editor_1,0,"1. COM öffnen")
AddGadgetItem(#Editor_1,1,"2. Die Signale SCL und SDA lassen sich einzeln schalten. Die LEDs am Koppler müssen dem Signal folgen")
AddGadgetItem(#Editor_1,2,"3. Mit dem Knopf SDA ? kann der Signalzustand dann wieder zurückgelesen werden.")
AddGadgetItem(#Editor_1,3,"4. SDA auf 1 stellen und an einem Slave nach Masse ziehen - SDA ? drücken - Signal muss 0 sein.")
AddGadgetItem(#Editor_1,4,"5. INT-Signal auf Masse zeihen - INT ? drücken - Signal muss 1 sein ansonsten 0.")
AddGadgetItem(#Editor_1,5,"")
AddGadgetItem(#Editor_1,6,"Viel Spass beim Testen")


; Nachsehen welche Schnittstellen sind denn da?
Test_COM_Ports()

Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
Case #COM_OPEN
Handle_RS232()
Case #SDA_SET
Toggle_SDA()
Case #SDA_GET
Take_SDA()
Case #SCL_SET
Toggle_SCL()
Case #INT_GET
Take_INT()
EndSelect
EndSelect

Until EventID = #PB_Event_CloseWindow


; ExecutableFormat=
; UseIcon=D:\ICON\RS232I2C.ico
; Executable=D:\Basic\Projekte\I2C_RS232_Tester\rs232i2c.exe
; EOF

 

Quellcode für PureBasic
puba_beisp_1.zip (20 kB)
PureBasic Quellcode zum Testprogramm für den I2C-Koppler (I2Ps)