פרויקט לדוגמה 4 שילוב כל המרכיבים בפרויקט אחד

כללי:

הפרויקט הבא משלב בפרויקט אחד מעגל אחד בן 16 מוצאים דיגיטליים 8 כניסות דיגיטליות וכניסה אנלוגית אחת.

שלבי העבודה:

1.     בנה את המעגל האלקטרוני הבא: הקובץ All_In_One.pdf

2.     הורד את הקובץ model_lpt.zip

3.     הפעל את הקובץ LPTIO.vbp.

4.     גש לחלון הטופס והוסף לו את הפקדים הבאים:

5.     גש לכתיבת הקוד של Form1 וכתוב בו את הקוד הבא:

Private Sub Command2_Click()

out_595 Val(Text2.Text), Val(Text3.Text)

End Sub

Private Sub Timer1_Timer()

Text1.Text = In_165

Text4.Text = Analog_In_165

End Sub

6.     גש לכתיבת הקוד של Modules וכתוב בו את הקוד הבא:

Const OutAddres = &H378

Const InAddres = &H379

Dim OutRegister As Byte

Declare Sub Outport Lib "vbio32.dll" (ByVal portID As Integer, ByVal nByte As Integer)

Declare Function Inport Lib "vbio32.dll" (ByVal portID As Integer) As Integer

Sub OutBit(number As Integer, state As Byte)

If state = 0 Then

Select Case number

Case 0

OutRegister = OutRegister Or 1

Case 1

OutRegister = OutRegister Or 2

Case 2

OutRegister = OutRegister Or 4

Case 3

OutRegister = OutRegister Or 8

Case 4

OutRegister = OutRegister Or 16

Case 5

OutRegister = OutRegister Or 32

Case 6

OutRegister = OutRegister Or 64

Case 7

OutRegister = OutRegister Or 128

End Select

End If

If state = 1 Then

Select Case number

Case 0

OutRegister = OutRegister And 254

Case 1

OutRegister = OutRegister And 253

Case 2

OutRegister = OutRegister And 251

Case 3

OutRegister = OutRegister And 247

Case 4

OutRegister = OutRegister And 239

Case 5

OutRegister = OutRegister And 223

Case 6

OutRegister = OutRegister And 191

Case 7

OutRegister = OutRegister And 127

End Select

End If

Outport OutAddres, OutRegister

End Sub

Function InBit(pin_number As Integer) As Byte

Dim In_Num As Integer

In_Num = Inport(InAddres)

If pin_number = 3 Then

If (In_Num And &H8) = &H8 Then

InBit = 0

Else

InBit = 1

End If

End If

If pin_number = 4 Then

If (In_Num And &H10) = &H10 Then

InBit = 0

Else

InBit = 1

End If

End If

If pin_number = 5 Then

If (In_Num And &H20) = &H20 Then

InBit = 0

Else

InBit = 1

End If

End If

If pin_number = 6 Then

If (In_Num And &H40) = &H40 Then

InBit = 0

Else

InBit = 1

End If

End If

If pin_number = 7 Then

If (In_Num And &H80) = &H80 Then

InBit = 1

Else

InBit = 0

End If

End If

End Function

Function In_165() As Byte

Dim a, c As Byte

c = 0

OutBit 4, 1 'shift/load down -convert

OutBit 4, 0 'shift/load up -stops conv

For a = 1 To 8

OutBit 3, 1 'clock down

If InBit(7) = 1 Then

c = c * 2

Else

c = (c * 2) + 1

End If

OutBit 3, 0 'clock up

Next a

In_165 = c

End Function

Sub out_595(byte_H As Byte, byte_L As Byte)

Dim aa As Byte

Dim bb As Byte

bb = 1

For aa = 1 To 8

If (byte_L And bb) = bb Then

OutBit 0, 1

OutBit 1, 1

OutBit 1, 0

OutBit 0, 0

Else

OutBit 0, 0

OutBit 1, 1

OutBit 1, 0

End If

bb = bb And &H7F

bb = bb * 2

Next aa

bb = 1

For aa = 1 To 8

If (byte_H And bb) = bb Then

OutBit 0, 1

OutBit 1, 1

OutBit 1, 0

OutBit 0, 0

Else

OutBit 0, 0

OutBit 1, 1

OutBit 1, 0

End If

bb = bb And &H7F

bb = bb * 2

Next aa

OutBit 2, 1

OutBit 2, 0

End Sub

Function Analog_In_165() As Byte

Dim a, c As Byte

c = 0

OutBit 5, 1 'shift/load down -convert

OutBit 5, 0 'shift/load up -stops conv

For a = 1 To 8

OutBit 6, 1 'clock down

If InBit(6) = 1 Then

c = c * 2

Else

c = (c * 2) + 1

End If

OutBit 6, 0 'clock up

Next a

Analog_In_165 = c

End Function

הסבר התוכנית:
אין הבדל משמעותי בין התוכנית הנ"ל לתוכנות בפרויקטים הקודמים פרט לשני דברים שונים שעשיתי כדי להדגים גישה של שילוב בין הגורמים:

1.     כל חלקי התוכנית הפכו לפונקציות בתוך ה- Module כך שניתן לקרא לפונקציות מכל מקום בתוכנית.
הפונקציה
Function In_165() As Byte : מטפלת בקליטה של 8 ביט דיגיטלי דרך הרכיב  U5.
השגרה
Sub out_595(byte_H As Byte, byte_L As Byte) :מטפלת בשליחה של 16 ביטים לשני אוגרי ההזזה U3 , U4.
הפונקציה
Function Analog_In_165() As Byte : מטפלת בקבלת אות אנלוגי דרך הרכיב  U6.

2.     הוספתי שתי פונקציות שמטפלות בכל ביט בנפרד ללא השפעה על שאר הביטים באוגר היציאה והכניסה.  כלומר בעזרת הפונקציה OutBit ניתן לשנות מצב של כל ביט ללא השפעה על שאר הביטים באוגר היציאה 378H.
הפונקציה מקבלת שני ערכים האחד מספר הביט בין 0 ל- 7 ואת המצב שיש לשנות אותו 0 או 1 .
לדוגמה
OutBit 6,1 משמע, שנה את הביט השביעי ל- 1 ללא שינוי שאר הביטים.
לדוגמה
OutBit 2,0 משמע, שנה את הביט השלישי ל- 0 ללא שינוי שאר הביטים.
כמו כן כתבתי פונקציה בשם
InBit מקבלת מספר ביט בין 3 ל- 7 ומחזירה את מצב ההדק 0 או 1.


הרמן גדי , מורה לאלקטרוניקה ומחשבים - אורט מגדל העמק Herman Gadi © 2003