Pc bus registrer
Inhalt
1. Einleitung 2
2. Die verwendeten I²C-Bus-Register 2
3. Programmversion ohne Bedienoberfläche 3
4. Programmversion mit Bedienoberfläche 11
4.1.
Grundlegende Funktion von mC- und PC-Programm 11
4.2. Inbetriebnahme mit dem Microcontroller-Board 11
4.3. Hilfesystem 11
4.4.
Anhang 12
4.4.1. Initialisierung 12
4.4.2.
Kommunikationszeichen 12
4.4.3. Gespeicherte Einstellungen 12
4.4.4.
Statuszustände in mC und PC 13
4.4.5. Die Formulare und Module des PC-Programms 14
4.4.5.
1. FormMain 14
4.4.5.2. FormKonfig 32
4.
4.5.3. FormVerbinden 34
4.4.5.
4. FormInfo 36
4.4.6. Das mC-Programm 37
Einleitung
Das Programm steuert ein I2C-Bus-System. Dabei bedient es sich vorgegebener Hardwaretreiber, die softwaremäßig angesteuert werden und somit den Bus ansprechen.
Der Benutzer sendet die Daten vom PC aus über die serielle Schnittstelle an den Microcontroller. Dieser steuert über die spezielle Hardware den Bus. Empfangsseitig arbeitet auch ein Microcontroller, der die Daten wiederum über die serielle Schnittstelle zum PC überträgt.
Die Realisierung der Bedienerführung des Programms erfolgte in zwei Versionen. Die erste Version, die lediglich als Vorversion zur letztgültigen zweiten Version gedachte war, besteht nur aus dem in Assembler geschriebenen Programm für den Microcontroller, das über ein Terminalprogramm kommuniziert. Einstellungen müssen direkt im Programmcode vorgenommen und dieser anschließend erneut assembliert werden.
Die zweite Version besteht aus einem Assembler-Programm und einem auf Microsoft Windows basierenden Programm für den PC, das mit dem Assembler-Programm kommuniziert.
Die verwendeten I²C-Bus-Register
Die Hardwaretreiber des Busses werden von der Software angesprochen, indem diese entsprechende Werte in die zuständigen Register schreibt. Es gibt hierfür vier Register, die wie im folgenden erklärt zu verwenden sind.
S1ADR
A6
A5
A4
A3
A2
A1
A0
GC
In den ersten sieben Bits A0-A6 wird die eigene Adresse gespeichert, mit der der Teilnehmer im Bus angesprochen werden kann. GC bestimmt, ob das Gerät auf einen General Call reagiert; wobei 0 diesen erlaubt und 1 diesen ignoriert.
S1DAT
D7
D6
D5
D4
D3
D2
D1
D0
Bei einem Transmitter wird in dieses Register das zu übertragende Byte geschrieben.
Ein Receiver zeigt damit das soeben empfangene Byte.
S1CON
CR2
ENS1
STA
STO
SI
AA
CR1
CR0
Die Bits CR0, CR1, CR2 legen die Übertragungsrate des Busses fest. Das Setzen von ENS1 aktiviert die Bus-Schnittstelle. Setzen von STA oder STO bewirkt eine Start- beziehungsweise Stoppaufforderung an den Bus. STA muß anschließend wieder rückgesetzt werden, STO macht dies selbständig. SI ist das Interrupt-Flag, welches bei jedem Bus-Interrupt gesetzt wird und anschließend rückgesetzt werden muß, um die Busübertragung fortzusetzen.
Ein gesetztes AA läßt das Geräte ein Acknologe schicken, wenn es die Kommunikation erfordert, ein rückgesetztes AA hingegen läßt das Gerät nicht reagieren und damit ein Not Acknolege schicken.
S1STA
S7
S6
S5
S4
S3
S2
S1
S0
Dieses Byte enthält nach einem vom Bus ausgelösten Interrupt den Status, in dem sich der Bus befindet und der den Interrupt ausgelöst hat.
Programmversion ohne Bedienoberfläche
Dieses Programm erfüllt die vier Funktionen Master Transmitter, Master Receiver, Slave Transmitter, Slave Receiver.
Zu Starten ist das Programm bei der Adresse 8000h.
Um die Übertragung als Master zu beginnen, muß „a“ eingegeben werden. Abhängig vom Richtungsbit, das bei dieser Version im Programmcode in den Routinen „08h Start gesendet“ beziehungsweise „10h Repeated-Start gesendet“ eingestellt werden muß, wird das Terminal zum Master Transmitter oder zum Master Receiver.
Da das Programm alle für den Betrieb als Slave nötigen Interruptroutinen enthält, kann es auch als Slave angesprochen werden. Hierbei wird an Hand des empfangenen Richtungsbit zwischen Transmitter und Receiver unterschieden und automatisch die entsprechende Routine angesprochen.
Die Übertragung kann vom Transmitter, gleich ob Master oder Slave, mit „!“ beendet werden.
Zu beachten ist, daß alle gleichzeitig am Bus verwendeten Programme unterschiedliche eigene Adressen besitzen müssen, was im Programmcode im entsprechenden Register S1ADR in der Routine „Initialisierung“ einzustellen ist.
;************************************************************
; I2C-Bus
; Entwickelt für µC-Kit von Kern
; Michael Popp; Februar 1998
;************************************************************
;************************************************************
; Vereinbarungen
charin code 2730h ;Unterprogramm Zeicheneingabe
charout code 273Ch ;Unterprogramm Zeichenausgabe
anfang code 8000h ;Start-Adresse
inter code 802Bh ;Adresse für I2C-Interrupt
haupt code 8200h ;Adresse Hauptprogramm
s1adr data 0dbh ;Eigene Bus-Adresse
s1dat data 0dah ;Bus-Daten
s1con data 0d8h ;Bus-Kontrollen
s1sta data 0d9h ;Bus-Status
P1_6 bit 96h ;SCL-Pin
P1_7 bit 97h ;SDA-Pin
si bit 0dbh ;Interrupt Flag
aa bit 0dah ;Ackknowledge Flag
sta bit 0ddh ;Startbit
sto bit 0dch ;Stoppbit
es1 bit 0adh ;I2C-Bus-Interrupt aktivieren
;************************************************************
;************************************************************
; Hauptprogramm
org anfang
mov dptr,#haupt ;
clr a ;
jmp @a+dptr ;
org haupt
call init ;Bus initialisieren
loop: mov a,s1sta
cjne a,#0F8h,loop ;Interrupts
call charin ;
cjne a,#61h,loop ;
call start ;
jmp loop ;
;************************************************************
;************************************************************
; Initialisierung
; -> /
; <- /
; cha ea, es1, P1_6, P1_7, s1adr, s1con
; subr /
init: setb ea ;Interrupts aktivieren
setb es1 ;I2C-Bus-Interrupts aktivieren
setb P1_6 ;
setb P1_7 ;
mov s1adr,#10000000b ;Eigene Busadresse, General Call aktiviert
mov s1con,#11000101b ;Controllregister
;------------------------------------------------------------
;S1CON: 1 1 0 0 0 1 0 1
; - ENS1 STA STO SI AA CR1 CR0
;------------------------------------------------------------
ret
;************************************************************
;************************************************************
; Starten
; -> /
; <- /
; cha aa, sta, si
; subr /
start: setb aa
setb sta ;Startbit setzen
clr si
ret
;************************************************************
;************************************************************
; Interruptroutinen
; -> /
; <- /
; cha s1dat, s1con, a
; subr charin, charout
;------------------------------------------------------------
; 00h alle Bus-Fehler
sta00:
reti
;------------------------------------------------------------
; 08h MT, MR Start gesendet
sta08:
mov S1DAT,#11000000b ;Richtungsbit auf senden
; mov S1DAT,#11000001b ;Richtungsbit auf empfangen
clr sta ;
clr sto ;
setb aa ;
clr SI ;
reti
;------------------------------------------------------------
; 10h MT, MR Repeated-Start gesendet
sta10:
mov S1DAT,#11000000b ;Richtungsbit auf senden
; mov S1DAT,#11000001b ;Richtungsbit auf empfangen
clr sta ;
clr sto ;
setb aa ;
clr SI ;
reti
;------------------------------------------------------------
; 18h MT Adresse+W gesendet, ACK empfangen
sta18: call charin ;Tastatureingabe
cjne a,#21h,lab18a ; ! zum Abbruch
setb sto ;Stopbit setzen
jmp lab18b ;Verarbeitung der Daten ueberspringen
lab18a: call charout ;
mov s1dat,a ;
lab18b: clr si ;Daten senden oder Verbindung beenden
reti
;------------------------------------------------------------
; 20h MT Adresse+W gesendet, NACK empfangen
sta20: setb STO ;Stop senden
clr SI
reti
;------------------------------------------------------------
; 28h MT Daten gesendet, ACK empfangen STANDARD
sta28: call charin ;Tastatureingabe
cjne a,#21h,lab28a ; ! zum Abbruch
setb sto ;Stopbit setzen
jmp lab28b ;Verarbeitung der Daten ueberspringen
lab28a: call charout ;
mov s1dat,a ;
lab28b: clr si ;Daten senden oder Verbindung beenden
reti
;------------------------------------------------------------
; 30h MT Daten gesendet, NACK empfangen
sta30: setb sto
clr si
reti
;------------------------------------------------------------
; 38h MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)
; beim NACK (Receiver)
sta38: setb sto
clr si
reti
;------------------------------------------------------------
; 40h MR Adresse+R gesendet, ACK empfangen
sta40: clr si ;auf Daten vom Slave warten
reti
;------------------------------------------------------------
; 48h MR Adresse+R gesendet, NACK empfangen
sta48: setb sto
clr si
reti
;------------------------------------------------------------
; 50h MR Daten empfangen, ACK gesendet STANDARD
sta50: mov A,s1dat ;Daten vom Slave in Akku
cjne a,#21h,lab50a ; ! von Slave zum Beenden
clr aa
jmp lab50b
lab50a: call charout ;Datenausgabe
lab50b: clr si
reti
;------------------------------------------------------------
; 58h MR Daten empfangen, NACK gesendet
sta58: setb sto
clr si
reti
;------------------------------------------------------------
; 60h SR Adresse+W empfangen, ACK gesendet
sta60: clr si
reti
;------------------------------------------------------------
; 68h SR Arbitration verloren als adressierter Master,
; Adresse+W empfangen, ACK gesendet
sta68: setb sto
clr si
reti
;------------------------------------------------------------
; 70h SR General-Call empfangen, ACK gesendet
sta70: clr si
reti
;------------------------------------------------------------
; 78h SR Arbitration verloren als adressierter Master,
; General-Call empfangen, ACK gesendet
sta78: setb sto
clr si
reti
;------------------------------------------------------------
; 80h SR Daten empfangen, ACK gesendet (adressiert) STANDARD
sta80: mov A,S1DAT ;Daten vom Master in Akku
call charout ;Zeichen ausgeben
clr si
reti
;------------------------------------------------------------
; 88h SR Daten empfangen, NACK gesendet (adressiert)
sta88: clr si
reti
;------------------------------------------------------------
; 90h SR Daten empfangen, ACK gesendet (General Call)
sta90: mov A,S1DAT ;Daten vom Master in Akku
call charout ;Zeichen ausgeben
clr si
reti
;------------------------------------------------------------
; 98h SR Daten empfangen, NACK gesendet (General Call)
sta98: clr si
reti
;------------------------------------------------------------
; A0h SR Stop oder Repeated-Start empfangen
staA0: clr si
reti
;------------------------------------------------------------
; A8h ST Adresse+R empfangen, ACK gesendet
staA8: mov r5,#00h ;
call charin ;Zeicheneingabe
cjne a,#21h,labA8a ; ! von Slave zum Beenden
mov r5,#0FFh
labA8a: call charout ;Zeichen ausgeben
mov S1DAT,A ;
clr si ;Uebertragung
reti
;------------------------------------------------------------
; BOh ST Arbitration verloren als adressierter Master,
; Adresse+R empfangen, ACK gesendet
staB0: setb sto
clr si
reti
;------------------------------------------------------------
; B8h ST Daten gesendet, ACK empfangen STANDARD
staB8: cjne r5,#0FFh,labB8b
mov a,#0FFh
jmp labB8c
labB8b: call charin ;Zeicheneingabe
cjne a,#21h,labB8a ; ! von Slave zum Beenden
mov r5,#0FFh
jmp labB8c
labB8a: call charout ;Zeichen ausgeben
labB8c: mov S1DAT,A ;
clr si ;Uebertragung
reti
;------------------------------------------------------------
; C0h ST Daten gesendet, NACK empfangen
staC0: clr si
reti
;------------------------------------------------------------
; C8h ST AA=0, letzte Daten gesendet, ACK empfangen
staC8: mov S1DAT,0FFh ;S1DAT=11111111b
clr si
reti
;************************************************************
;************************************************************
; Interruptsprünge
org inter
jmp intera
org 8F00h
intera:
mov A,S1STA ;Je nach Statusinhalt
mov dptr,#9000h ;Sprung auf jeweilige
jmp @A+dptr ;SUB-Routine
;------------------------------------------------------------
;------------------------------------------------------------
org 9000h
jmp sta00
;------------------------------------------------------------
org 9008h
jmp sta08
;------------------------------------------------------------
org 9010h
jmp sta10
;------------------------------------------------------------
org 9018h
jmp sta18
;------------------------------------------------------------
org 9020h
jmp sta20
;------------------------------------------------------------
org 9028h
jmp sta28
;------------------------------------------------------------
org 9030h
jmp sta30
;------------------------------------------------------------
org 9038h
jmp sta38
;------------------------------------------------------------
org 9040h
jmp sta40
;------------------------------------------------------------
org 9048h
jmp sta48
;------------------------------------------------------------
org 9050h
jmp sta50
;------------------------------------------------------------
org 9058h
jmp sta58
;------------------------------------------------------------
org 9060h
jmp sta60
;------------------------------------------------------------
org 9068h
jmp sta68
;------------------------------------------------------------
org 9070h
jmp sta70
;------------------------------------------------------------
org 9078h
jmp sta78
;------------------------------------------------------------
org 9080h
jmp sta80
;------------------------------------------------------------
org 9088h
jmp sta88
;------------------------------------------------------------
org 9090h
jmp sta90
;------------------------------------------------------------
org 9098h
jmp sta98
;------------------------------------------------------------
org 90A0h
jmp staA0
;------------------------------------------------------------
org 90A8h
jmp staA8
;------------------------------------------------------------
org 90B0h
jmp staB0
;------------------------------------------------------------
org 90B8h
jmp staB8
;------------------------------------------------------------
org 90C0h
jmp staC0
;------------------------------------------------------------
org 90C8h
jmp staC8
;************************************************************
end
Programmversion mit Bedienoberfläche
Das in Kapitel 3 beschriebene Assembler-Programm wurde um zur Kommunikation mit dem PC nötigen Zeilen ergänzt und wird nun über die serielle Schnittstelle mit einem PC-Programm angesprochen. Erstellt wurde dieses mit der Entwicklungsumgebung Microsoft Visual Basic 5.
0 Enterprise Edition.
Grundlegende Funktion von mC- und PC-Programm
Um den mC mit dem PC-Programm ansprechen zu können, muß sich der mC im I²C-Bus-Status F8h befinden. Nun kann vom PC-Programm die Verbindung zum mC erstellt werden. Dabei beginnt das Programm die serielle Schnittstelle des PCs zu beanspruchen. Dann sendet es den Befehl 80h an den mC, worauf dieser seinen Status F8h zu melden hat. Geschieht dies korrekt, so schickt der PC nun die Adresse, die das Terminal laut den Einstellungen anzunehmen hat, an den mC, wo sie im entsprechende Register S1ADR gelegt wird.
Weiters aktiviert der mC nun den I²C-Bus und den zugehörigen Interrupt.
Zu Beginn jeder Interrupt Service Routine des I²C-Busses sendet der Microcontroller seinen aktuellen Status an den PC. Der PC hat ebenfalls seinen eigenen Status, der in der Variablen „Status“ gespeichert ist. Erhält nun der PC das OnComm-Ereignis, welches durch den Eingang von Daten über die serielle Schnittstelle ausgelöst wird, so wählt er in einer auf den aktuellen PC-Status bezogenen Case-Anweisung den auszuführenden Programmcode. Hier wird die vom Microcontroller kommende Nachricht, die nun den aktuellen Status des Microcontrollers enthält, eingelesen. Somit kann der PC seinen Status aktualisieren.
Gleichzeitig wird ermittelt, ob der neue Status eine korrekte Fortsetzung des alten Status darstellt oder ob eine Fehler aufgetreten ist. Entsprechend verlaufen die weiteren Vorgänge im PC.
Bestimmte Statuszustände im PC erwarten sofort einen weiteren Eingang an Daten vom mC. Dazu wird im PC die Eigenschaft „Enabled“ des Hauptfenster „FormMain“ auf false gesetzt und der Timer aktiviert. Können nun wie erwartet Daten empfangen werden, so wird der Timer deaktiviert und das eingegangene Byte wird verarbeitet. Tritt jedoch das OnComm-Ereignis nicht auf, so schließt der PC nach Ablauf des Timers auf ein Fehlverhalten des mC und gibt eine Fehlermeldung am Bildschirm aus.
Inbetriebnahme mit dem Microcontroller-Board
Um das Programm testweise mit einem Entwicklungs-Board in Betrieb nehmen zu können, muß vorerst mittels eines Terminalprogramms das Assembler-Programm über die serielle Schnittstelle in den mC geladen werden. Dabei darf das PC-Programm noch keinen Anspruch auf die Schnittstelle erheben. Dann ist das mC-Programm an der Adresse 8000h zu starten und die Verbindung mit dem Terminalprogramm zu trennen.
Nun wird mit dem PC-Programm über die Schnittstelle die Verbindung zum mC hergestellt, anschließend kann auch die Busverbindung erfolgen. Entnehmen Sie nähere Beschreibungen zu diesen Schritten dem zugehörigen Hilfesystem.
Hilfesystem
Das zum Programm gehörende Hilfesystem wurde mit Microsoft Help Workshop 4.
02 erstellt.
Es beschreibt die Bedienung des Programms, so daß nähere Erläuterungen in dieser Dokumentation nicht erforderlich sind.
Anhang
Initialisierung
Sofort nach dem die Verbindung zum Microcontroller hergestellt wurde sendet der PC entsprechend den in der Record-Variablen „Einstellungen“ gespeicherten Einstellungen die folgenden Werte an den Microcontroller.
PC-Variable
mC-Variable
Beschreibung
Einstellungen.OwnAddress
S1ADR.0 bis S1ADR.
6
Terminal-Adresse
Einstellungen.GetGC
S1ADR.7
General Call annehmen
Kommunikationszeichen
Mit den folgenden festgelegten Werten fordert der PC den mC zu bestimmten Aktionen auf. Der mC empfängt diese Aufforderungen im Hauptprogramm und führt die entsprechende Aktion auch dort aus.
Code von PC
Beschreibung
80h
Verbindung zu mC herstellen; mC-Status an PC; I²C-Bus aktivieren
81h
Verbindung zu mC trennen; I²C-Bus deaktivieren
82h
Startaufforderung an Bus; CALL START
83h
Stoppaufforderung an Bus; SETB STO
84h
AA rücksetzen; CLR AA
85h
AA setzen; SETB AA
Gespeicherte Einstellungen
In der Record-Variablen „Einstellungen“ befinden sich die folgenden Einstellungen. Diese Variable wird bei jedem Programmstart aus der Datei „I2C.
ini“, die sich im aktuellen Verzeichnis befinden soll, geladen. Existiert die Datei nicht, so werden die Standardeinstellungen verwendet. Bei Programmbeendigung wird die aktuelle Variable „Einstellungen“ in dieser Datei gespeichert.
Beschreibung
Auf General Call reagieren
Eigene Adresse
An Speichern der Daten erinnern
Wartezeit nach Aufforderung
Serielle Schnittstelle
Ausgewählter Slave oder General Call
Slavetyp
Slaveadresse
Statuszustände in mC und PC
Kennung
Modus
Beschreibung
XX
-
PC ohne Verbindung
LC
-
Link Controller; Verbindungsversuch zu mC
00
Alle
Bus-Fehler
F8
-
PC mit mC verbunden, kein Bus-Betrieb
LB
MT, MR
Link Bus; Verbindungsversuch mit Bus
08
MT, MR
Start gesendet
10
MT, MR
Repeated-Start gesendet
18
MT
Adresse+W gesendet, ACK empfangen
20
MT
Adresse+W gesendet, NACK empfangen
28
MT
Daten gesendet, ACK empfangen; STANDARD
MT
MT
Master transmitting; Master sendet derzeit
30
MT
Daten gesendet, NACK empfangen
38
MT, MR
Arbitration verloren
beim Senden von Adresse oder Daten (Transmitter), beim NACK (Receiver)
40
MR
Adresse+R gesendet, ACK empfangen
48
MR
Adresse+R gesendet, NACK empfangen
50
MR
Daten empfangen, ACK gesendet; STANDARD
MR
MR
Master empfängt derzeit
RS
MR
Receiver stopped
58
MR
Daten empfangen, NACK gesendet
60
SR
Adresse+W empfangen, ACK gesendet
68
SR
Arbitration verloren als adressierter Master
Adresse+W empfangen, ACK gesendet
70
SR
General-Call empfangen, ACK gesendet
78
SR
Arbitration verloren als adressierter Master
General-Call empfangen, ACK gesendet
80
SR
Daten empfangen, ACK gesendet (adressiert); STANDARD
SR
SR
Slave empfängt derzeit (adressiert)
88
SR
Daten empfangen, NACK gesendet (adressiert)
90
SR
Daten empfangen, ACK gesendet (General Call)
GR
SR
Slave empfängt derzeit (General Call)
98
SR
Daten empfangen, NACK gesendet (General Call)
A0
SR
Stop oder Repeated-Start empfangen
A8
ST
Adresse+R empfangen, ACK gesendet
B0
ST
Arbitration verloren als adressierter Master
Adresse+R empfangen, ACK gesendet
B8
ST
Daten gesendet, ACK empfangen; STANDARD
ST
ST
Slave transmitting; Slave sendet derzeit
C0
ST
Daten gesendet, NACK empfangen
C8
ST
AA=0, letzte Daten gesendet, ACK empfangen
Die schattierten Zeilen enthalten Zustände, die nur im PC auftreten. Alle anderen Zustände treten im PC und im mC auf.
Die Formulare und Module des PC-Programms
Beschreibungen zu einzelnen Einstellungsdetails der Fenster sind dem Hilfesystem zu entnehmen.
FormMain
Option Explicit
Private Sub Form_Load()
IniPfadInit 'Pfad zur Datei I2C.ini festlegen
EinstellungenInit True 'Einstellungen laden
TextPfad = ""
Status = "XX"
MenuDateiSpeichern.Enabled = False
SetAnzeigen
On Error Resume Next
MSCommI2C.CommPort = Einstellungen.SerialPort
On Error GoTo 0
TimerI2C.Interval = Einstellungen.
StartWarten
CommonDialogHelp.HelpFile = App.HelpFile
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim Antwort As Variant
Dim Gespeichert As Boolean
Antwort = -1
If Einstellungen.SaveMsg And (RichTextBoxDaten.Tag = 1) Then
Antwort = MsgBox("Möchten Sie die Änderungen des Textfeldes speichern?", vbQuestion + vbYesNoCancel + vbDefaultButton1)
Select Case Antwort
Case vbYes
If (TextPfad = "") Then
On Error GoTo Abbrechen
CommonDialogSave.ShowSave
On Error GoTo Fehler1
RichTextBoxDaten.
SaveFile CommonDialogSave.filename, rtfText
On Error GoTo 0
GoTo Ende1
Fehler1:
MsgBox "Die Datei konnte nicht gespeichert werden.", vbCritical
Abbrechen:
Resume Fehler1Weiter
Fehler1Weiter:
CommonDialogSave.filename = ""
Cancel = -1
Ende1:
Else
On Error GoTo Fehler2
RichTextBoxDaten.SaveFile TextPfad, rtfText
GoTo Ende2
Fehler2:
MsgBox "Die Datei konnte nicht gespeichert werden.", vbCritical
Cancel = -1
Ende2:
End If
Case vbNo
Case vbCancel
Cancel = -1
End Select
End If
If (Cancel = 0) Then EinstellungenInit False
End Sub
Private Sub MenuDateiSenden_Click()
Dim AltStatus As String * 2
If (Status = "18") Or (Status = "28") Or (Status = "A8") Or (Status = "B8") Then
FormMain.
Enabled = False
AltStatus = Status
Select Case Status
Case "18", "28": Status = "MT"
Case "A8", "B8": Status = "ST"
End Select
SetAnzeigen
If (RichTextBoxDaten.SelText <> "") Then
SendePuffer = RichTextBoxDaten.SelText
Else
SendePuffer = RichTextBoxDaten.Text
End If
If Len(SendePuffer) > 0 Then
PufferPos = 1
On Error GoTo PortFehler
MSCommI2C.Output = Mid(SendePuffer, PufferPos, 1)
On Error GoTo 0
TimerI2C.Enabled = True
Else
Status = AltStatus
SetAnzeigen
FormMain.
Enabled = True
End If
End If
Exit Sub
PortFehler:
Resume FehlerWeiter
FehlerWeiter:
MsgBox "Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten."
On Error Resume Next
MSCommI2C.PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End Sub
Private Sub MenuDateiNeu_Click()
Dim Antwort As Variant
Dim Gespeichert As Boolean
Antwort = -1
If Einstellungen.SaveMsg And (RichTextBoxDaten.Tag = 1) Then
Antwort = MsgBox("Möchten Sie die Änderungen des Textfeldes speichern?", vbQuestion + vbYesNoCancel + vbDefaultButton1)
Select Case Antwort
Case vbYes
If (TextPfad = "") Then
On Error GoTo Abbrechen
CommonDialogSave.
ShowSave
On Error GoTo Fehler1
RichTextBoxDaten.SaveFile CommonDialogSave.filename, rtfText
On Error GoTo 0
NeuEinrichten
GoTo Ende1
Fehler1:
MsgBox "Die Datei konnte nicht gespeichert werden.", vbCritical
Abbrechen:
Resume Fehler1Weiter
Fehler1Weiter:
CommonDialogSave.filename = ""
Ende1:
Else
On Error GoTo Fehler2
RichTextBoxDaten.SaveFile TextPfad, rtfText
NeuEinrichten
GoTo Ende2
Fehler2:
MsgBox "Die Datei konnte nicht gespeichert werden.
", vbCritical
Ende2:
End If
Case vbNo
NeuEinrichten
Case vbCancel
End Select
Else
NeuEinrichten
End If
End Sub
Private Sub NeuEinrichten()
RichTextBoxDaten.TextRTF = ""
MenuDateiSpeichern.Enabled = False
TextPfad = ""
RichTextBoxDaten.Tag = 0
End Sub
Private Sub MenuDateiOffnen_Click()
On Error GoTo Abbrechen
CommonDialogOpen.ShowOpen
On Error GoTo Fehler
RichTextBoxDaten.LoadFile CommonDialogOpen.
filename, rtfText
On Error GoTo 0
TextPfad = CommonDialogOpen.filename
MenuDateiSpeichern.Enabled = True
RichTextBoxDaten.Tag = 0
Exit Sub
Fehler:
MsgBox "Die Datei konnte nicht geöffnet werden.", vbCritical
Abbrechen:
CommonDialogOpen.filename = ""
End Sub
Private Sub MenuDateiSpeichern_Click()
On Error GoTo Fehler
RichTextBoxDaten.
SaveFile TextPfad, rtfText
On Error GoTo 0
RichTextBoxDaten.Tag = 0
GoTo Ende
Fehler:
MsgBox "Die Datei konnte nicht geöffnet werden.", vbCritical
CommonDialogOpen.filename = ""
Ende:
End Sub
Private Sub MenuDateiSpeichernunter_Click()
On Error GoTo Abbrechen
CommonDialogSave.ShowSave
On Error GoTo Fehler
RichTextBoxDaten.SaveFile CommonDialogSave.
filename, rtfText
On Error GoTo 0
TextPfad = CommonDialogSave.filename
MenuDateiSpeichern.Enabled = True
RichTextBoxDaten.Tag = 0
GoTo Ende
Fehler:
MsgBox "Die Datei konnte nicht gespeichert werden.", vbCritical
Abbrechen:
CommonDialogSave.filename = ""
Ende:
End Sub
Private Sub MenuDateiBeenden_Click()
Unload FormMain
End Sub
Private Sub MenuVerbindungUperstellen_Click()
On Error GoTo NoPort
MSCommI2C.
PortOpen = True
On Error GoTo 0
FormMain.Enabled = False
Status = "LC"
SetAnzeigen
On Error GoTo PortFehler
MSCommI2C.Output = Chr$(Anmelden) 'Status anfordern
On Error GoTo 0
TimerI2C.Enabled = True
Exit Sub
NoPort:
MsgBox "Die gewählte serielle Schnittstelle ist nicht ansprechbar.", vbCritical
Exit Sub
PortFehler:
Resume FehlerWeiter
FehlerWeiter:
MsgBox "Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten."
On Error Resume Next
MSCommI2C.
PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End Sub
Private Sub MenuVerbindungUptrennen_Click()
Dim Trenne As Variant
Trenne = vbNo
If (Status <> "F8") Then
Trenne = MsgBox("Es besteht noch eine Busverbindung. Wird nun die Verbindung zum Microcontroller getrennt, kann der Microcontroller nicht vom Bus getrennt werden. Möchten Sie nun dennoch die Verbindung zum Microcontroller trennen?", (vbYesNo + vbExclamation + vbDefaultButton2))
Else
Trenne = vbYes
End If
If (Trenne = vbYes) Then
On Error Resume Next
If (Status <> "F8") Then MSCommI2C.Output = Chr$(Abmelden)
MSCommI2C.PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
End If
End Sub
Private Sub MenuVerbindungi2cErstellen_Click()
FormMain.
Enabled = False
Status = "LB"
SetAnzeigen
On Error GoTo PortFehler
MSCommI2C.Output = Chr$(SendSTA)
On Error GoTo 0
TimerI2C.Enabled = True
Exit Sub
PortFehler:
Resume FehlerWeiter
FehlerWeiter:
MsgBox "Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten."
On Error Resume Next
MSCommI2C.PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End Sub
Private Sub MenuVerbindungi2cErstellenxxx_Click()
Dim Verbinde As Boolean
FormVerbinden.
Show 1
Verbinde = (Einstellungen.SofortConnect) And (FormVerbinden.Tag = 1)
Unload FormVerbinden
If Verbinde Then MenuVerbindungi2cErstellen_Click
End Sub
Private Sub MenuVerbindungI2ctrennen_Click()
If (Status = "18") Or (Status = "28") Or (Status = "40") Or (Status = "50") Then
Select Case Status
Case "18", "28"
Status = "F8"
SetAnzeigen
On Error GoTo PortFehler
MSCommI2C.Output = Chr$(SendSTO)
On Error GoTo 0
Case "40", "50"
Status = "RS"
SetAnzeigen
On Error GoTo PortFehler
MSCommI2C.Output = Chr$(ClrAA)
On Error GoTo 0
End Select
End If
Exit Sub
PortFehler:
Resume FehlerWeiter
FehlerWeiter:
MsgBox "Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten."
On Error Resume Next
MSCommI2C.
PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End Sub
Private Sub MenuEinstellungenKonfig_Click()
FormKonfig.Show 1
If FormKonfig.Tag = 1 Then
On Error GoTo PortFehler
If (Status = "XX") Then MSCommI2C.CommPort = Einstellungen.SerialPort
On Error GoTo 0
TimerI2C.
Interval = Einstellungen.StartWarten
End If
Unload FormKonfig
Exit Sub
PortFehler:
Resume FehlerWeiter
FehlerWeiter:
MsgBox "Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten."
On Error Resume Next
MSCommI2C.PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End Sub
Private Sub MenuHilfeHilfethemen_Click()
'WinHelp Me.hwnd, App.
HelpFile, &HB, 0
CommonDialogHelp.ShowHelp
End Sub
Private Sub MenuHilfeInfo_Click()
FormInfo.Show 1
End Sub
Private Sub MSCommI2C_OnComm()
Dim PortInput As String
TimerI2C.Enabled = False
Select Case MSCommI2C.CommEvent
Case comEvReceive
On Error GoTo PortFehler
PortInput = AscB(MSCommI2C.Input)
On Error GoTo 0
Select Case Status
Case "XX"
Case "LC"
If (PortInput = 248) Then 'F8
Status = "F8"
SetAnzeigen
On Error GoTo PortFehler
MSCommI2C.
Output = Chr$(AdresseToZahl(Einstellungen.OwnAddress, Einstellungen.GetGC))
On Error GoTo 0
FormMain.Enabled = True
Else
On Error Resume Next
MSCommI2C.PortOpen = False
On Error GoTo 0
MsgBox "Der Microcontroller steht in einem vom Anfangsstatus ""F8"" abweichenden Status. Er muß auf diesen Anfangsstatus gestellt werden, bevor er angesprochen werden kann.
", vbExclamation
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End If
Case "00" 'Bus-Fehler
Case "F8"
Select Case PortInput
Case 96 '60h SR
Status = "60"
SetAnzeigen
Case 168 'A8h ST
Status = "A8"
SetAnzeigen
End Select
Case "LB"
On Error GoTo PortFehler
If (PortInput = 8) Or (PortInput = 10) Then '8h
Select Case Einstellungen.SelectSlave
Case True
On Error GoTo PortFehler
MSCommI2C.Output = Chr$(AdresseToZahl(Einstellungen.SlaveAddress, Einstellungen.SlaveTyp))
On Error GoTo 0
Case False
On Error GoTo PortFehler
MSCommI2C.
Output = Chr$(AdresseToZahl(GCAddress, False))
On Error GoTo 0
End Select
Select Case PortInput
Case 8: Status = "08"
Case 10: Status = "10"
End Select
SetAnzeigen
TimerI2C.Enabled = True
Else
MsgBox "Die Startaufforderung an den Bus ist fehlgeschlagen. Es wurde eine ungültige Antwort vom Microcontroller empfangen.", vbCritical
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
End If
Case "08" 'MT, MR Start gesendet
Select Case PortInput
Case 24 '18h MT ACK
Status = "18"
SetAnzeigen
FormMain.Enabled = True
Case 32 '20h MT NACK
Status = "20"
SetAnzeigen
MsgBox "Der adressierte Slave antwortet nicht.
", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case 64 '40h MR ACK
Status = "40"
SetAnzeigen
FormMain.Enabled = True
Case 72 '48h MR NACK
Status = "48"
SetAnzeigen
MsgBox "Der adressierte Slave antwortet nicht.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case Else
MsgBox "Der adressierte Slave antwortet nicht. Es wurde ein ungültiger Wert empfangen.
", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
End Select
Case "10" 'MT, MR Repeated-Start gesendet
Select Case PortInput
Case 24 '18h ACK
Status = "18"
SetAnzeigen
FormMain.Enabled = True
Case 32 '20h NACK
Status = "20"
SetAnzeigen
MsgBox "Der adressierte Slave antwortet nicht.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case 64 '40h MR ACK
Status = "40"
SetAnzeigen
FormMain.Enabled = True
Case 72 '48h MR NACK
Status = "48"
SetAnzeigen
MsgBox "Der adressierte Slave antwortet nicht.
", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case Else
MsgBox "Der adressierte Slave antwortet nicht. Es wurde ein ungültiger Wert empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
End Select
Case "18" 'no 'MT Adresse+W gesendet, ACK empfangen
Case "20" 'MT Adresse+W gesendet, NACK empfangen
Case "28" 'no 'MT Daten gesendet, ACK empfangen STANDARD
Case "MT"
Select Case PortInput
Case 40 '28 ACK
If Len(SendePuffer) > PufferPos Then
PufferPos = PufferPos + 1
On Error GoTo PortFehler
MSCommI2C.Output = Mid(SendePuffer, PufferPos, 1)
On Error GoTo 0
TimerI2C.
Enabled = True
Else
Status = "28"
SetAnzeigen
FormMain.Enabled = True
End If
Case 48 '30 NACK
Status = "30"
SetAnzeigen
MsgBox "Der Slave antwortet nicht. Es wurde NACK empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case Else
MsgBox "Es wurde eine ungültige Antwort empfangen.", vbExclamation
On Error GoTo PortFehler
MSCommI2C.
Output = Chr$(SendSTO)
On Error GoTo 0
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
End Select
Case "30" 'MT Daten gesendet, NACK empfangen
Case "38" 'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)
Case "40" 'MR Adresse+R gesendet, ACK empfangen"
Select Case PortInput
Case 80 '50h
FormMain.Enabled = False
Status = "MR"
SetAnzeigen
TimerI2C.Enabled = True
Case Else
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
End Select
Case "48" 'MR Adresse+R gesendet, NACK empfangen
Case "50" 'MR Daten empfangen, ACK gesendet STANDARD
Select Case PortInput
Case 80 '50h
FormMain.
Enabled = False
Status = "MR"
SetAnzeigen
TimerI2C.Enabled = True
Case Else
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
End Select
Case "MR" 'MR
RichTextBoxDaten.Text = RichTextBoxDaten.Text + Chr$(PortInput)
Status = "50"
SetAnzeigen
FormMain.
Enabled = True
Case "RS"
Select Case PortInput
Case 88 '58h
Status = "F8"
SetAnzeigen
Case Else
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
End Select
Case "58" 'MR Daten empfangen, NACK gesendet
Case "60" 'SR Adresse+W empfangen, ACK gesendet
Select Case PortInput
Case 128 '80h
FormMain.Enabled = False
Status = "SR"
SetAnzeigen
TimerI2C.Enabled = True
Case 160 'A0
Status = "A0"
SetAnzeigen
MsgBox "Die Bus-Verbindung wurde vom Master beendet.", vbInformation
Status = "F8"
SetAnzeigen
Case Else
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet.
Es wurde ein ungültiger Wert empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
End Select
Case "68" 'SR Arbitration verloren als adressierter Master,"
Case "70" 'SR General-Call empfangen, ACK gesendet"
Select Case PortInput
Case 144 '90h
FormMain.Enabled = False
Status = "GR"
SetAnzeigen
TimerI2C.Enabled = True
Case 160 'A0
Status = "A0"
SetAnzeigen
MsgBox "Die Bus-Verbindung wurde vom Master beendet.", vbInformation
Status = "F8"
SetAnzeigen
Case Else
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.
", vbExclamation
Status = "F8"
SetAnzeigen
End Select
Case "78" 'SR Arbitration verloren als adressierter Master,"
Case "80" 'SR Daten empfangen, ACK gesendet (adressiert) STANDARD"
Select Case PortInput
Case 128 '80h
FormMain.Enabled = False
Status = "SR"
SetAnzeigen
TimerI2C.Enabled = True
Case 160 'A0
Status = "A0"
SetAnzeigen
MsgBox "Die Bus-Verbindung wurde vom Master beendet.", vbInformation
Status = "F8"
SetAnzeigen
Case Else
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet. Es wurde ein ungültiger Wert empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
End Select
Case "SR":
RichTextBoxDaten.
Text = RichTextBoxDaten.Text + Chr$(PortInput)
Status = "80"
SetAnzeigen
FormMain.Enabled = True
Case "88" 'SR Daten empfangen, NACK gesendet (adressiert)"
Case "90" 'SR Daten empfangen, ACK gesendet (General Call)"
Select Case PortInput
Case 144 '90h
FormMain.Enabled = False
Status = "GR"
SetAnzeigen
TimerI2C.Enabled = True
Case 160 'A0
Status = "A0"
SetAnzeigen
MsgBox "Die Bus-Verbindung wurde vom Master beendet.", vbInformation
Status = "F8"
SetAnzeigen
Case Else
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet.
Es wurde ein ungültiger Wert empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
End Select
Case "GR"
RichTextBoxDaten.Text = RichTextBoxDaten.Text + Chr$(PortInput)
Status = "90"
SetAnzeigen
FormMain.Enabled = True
Case "98" 'SR Daten empfangen, NACK gesendet (General Call)"
Case "A0" 'no SR Stop oder Repeated-Start empfangen"
Case "A8" 'ST Adresse+R empfangen, ACK gesendet"
Case "B0" 'ST Arbitration verloren als adressierter Master,"
Case "B8" 'ST Daten gesendet, ACK empfangen STANDARD"
Case "ST"
Select Case PortInput
Case 184 'B8 ACK
If Len(SendePuffer) > PufferPos Then
PufferPos = PufferPos + 1
On Error GoTo PortFehler
MSCommI2C.Output = Mid(SendePuffer, PufferPos, 1)
On Error GoTo 0
TimerI2C.
Enabled = True
Else
Status = "B8"
SetAnzeigen
FormMain.Enabled = True
End If
Case 192 'C0 NACK
Status = "C0"
SetAnzeigen
MsgBox "Es wurde NACK empfangen. Die Verbindung ist beendet.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case Else
MsgBox "Es wurde eine ungültige Antwort empfangen.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.
Enabled = True
End Select
Case "C0" 'ST Daten gesendet, NACK empfangen"
Case "C8" 'ST AA=0, letzte Daten gesendet, ACK empfangen"
End Select
End Select
Exit Sub
PortFehler:
Resume FehlerWeiter
FehlerWeiter:
MsgBox "Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten."
On Error Resume Next
MSCommI2C.PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End Sub
Private Sub TimerI2C_Timer()
TimerI2C.Enabled = False
Select Case Status
Case "XX" 'no
Case "LC"
On Error Resume Next
MSCommI2C.PortOpen = False
On Error GoTo 0
MsgBox "Der Microcontroller antwortet nicht.
", vbCritical
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
Case "00" 'Bus-Fehler
Case "F8"
Case "LB"
MsgBox "Die Startaufforderung an den Bus ist fehlgeschlagen. Es konnte keine Antwort empfangen werden.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "08" 'MT, MR Start gesendet
MsgBox "Der adressierte Slave antwortet nicht.", vbExclamation
On Error GoTo PortFehler
MSCommI2C.
Output = Chr$(SendSTO)
On Error GoTo 0
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "10" 'MT, MR Repeated-Start gesendet
MsgBox "Der adressierte Slave antwortet nicht.", vbExclamation
On Error GoTo PortFehler
MSCommI2C.Output = Chr$(SendSTO)
On Error GoTo 0
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "18" 'MT Adresse+W gesendet, ACK empfangen
Case "20" 'MT Adresse+W gesendet, NACK empfangen
Case "28" 'MT Daten gesendet, ACK empfangen STANDARD
Case "MT"
MsgBox "Der Slave antwortet nicht. Es konnte keine Antwort empfangen werden.
", vbExclamation
On Error GoTo PortFehler
MSCommI2C.Output = Chr$(SendSTO)
On Error GoTo 0
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "30" 'MT Daten gesendet, NACK empfangen
Case "38" 'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)
Case "40" 'MR Adresse+R gesendet, ACK empfangen"
Case "48" 'MR Adresse+R gesendet, NACK empfangen
Case "50" 'MR Daten empfangen, ACK gesendet STANDARD
Case "MR" 'MR
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet. Es konnten keine Daten empfangen werden.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "RS"
Case "58" 'MR Daten empfangen, NACK gesendet
Case "60" 'no SR Adresse+W empfangen, ACK gesendet
Case "68" 'SR Arbitration verloren als adressierter Master,"
Case "70" 'no SR General-Call empfangen, ACK gesendet"
Case "78" 'SR Arbitration verloren als adressierter Master,"
Case "80" 'no SR Daten empfangen, ACK gesendet (adressiert) STANDARD"
Case "SR":
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet.
Es konnten keine Daten empfangen werden.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "88" 'SR Daten empfangen, NACK gesendet (adressiert)"
Case "90" 'no SR Daten empfangen, ACK gesendet (General Call)"
Case "GR"
MsgBox "Die Verbindung wurde aufgrund eines Fehlers beendet. Es konnten keine Daten empfangen werden.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "98" 'SR Daten empfangen, NACK gesendet (General Call)"
Case "A0" 'no SR Stop oder Repeated-Start empfangen"
Case "A8" 'ST Adresse+R empfangen, ACK gesendet"
Case "B0" 'ST Arbitration verloren als adressierter Master,"
Case "B8" 'ST Daten gesendet, ACK empfangen STANDARD"
Case "ST"
MsgBox "Der Master antwortet nicht.
Es konnte keine Antwort empfangen werden.", vbExclamation
Status = "F8"
SetAnzeigen
FormMain.Enabled = True
Case "C0" 'ST Daten gesendet, NACK empfangen"
Case "C8" 'ST AA=0, letzte Daten gesendet, ACK empfangen"
End Select
Exit Sub
PortFehler:
Resume FehlerWeiter
FehlerWeiter:
MsgBox "Beim Zugriff auf die serielle Schnittstelle des PCs ist ein Fehler aufgetreten."
On Error Resume Next
MSCommI2C.PortOpen = False
On Error GoTo 0
Status = "XX"
SetAnzeigen
FormMain.Enabled = True
End Sub
Public Sub SetAnzeigen() 'Menueleiste und Statusleiste aktualisieren
SetMenu
SetStatusBar
End Sub
Public Sub SetMenu() 'Menueleiste aktualisieren
Select Case Status
Case "XX": SetMenuEinrichten False, False, False, False, True, False
Case "LC": SetMenuEinrichten False, False, False, False, False, False
Case "00" 'Bus-Fehler
Case "F8": SetMenuEinrichten False, True, True, False, False, True
Case "LB": SetMenuEinrichten False, False, False, False, False, False
Case "08": SetMenuEinrichten False, False, False, False, False, False 'MT, MR Start gesendet
Case "10": SetMenuEinrichten False, False, False, False, False, False 'MT, MR Repeated-Start gesendet
Case "18": SetMenuEinrichten True, True, True, True, False, True 'MT Adresse+W gesendet, ACK empfangen
Case "20": SetMenuEinrichten False, False, False, False, False, False 'MT Adresse+W gesendet, NACK empfangen
Case "28": SetMenuEinrichten True, True, True, True, False, True 'MT Daten gesendet, ACK empfangen STANDARD
Case "MT": SetMenuEinrichten False, False, False, False, False, False
Case "30": SetMenuEinrichten False, False, False, False, False, False 'MT Daten gesendet, NACK empfangen
Case "38" 'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)
Case "40": SetMenuEinrichten False, False, False, True, False, True 'MR Adresse+R gesendet, ACK empfangen"
Case "48": SetMenuEinrichten False, False, False, False, False, False 'MR Adresse+R gesendet, NACK empfangen
Case "50": SetMenuEinrichten False, False, False, True, False, True 'MR Daten empfangen, ACK gesendet STANDARD
Case "MR": SetMenuEinrichten False, False, False, False, False, True 'MR
Case "RS": SetMenuEinrichten False, False, False, False, False, False
Case "58": SetMenuEinrichten False, False, False, False, False, False 'MR Daten empfangen, NACK gesendet
Case "60": SetMenuEinrichten False, False, False, False, False, True 'SR Adresse+W empfangen, ACK gesendet
Case "68" 'SR Arbitration verloren als adressierter Master,"
Case "70": SetMenuEinrichten False, False, False, False, False, True 'SR General-Call empfangen, ACK gesendet"
Case "78" 'SR Arbitration verloren als adressierter Master,"
Case "80": SetMenuEinrichten False, False, False, False, False, True 'SR Daten empfangen, ACK gesendet (adressiert) STANDARD"
Case "SR": SetMenuEinrichten False, False, False, False, False, True
Case "88": SetMenuEinrichten False, False, False, False, False, False 'SR Daten empfangen, NACK gesendet (adressiert)"
Case "90": SetMenuEinrichten False, False, False, False, False, True 'SR Daten empfangen, ACK gesendet (General Call)"
Case "GR": SetMenuEinrichten False, False, False, False, False, True
Case "98": SetMenuEinrichten False, False, False, False, False, False 'SR Daten empfangen, NACK gesendet (General Call)"
Case "A0": SetMenuEinrichten False, False, False, False, False, False 'SR Stop oder Repeated-Start empfangen"
Case "A8": SetMenuEinrichten True, False, False, False, False, True 'ST Adresse+R empfangen, ACK gesendet"
Case "B0" 'ST Arbitration verloren als adressierter Master,"
Case "B8": SetMenuEinrichten True, False, False, False, False, True 'ST Daten gesendet, ACK empfangen STANDARD"
Case "ST": SetMenuEinrichten False, False, False, False, False, False
Case "C0": SetMenuEinrichten False, False, False, False, False, False 'ST Daten gesendet, NACK empfangen"
Case "C8": SetMenuEinrichten False, False, False, False, False, False 'ST AA=0, letzte Daten gesendet, ACK empfangen"
End Select
End Sub
Public Sub SetMenuEinrichten(Senden, I2cerstellen, I2cerstellenxxx, I2ctrennen, Uperstellen, Uptrennen As Boolean)
MenuDateiSenden.
Enabled = Senden
MenuVerbindungI2cerstellen.Enabled = I2cerstellen
MenuVerbindungI2cerstellenxxx.Enabled = I2cerstellenxxx
MenuVerbindungI2ctrennen.Enabled = I2ctrennen
MenuVerbindungUperstellen.Enabled = Uperstellen
MenuVerbindungUptrennen.Enabled = Uptrennen
End Sub
Public Sub SetStatusBar() 'Statusleiste aktualisieren
Select Case Status
Case "XX"
StatusBarMain.
Panels(1).Text = "XX"
StatusBarMain.Panels(2).Text = "Keine Verbindung"
StatusBarMain.Panels(3).Text = ""
Case "LC"
StatusBarMain.
Panels(1).Text = "LC"
StatusBarMain.Panels(2).Text = "Microcontroller wird gesucht...
"
StatusBarMain.Panels(3).Text = ""
Case "00" 'Bus-Fehler
Case "F8"
StatusBarMain.Panels(1).Text = "F8"
StatusBarMain.Panels(2).
Text = "Microcontroller verbunden"
StatusBarMain.Panels(3).Text = ""
Case "LB"
StatusBarMain.Panels(1).Text = "LB"
StatusBarMain.Panels(2).
Text = "Startaufforderung wird gesendet..."
Select Case Einstellungen.SlaveTyp
Case True: StatusBarMain.Panels(3).
Text = "Master Receiver"
Case False: StatusBarMain.Panels(3).Text = "Master Transmitter"
End Select
Case "08" 'MT, MR Start gesendet
StatusBarMain.Panels(1).Text = "08"
StatusBarMain.Panels(2).
Text = "Addresse wird gesendet..."
Select Case Einstellungen.SlaveTyp
Case True: StatusBarMain.Panels(3).
Text = "Master Receiver"
Case False: StatusBarMain.Panels(3).Text = "Master Transmitter"
End Select
Case "10" 'MT, MR Repeated-Start gesendet
StatusBarMain.Panels(1).Text = "10"
StatusBarMain.Panels(2).
Text = "Addresse wird gesendet..."
Select Case Einstellungen.SlaveTyp
Case True: StatusBarMain.Panels(3).
Text = "Master Receiver"
Case False: StatusBarMain.Panels(3).Text = "Master Transmitter"
End Select
Case "18" 'MT Adresse+W gesendet, ACK empfangen
StatusBarMain.Panels(1).Text = "18"
StatusBarMain.Panels(2).
Text = "Busverbindung besteht"
StatusBarMain.Panels(3).Text = "Master Transmitter"
Case "20" 'MT Adresse+W gesendet, NACK empfangen
StatusBarMain.Panels(1).Text = "20"
StatusBarMain.Panels(2).
Text = "Verbindung fehlgeschlagen"
StatusBarMain.Panels(3).Text = "Master Transmitter"
Case "28" 'MT Daten gesendet, ACK empfangen STANDARD
StatusBarMain.Panels(1).Text = "28"
StatusBarMain.Panels(2).
Text = "Busverbindung besteht"
StatusBarMain.Panels(3).Text = "Master Transmitter"
Case "MT"
StatusBarMain.Panels(1).Text = "MT"
StatusBarMain.Panels(2).
Text = "Daten werden gesendet..."
StatusBarMain.Panels(3).Text = "Master Transmitter"
Case "30" 'MT Daten gesendet, NACK empfangen
StatusBarMain.
Panels(1).Text = "30"
StatusBarMain.Panels(2).Text = "Busverbindung beendet"
StatusBarMain.Panels(3).Text = "Master Transmitter"
Case "38" 'MT, MR Arbitration verloren beim Senden von Adresse oder Daten (Transmitter)
Case "40" 'MR Adresse+R gesendet, ACK empfangen"
StatusBarMain.
Panels(1).Text = "40"
StatusBarMain.Panels(2).Text = "Busverbindung besteht"
StatusBarMain.Panels(3).Text = "Master Receiver"
Case "48" 'MR Adresse+R gesendet, NACK empfangen
StatusBarMain.
Panels(1).Text = "48"
StatusBarMain.Panels(2).Text = "Verbindung fehlgeschlagen"
StatusBarMain.Panels(3).Text = "Master Receiver"
Case "50" 'MR Daten empfangen, ACK gesendet STANDARD
StatusBarMain.
Panels(1).Text = "50"
StatusBarMain.Panels(2).Text = "Busverbindung besteht"
StatusBarMain.Panels(3).Text = "Master Receiver"
Case "MR" 'MR
StatusBarMain.
Panels(1).Text = "MR"
StatusBarMain.Pane
Anmerkungen: |
| impressum | datenschutz
© Copyright Artikelpedia.com