الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحويل من تماثلى الى رقمىبواسطه منفذ الطابعه

رائج
بدأه ibramoh في 3 أغسطس 2004 · 24 رد · 26,053 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم

كنا قد ناقشنا تحويل الأرقام الثنائيه الى جهود(التحويل من رقمى الى تماثلى) فى الرابطه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

والأن نناقش العكس أى من جهود الى أرقام ثنائيه

هذه هى أحدى الطرق للتحويل من تماثلى الىرقمى, حيث الفكره تعتمد على توليد عداد يعد من 0000 الى 1111 ثم تحويل هذا العداد الى جهود مختلفه (كما عملنا فى الرابطه السابقه)

ثم أخذ كل جهد من هذه الجهود ومقارنته بالجهد المراد تحويله(بواسطه المقارن 339 )

فعندما يكون الجهد الخارج من العداد(الموصل بالطرف 6 للمقارن) اعلى من الجهد المراد تحويله(الموصل بالطرف 7 للمقارن) يتحول خرج المقارن من الواحد المنطقى الى صفر منطقى ويشعر

البرنامج بهذا التغير فيوقف العد ويخرج العدد الحالى فى العداد داخل صندوق رسائل(MSGBOX)

- وهذا هو البرنامج

Private Declare Sub out Lib "inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer
Private Sub Command1_Click()
For i = 0 To 15
out &H378, i
a = inp(&H379) And &H8
If a = 0 Then
Exit For
End If
dealy 1
Next i
MsgBox i
End Sub
Sub dealy(i As Long)
j = Timer + i
Do Until j <= Timer
Loop
End Sub

حيث وضعنا تأخير ثانيه واحده بين كل رقم والرقم التالى فى العداد حتى نلاحظ عمل البرنامج

على الثنائيات الضوئيه فى الدائره

-والدائره كالتالى

339_2820042145150.737591.gif

مع ملاحظه توصيل الأطراف 10,11,12,13 من منفذ الطابعه بالأرضى مع توصيل أى طرف من 18 الى 25 للمنفذ بالأرضى. ثم نوصل خرج المقارن(الطرف 1) بالطرف 15 للمنفذ.ثم توصيل QA,QB,QC,QD الى الأطراف 2,3,4,5 فى المنفذ على الترتيب

بعد ذلك نغير الجهد بواسطه المقاومه المتغيره R1 (وهو يمثل الجهد المراد تحويله) ونشغل البرنامج

- البرنامج التالى هو تطوير البرنامج السابق حيث سوف ياخذ عينه من الجهد كل خمسه ثوانى

ويحولها الى ارقام عشريه ثم يضع هذه الأرقام داخل list box لذلك يجب أضافه قائمه بأسم

(list1) بجوار زر الأمر ثم يمكن أجراء أى عمليات على هذه الأرقام المعبره عن الجهود

ولأنهاء البرنامج(أنظر الرابطه السابقه)

Private Declare Sub out Lib "inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer
Dim z As Boolean
Private Sub Command1_Click()
Do While z = True
Command1.SetFocus
For i = 0 To 15
out &H378, i
a = inp(&H379) And &H8
If a = 0 Then
Exit For
End If
dealy 1
Next i
List1.AddItem i
DoEvents
dealy 5
Loop
End Sub
Sub dealy(i As Long)
j = Timer + i
Do Until j <= Timer
Loop
End Sub
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
z = False
End Sub
Private Sub Form_Load()
z = True
End Sub

ملاحظه أخيره المقاومات فى الدائره السابقه تعطى اقصى جهد لها 2.5 فولت اى أقصى جهد للتحويل هو 2.5 فولت . ولرفع هذا الجهد الى 4 فولت يجب استخدام الدائره 741 التاليه(وتم

شرحها فى الرابطه السابقه)

ثم نوصل خرج 741 (الطرف 6) بالطرف 6 للمقارن 339

741(1).gif

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#2

جزاك الله خيرا..

ومن يتق الله يجعل له مخرجا

]

#3

شكرا على هذا الموضوع ولكن كيف أغلق دائرة بين سلكين موصلين بمنفذ الطابعة وكيف يمكن الكشف عن دائرة هل هي مغلقة أم مفتوحة(بين سلكين)

#4

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاتة

ناقشنا فى أعلى طريقة ادخال البيانات الى الحاسب بصوره تماثليه(جهود) ونناقش الأن طريقه ادخال البيانات الى الحاسب بصوره رقميه. هناك طرق عديده لعمل ذلك ومنها الطرق التاليه.

الطريقه الأولى

يوجد فى منفذ الطابعه خمسة اطراف للأدخال يمكن أدخال فى كل طرف bit واحده أى يمكن

أدخال 5 bit فى منفذ الطابعه . سوف نستغل هذا بتوصيل 4 مفاتيح لأربعه اطراف وسوف نسحب كل

طرف بواسطه مقاومه 10 ك الى الجهد الموجب . وعند ضغط اى مفتاح يتم وصل الطرف الى الأرضى

ثم يتم تشغيل البرنامج ( أ ثناء ضغط المفتاح) ليقرأ اى مفتاح تم ضغطه.

اطراف الأدخال port B (379

ويمكن قرأة الأطراف الأربعه لمعرفه أى مفتاح مضغوط حاليا وذلك بأى لغه وسوف نستخدم لغه الأسمبلى

ولغه الفيجوال بيسك.

حيث نضغط المفتاح أثناء تشغيل البرنامج

الدائره فى الملف in_bit

أولآ برنامج الأسمبلى

[CODE].model   small
.stack   64h
.code
   main    proc
      mov   dx,379h
      in    al,dx
     
      mov   dx,378h
      out   dx,al

      mov   ah,4ch
      int   21h

main    endp
  end

عند عدم ضغط اى مفتاح يخرج من منفذ الطابعه ( port a(378

الرقم الثنائى 01111111

وعند ضغط مفتاح 1 يخرج 01110111

ومفتاح 2 يخرج 01101111

و3 يخرج 01011111

و4 يخرج 00111111

ثانيا برنامج فيجوال بيسك

Private Declare Sub out Lib "inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer
Private Sub Command1_Click()
a = inp(&H379)
Print a
End Sub

عند عدم ضغط أى مفتاح يطبع على الفورم الرقم العشرى 127

وضغط مفتاح 1 يطبع 119

و2 يطبع 111

و3 يطبع 95

و4 يطبع 63

الملف المرفق

in_digital.zip

in_digital.zip

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#5

بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

الطريقه الثانيه

ادخال بايت -- حيث عند نا خمسه bit فقط كأدخال لذلك سوف نسخدم اربعه منها ونستخدم دائره

خارجيه مع طرف من ميناء الخرج © ورقمه 37A للتحكم فى هذه الدائره . بحيث ندخل البايت

على مرتين كل مره ندخل 4 bit .

وسوف نستخدم برنامج فيجوال بيسك لقرأه البايت بالكامل .حيث الدخل من الدائره سيكون بالسداسى

عشر والقرأه من البيسك بالعشرى

الدائره تتكون من الحاجز 74244 والعاكس 7404 وهى فى الملف in_byte

 Private Declare Sub out Lib "Inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "Inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer

Private Sub Command1_Click()
out &H37A, 1
isn = inp(&H379) And 240
isn = isn / 16
out &H37A, 0
msn = inp(&H379) And 240
no = msn + isn
Print no

End Sub

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#6

بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

الطريقه الثالثه

----------------

هى عباره عن مصفوفه مفاتيح2*2 . ويمكن بتعديل بسيط فى البرنامج مع زياده عدد

المفاتيح جعلها 5*5 بأعتبار ان اقصىعدد للمداخل هو خمسه مداخل فى منفذ الطابعه.

حيث x1,x2 هى الصفوف وتوصل الى اطراف الدخل فى المنفذ 15 ,13 in3,in4 فى portB -379

على الترتيب و y1,y2 هى العمدان وتوصل الى المخارج فى المنفذ 2,3 d0,d1 portA--378

نلاحظ بدل من استخدام جهد موجب خارجى لسحب المقاومات الى+5 فولت نستخدم طرف 6

d4 فى portA -- 378 فى منفذ الطابعه ويجب اخراج واحد عليه بأستمرار أثناء الأختبار وذلك بدل من استخدام مصدر قدره خارجى وبذلك توصل كل المقاومات الى طرف 6

الدائره بسيطه جدا فى ملف in_matrix

حيث برنامجنا اساسا بلغه الأسمبلى ولصعوبه طباعه النتائج بلغه الأسمبلى على الشاشه عملنا البرنامج

بالأسمبلى وأخراج النتائج بلغه دلفى لسهوله كتابه كود الأسمبلى داخل لغه دلفى وصعوبه ذلك فى الفيجوال

بيسك

كود الأسمبلى بسيط وهو عباره عن مسح للعمدان بجعل كل العمدان واحايد وعمود واحد فقط عليه صفر

منطقى وذلك بواسطه الأخراج من portA - 378 حيث يصبح عمود y1 عليه صفر فى البدايه

ثم قرأه الصفوف منportB-379 x1,x2 أذا ظهر الصفر فى القرأه فمعنى ذلك أن هناك مفتاح مضغوط

فى العمود الأول فيضع قيمه الصف التى تعبر عن x1,x2 فى السجل cl وقيمه العمود التى تعبر عن

y1,y2 فى السجل bl ويخرج من البرنامج

واذا لم يكن هناك مفتاح مضغوط يعمل ازاحه للصفر (اى للعمود التالى) ليفحص عمود جديد

ثم يعمل مقارنه اذا كان الرقم الجديد للعمود هو أخر عمود . يبدأ المسح من أول عمود من جديد

واذا لم يكن كذلك يفحصه بواسطه قرأه x1,x2 وهكذا حتى أخر عمود ثم يبدأمن جديد حتى نضغط مفتاح

ليخزن رقم الصف والعمود له ويخرج من البرنامج

حيث نضع زرين button1,button2 ومحررين edit1,edit2 على فورم الدلفى ونكتب الكود

var

   r1,r2:real;
  Form1: TForm1;


implementation

{$R *.dfm}

procedure  ali();
var
 x,y:byte;

begin
   asm
    @loop1:
      mov   bl,$0fe
    @loop2:
      mov   dx,$378
      mov   al,bl
      out   dx,al

      mov   dx,$379
      in    al,dx
      mov   cl,al
      and   al,$18
      cmp   al,$18
      jne   @loop3

      mov   al,bl
      not   al
      rcl   al,1
      not   al
      mov   bl,al
      cmp   al,11111011b
      jne   @loop2
      jmp   @loop1

    @loop3:

       mov   x,cl
       mov   y,bl
   end;
     r1:=x;
     r2:=y;
end;





procedure TForm1.Button1Click(Sender: TObject);

begin
     ali();

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.text:=floattostr(r1);
 edit2.text:=floattostr(r2);
end;

end.

نشغل البرنامج ثم نضغط زر 1 button1 فى الفورم ثم نضغط مفتاح وليكن s1 ثم نضغط زر 2

button2 فى الفورم فيطبع فى المحرر الآول edit1 رقم الصف 119 والثانى رقم العمود 254

ثم نضغط زر 1 من جديد ثم s2 ليطبع 111و254 و s3 يطبع 119و253 و s4 يطبع111

و253

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#7

بسم الله الرحمن الرحيم

دائره أدخال in_bit

22_09_05_10_59_13_1127455153in_bit.gif

دائره ادخال بايت in_byte

22_09_05_11_26_55_1127456815in_byte.gif

دائره أدخال مصفوفه in_matrix

22_09_05_11_22_23_1127456543in_matrix.gif

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#8

بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

الطريقه الرابعه

-------------------

هى طريقه المقاطعه. حيث فكره المقاطعه هى ان البرنامج يستطلع (polling) خط معين بأستمرار وعندما

تأتى عليه أشاره معينه(يتحول الخط من منخفض الى عالى او العكس مثلا) يذهب لينفذ أمر معين (كود معين) ثم يلغى الأشاره على هذا الخط ليتمكن الجهاز الخارجى من عمل مقاطعه مره ثانيه.

سوف نستخدم فى هذه الدائره قلاب من نوع (D)

D flip flop --7474 --ودائره نفى( و) NAND 7400

29_09_05_10_01_28_1128056488interrupt.gif

حيث نستخدم مفاتيح موصله الى مانع ارتداد (debounce) عباره عن أحادى الأستقرار (monstable) --(555) -- ثم نستغل دائره 7400 فى نفى خرج مانع ألأ رتداد وجعله نبضه سالبه بدل من نبضه موجبه ثم نستخدم هذه النبضه فى قدح القلاب 7474 كا دخل له على الطرف preset(s)

حيث CK,D غير مستخدمه فى القلاب أى نستخدمه هنا كا R-S FLIP FLOP

29_09_05_10_02_15_1128056535debounce.gif

سوف نستخدم دائرتان 555 ونوصل كل دائره بمفتاح خاص بها

حيث عند ضغط احد المفاتيح يصبح (Q) للقلاب عالى و (Q\) منخفض طرف 5و6 ويعطى اشاره عاليه على خط ال interrupt موصل للأطراف (Q\) دليل على ان احد المفاتيح قد ضغط وذلك ينبه البرنامج ان احد المفاتيح ضغط ويتعرف البرامج على هذه الأشاره ويذهب ليعمل مسح للمفاتيح(عن طريق مداخل المنفذ الموصله الى الأطراف (Q) ) ثم ينفذ الكود الخاص بهذا المفتاح وبعد ذلك يعطى أشاره منخفضه على خط CLR الموصل الى الأطراف 1و13 (حيث هى عاليه فى الحاله العاديه) ليتم تنظيف المخارج (Q,Q\) ليتم بذلك أرجاع خط المقاطعه منخفض أستعدادا لمقاطعه جديده

حيث ننفى خرج NAND الخاصه بخط المقاطعه لانها موصله بطرف in7 (طرف 11) فى المنفذ وهو

منفى داخل الحاسب حيث نريده فعال عالى لنستخدمه فى البرنامج

يجب توصيل جميع المداخل غير المستخدمه فى المنفذ الى الأرضى وهى هنا المداخل in5,in6

Private Declare Sub out Lib "Inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "Inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer
Dim z As Boolean
Private Sub Command1_Click()
Do Until z = False
dealy 1
a = inp(&H379)
If (a And &H80) = &H80 Then

If (a And &H88) = &H88 Then
Print "mohamed"
End If
If (a And &H90) = &H90 Then
Print "ibrahim"
End If

out &H37A, 1
out &H37A, 0
End If
DoEvents
Loop
End Sub
Sub dealy(i As Long)
j = Timer + i
Do Until j <= Timer
Loop
End Sub
Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
z = False
End Sub

Private Sub Form_Load()
z = True
End Sub

نشغل برنامج الفيجوال بيسك السابق ثم نضغط زر command1 ثم نضغط على المفتاح الأول

(debounce1) فيطبع كلمه mohamed على الفورم ثم نضغط المفتاح الثلنى (debounce2)

فيطبع كلمه (ibrahim) ونلاحظ وجود تأخير بسيط بين الضغط والطباعه بسبب أمر(dealy) فى الكود

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#9

بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

الطريقه الخامسه

--أستخدام الأشعه تحت الحمراء---

الفكره هى توليد أربعه ترددات بواسطه أربعه مفاتيح موصله الى عديم الأستقرار( 555 ) ثم نرسل هذه الترددات بواسطه ثنائى ضوئى تحت أحمر ويستقبله ترانزستور ضوئى ثم بواسطه احادى الأستقرار

(74123) نحول كل تردد الى جهد ثم بواسطه ثنائى زينر والمقارن (339) نقارن كل جهد وجهود ثابته

فينتج تسلسل معين من الواحايد والأصفار على مخارج الدائره ( 339) ثم نحول هذا التسلسل بواسطه

دائره استبعاد(أو) --(7486) exclusive--or-- ألى كود ثنائى يقدح مدخل واحد فقط من مداخل منفذ الطابعه لكل تردد مرسل--- PORT B ---379---

---ثم اخيرا بواسطه برنامج فيجوال بيسك نفحص المداخل ثم ينفذ الكود الخاص بكل مفتاح مضغوط

جربت الدائره وكانت المسافه بين المرسل والمستقبل حوالى 20سم ولزياده المسافه نستخدم عدسه بالأضافه الى عمل تعديل بموجه حامله للترددات------

--دائره--555--

وهى تعمل كا مولد ترددات غير مستقر

عند ضغط المفتاح الأول يظهر التردد 1.5 ك هرتز على رجل 3

والثانى 2.5 ك والثالث 4 ك والرابع 6 ك

24_11_05_08_49_43_1132894183555.gif

--دائره--7406--

يغذى خرج ال 555 دائره الحاجز 7406--BUFFER-- لزياده قيمه التيار للترددات وتغذيه

الثنائيات الضوئيه IR LED

24_11_05_08_52_17_113289433774_5.gif

--- دانره ---741---

يستقبل الترانزستور الضوئى ترددات الأشعه تحت الحمراء ثم تكبر بواسطه 741 ثم تغذى مدخل 74123

24_11_05_08_55_13_1132894513741.gif

--دائره---74123 --

يستخدم أحادى الأستقرار كا محول من تردد الى جهد

حيث يحول التردد الأول الى 0.5 فولت والثانى الى 0.8 والثالث الى 1 فولت والرابع الى 2 فولت

ويتم تغذيه هذه الجهود ا لى دائره المقارن 339

24_11_05_08_56_36_1132894596741_3.gif

--دائره --339 ---

يتم بواسطه ثنائى الزينر والمقاومات فى مدخل 339 أنتاج جهود ثابته ليتم المقارنه بها مع الجهد

الواصل الى مدخل المقارن 339 لنحصل فى مخرج المقارن على هذا التسلسل

الجهد الأول يخرج الرقم الثنائى 0001 والثانى 0011 والثالث 0111 والرابع 1111

نلاحظ أنه يمكن تغير المقاومات فى مدخل 555 وأيضا المقاومات فى مدخل 339 بشكل مناسب حتى تتم المقارنه بشكل صحيح و نحصل على هذا التسلسل

24_11_05_08_57_45_1132894665339.gif

---دائره --7486 --

اخيرا نستخدم دائره 7486 لتحويل التسلسل السابق الى الكود الثنائى

0001 و 0010 و 0100 و 1000

24_11_05_08_58_46_11328947267486.gif

---ثم نوصل مخارج 7486 -- 11 و 8 و6 و3 بأطراف منفذ الطابعه 10و12و13و15

مع توصيل أرضى المنفذ بأرضى الدائره-- الدوائر فى الملفwireless

نشغل البرنامج والدائره---عند ضغط المفتاح الأول يطبع على الفورم كلمه mohamed والثانى

ahamed واثالث ali والرابع يشغل برنامج الحاسبه

Private Declare Sub out Lib "inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer
Dim z As Boolean
Private Sub Command1_Click()
Do Until z = False
dealy 1
ali
DoEvents
Loop
End Sub
Sub dealy(i As Long)
j = Timer + 1
Do Until j <= Timer
Loop
End Sub

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
z = False
End Sub

Private Sub Form_Load()
z = True
End Sub
Sub ali()
a = inp(&H379) And &H8
If a = &H8 Then
Print "mohamed"
End If
b = inp(&H379) And &H10
If b = &H10 Then
Print "ahamed"
End If
c = inp(&H379) And &H20
If c = &H20 Then
Print "ali"
End If
d = inp(&H379) And &H40
If d = &H40 Then
x = Shell("c:\windows\calc.exe", 1)
End If

End Sub

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#10

بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

----الطريقه السادسه---

أستخدام المتحكم microcontroller 16F84

قبل أن نربط الحاسب بالمتحكم توازيا---- نبدأ بمقدمه صغيره عن المتحكم -----

حيث هذا برنامج بسيط يخرج العدد 77 الى منفذ B فى المتحكم

        processor 16f84
	include   <p16f84.inc>
	__config  _RC_OSC & _WDT_OFF & _PWRTE_ON


       org      0
       movlw    H'00'
       tris     PORTB
loop:
       movlw    H'77'
       movwf    PORTB
       goto     loop
       end

ولأختبار البرنامج نستخدم برنامج MBLAB كالأتى

نعمل الأعدادات التاليه فى برنامج ال mblab

debugger=>select tool=>mblab sim

configure=>select device=>pic16f84

debugger=>settings=>4Mhz

project=>new

ونكتب أسم للمشروع ونختار مسار التخزين

file=>new

نكتب الكود السابق ثم

file=>save

نكتب أسم للملف

project=> add file to project

نضيف الملف السابق الى المشروع

project=>build all

بعد بناء الملف بنجاح سوف يتم عمل نسخه سداسيه عشر تلقائيا--ويمكن بذلك تحميلها--حرقها--داخل

المتحكم بواسطه أى مبرمجه

ولعمل محاكاه للبرنامج بواسطه mblab نعمل الأتى

view=>special function registers

windows=>tile horizontally

لتصبح شاشه ال mblab كالأتى

01_12_05_10_15_42_1133504142Mplab1.gif

ثم

debugger=>run

debugger=>halt

or

debugger=>step into

---بعد تحميل البرنامج داخل المتحكم يمكن اختباره بواسطه الدائره التاليه

01_12_05_10_17_17_113350423716f84(_).gif

وهذا برنامج اخر يعمل على الدائره السابقه وهو لعداد ازاحه

; File DEMOF84.ASM
; Assembly code for PIC16F84 microcontroller

; Blinks LEDs on outputs in a rotating pattern.
; With 75-kHz osc, each LED stays on 1/2 second.

; CPU configuration
;  (It's a 16F84, RC oscillator,
;  watchdog timer off, power-up timer on)

	processor 16f84
	include   <p16f84.inc>
	__config  _RC_OSC & _WDT_OFF & _PWRTE_ON

; Declare variables at 2 memory locations

J	equ	H'1F'  ; J = address hex 1F
K	equ	H'1E'  ; K = address hex 1E

; Program

	org	0  ; start at address 0

; Set port B as output and initialize it

	movlw	B'00000000'; w := 00000000 binary
	tris	PORTB	; port B ctrl register := w
	movlw	B'00000001'; w := 00000001 binary
	movwf	PORTB	; port B itself := w

       ; Clear the carry bit

        bcf     STATUS,C

; Rotate the bits of port B leftward through the carry bit

mloop:	rlf	PORTB,f	

; Waste some time by executing nested loops

	movlw	D'50'; w := 50 decimal
	movwf	J; J := w
jloop:	movwf	K; K := w
kloop:	decfsz	K,f; K = K-1, skip next if zero
	goto  kloop
	decfsz	J,f; J = J-1, skip next if zero
	goto	jloop

; Do it all again

	goto  mloop

	end

وهذا موقع لشرح ال mblab وتحميله وشرح المتحكم 1684 بالعربى

My Webpage

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#11

بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

--- نتابع المتحكم وربطه بالحاسب تفرعيا----

سوف نعمل المتحكم مرسل والحاسب مستقبل ويمكن بسهوله عمل العكس

الفكره هى ان المتحكم يخرج اشاره على ان هناك بيانات جاهزه على المنفذ ثم يخرج البيانات فيتم قرآتها

بواسطه برنامج فيجوال بيسك --- كود البيسك والدائره الخاصه به سبق شرحها فى الطريقه الثانيه

in_byte --- حيث فى هذه الدائره نلغى المفاتيح والمقاومات فى مدخل الحاجز 74244 ونوصلها مباشره الى منفذ B فى 1684

ويمكن وضع الثنائيات الضوئيه كما فى الدائره فى البند السابق الموصله الى منفذ B فى المتحكم ويمكن ايضا توصيل لد الى طرف -- 1 -- فى 1684

وسوف نستخدم ال debounce -- مانع الأرتداد-- 555--- المذكور فى دائره المقاطعه السابقه ليخرج

نبضه موجبه وننفيها ب -- 7404-- ونوصلها الى ---reset --clr-- طرف--4--فى 1684

09_12_05_01_13_06_113416278616f84_para.gif

--- حيث برنامج الأسمبلى الخاص بالمتحكم يخرج--- 1---على --pin--1-- RA2 -- ثم يدخل فى حلقه لانهائيه --switch-- الى أن نشغل برنامج الفيجوال بيسك فيكتشف ال --1-- على --RA2 -- الموصله الى -- IN3 -- فى منفذ الطابعه فيرد برنامج الفيجوال بيسك على ذلك بأن يرسل -- 1 -- الى --OUT2 --

الموصله الى --RA0-- pin -- 17 -- فيتعرف برنامج 1684 على ذلك ويخرج من الحلقه الأ نهائيه

ويستكمل برنامجه الذى به أخراج عدد 22 بالسداسى عشر الى منفذ --B-- فى المتحكم

--- يستكمل برنامج فيجوال بيسك اوامره بأن يدخل فى كود قرآ ه البايت الذى أرسله 1684 فى الخطوه السابقه ويطبعه على الفورم

---- اخيرا يلغى برنامج المتحكم ال-- 1 -- الموجود على رجل --1 -- RA2-- وذلك بأخراج -- 0 --

الى -- pin--1 --- أى فى البدايه يخرج آشاره على طرف -- 1 -- ثم يقوم بألغائها بعد اخراج البيانات

-- الموضوع بسيط هو أن تعمل حوار بين الحاسب والمتحكم أو مايعرف بالتصافح--handshaking --

-- وهذا برنامج الأسمبلى الخاص بالمتحكم 1684

processor    16f84
#include<p16f84.inc>
__config     _RC_OSC  &  _WDT_OFF  &  _PWRTE_ON
      temp       equ     0x0d
      org        00
init
      movlw      01
      tris       PORTA
      movlw      00
      tris       PORTB
      clrf       PORTA
      clrf       PORTB
      bsf        PORTA,2
      
switch  
      btfss      PORTA,0
      goto       switch
start
      
      movlw      0x22
      movwf      PORTB
      call       delay
      call       delay
      bcf        PORTA,2
 loop
      goto       loop
delay
      movlw      0xff
      movwf      temp
      goto       wait
wait
      decfsz      temp,1
      goto        wait
      return
      end

وهذا برنامج الفيجوال بيسك

Private Declare Sub out Lib "inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer
Dim z As Boolean
Private Sub Command1_Click()
Do Until z = False
ali
DoEvents
Loop
End Sub
Sub delay(i As Long)
j = Timer + 1
Do Until j <= Timer
Loop
End Sub

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
z = False
End Sub

Private Sub Form_Load()
z = True
End Sub
Sub ali()
a = inp(&H379) And &H8
If a = 8 Then
out &H37A, 5
delay 1
isn = inp(&H379) And 240
isn = isn / 16
out &H37A, 0
msn = inp(&H379) And 240
no = msn + isn
Print no
End If
End Sub

---نشغل دائره المتحكم ثم نضغط على --reset--clr-- بواسطه ال --debounce-- نبضه سالبه --

على رجل -- 4 -- فى المتحكم فيتم أضاءه لد على رجل --1 -- ثم يتوقف البرنامج عند ال switch

--نشغل برنامج فيجوال بيسك فيخرج 1684 من الحلقه ويخرج 22 الى منفذ --B--يمكن مشاهدتها

بواسطه 8 لدات --ويطبع على الفورم رقم 34 العشرى

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#12

بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

----الطريقه السابعه----

ربط المتحكم بالحاسب تسلسليا

تكلمنا فى الطريقه السابقه عن ربط المتحكم بالحاسب بواسطه منفذ التوازى--منفذ الطابعه--- والأن نتحدث عن ربط الحاسب بالمتحكم عن طريق منفذ التوالى-- منفذ الموديوم---

هناك عده نقاط هامه فى هذه الحاله

-- سوف نستبدل هنا مذبذب المتحكم RC ببلوره XT --4MHZ-- وذلك حتى نعمل تزامن بين المتحكم والحاسب بصوره صحيحه وذلك بعمل معدل بود برمجيا فى الحاسب والمتحكم --boad rate 9600--

--- سنستخدم دائره ربط بين منفذ الأتصال المتوالى RS 232 وبين المتحكم TTL وهى MAX 232

لتحويل الجهد من +12 , -12 فولت الى +5 , و صفر فولت والعكس -- وميزه MAX 232 عن الدوائر الأخرى المشابه هى أنها تغذى بصفر و+5 فولت فقط

--- سوف نستخدم COM2 مع توصيل ارضى RS232 طرف 5 --pin5 الى ارضى الدائره

---هنا الحسب مرسل والمتحكم مستقبل العكس كان فى التوازى

وهذه الدائره بالكامل

15_12_05_03_12_48_1134688368max_3_.gif

15_12_05_03_14_24_113468846416f84_serial.gif

نشغل اولا دائره المتحكم وعند ضغط reset ينفذ البرنامج ويقف تنفيذ البرنامج عند الswitch loop

وينتظر وصول نبضه على خط RTS ليتابع تنفيذ البرنامج ويستقبل البايت من الحاسب

ثم ننفذ البرنامج الموجود فى الحاسب-- بلغه الفيجوال بيسك -- حيث فى البدايه يؤهل الأرسال بمعدل

بود 9600 bit فى الثانيه ثم يرسل نبضه عاليه على RTS pin فى منفذ التوالى RS 232

ثم يرسل --البايت --البيانات العدد data &H77 من خلال الخط RXD pin فى المنفذ ثم أخيرا يلغى الأشاره السابق ارسالها على خط RTS pin

بعد خروج المتحكم من الحلقه يتابع تنفيذ برنامجه وذلك بتنفيذ كود استقبال البايت الذى أرسله برنامج الفيجوال بيسك فى الخطوه السابقه --رقم 77 بالسداسى عشر-- ثم يخرجه من منفذ B فى المتحكم

مع ملاحظه انه معكوس --الصفر واحد والواحد صفر--لنشاهده على الثنائيات الضوئيه الثمانيه

وهذا كود الأسمبلى للمتحكم

    processor        16f84
   #include<p16f84.inc>
__config     _XT_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF

    count    equ    0x0c
    temp     equ    0x0d
    reciv    equ    0x0e  
   
     org      00
     movlw    0x05
     tris     PORTA
     movlw    00
     tris     PORTB 
sw
     btfss    PORTA,2
     goto     sw
     call     recv
     movf     reciv,0
     movwf    PORTB
loop
     goto     loop

delay
     movlw    0x0c
     movwf    temp
     goto     wait
delay1
     movlw    0x1d
     movwf    temp
     goto     wait 
wait
     decfsz   temp,1
     goto     wait
     return
     
recv
     call     delay
     btfss    PORTA,0
     goto     recv
     movlw    0x08
     movwf    count
     goto     loop1
loop1
     call     delay1
     btfss    PORTA,0
     goto     loop2
     bsf      reciv,7
     goto     loop3
loop2
     bcf      reciv,7
loop3
     decfsz   count,0
     rrf      reciv,1
     decfsz   count,1
     goto     loop1
     call     delay1
     btfsc    PORTA,0
     clrf     reciv
     return
     end

وهذا كود الفيجوال بيسك

Private Declare Sub out Lib "Inpout32.dll" Alias "Out32" (ByVal portaddress As Integer, ByVal value As Integer)
Private Declare Function inp Lib "Inpout32.dll" Alias "Inp32" (ByVal portaddress As Integer) As Integer

Private Sub Command1_Click()
out &H2FB, &H80
out &H2F8, &HC
out &H2F9, 0
out &H2FB, 3

a = inp(&H2FC) Or 2
out &H2FC, a

out &H2F8, &H77

a = a And &HFD
out &H2FC, a
End Sub

شكرا على حسن المتابعه

بسم الله الرحمن الرحيم

موضوعاتى

-----------

1--التحكم فى مذبذب ومكبر عن طريق منفذ الطابعه

http://www.nowah.net/bb/viewtopic.php?t=18...e15c3ed52c9437e

/index.ph...111&t=43901

2--ادخال البيانات عن طريق منفذ الطابعه

/index.php?showtopic=44710

3--موضوعات متفرقه فى العدادات ومنفذ الطابعه

/index.php?showtopic=84127

4- مختبر ميكروكنترولر من خلال الدوس

http://www.4electron.com/phpbb/viewtopic.p...6768c69292d168c

#13

السلام عليكم

موضوع جميل بالفعل

بارك الله فيك,,,

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#14

اريد اعرف شغلة وحدة ماذا نستفيد من هل العملية (التحويل)

#15
ab12oode كتب:
اريد اعرف شغلة وحدة ماذا نستفيد من هل العملية (التحويل)

بإمكاننا مثلا قياس الجهد من خليه شمسيه لمعرفة شدة الاضائة ولمعالجة البيانات بالحاسوب لابد ان تكون رقميه لذلك يتم تحويلها.

عمليات اخرى تعتمد على الجهد المتغير لابد من تحويلها الى بيانات رقمية لمعالجتها بالحاسوب.

مثلا اجهزة قياس العجلة.

الخيل والليل والبيداء تعرفني ::: والثور والبغل والاغنام والبقرُ

#16

مجهود تشكر عليه

#17

السلام عليكم ....

جزاك الله خيرا..

#18

والله انني اقرأ الموضوع وادعي لك بالنوفيق والنجاح ----- نريد المزيد ------

#19
ibramoh كتب:
بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله وبركاته

----الطريقه السادسه---

أستخدام المتحكم microcontroller 16F84

قبل أن نربط الحاسب بالمتحكم توازيا---- نبدأ بمقدمه صغيره عن المتحكم -----

حيث هذا برنامج بسيط يخرج العدد 77 الى منفذ B فى المتحكم

		processor 16f84
	include   <p16f84.inc>
	__config  _RC_OSC & _WDT_OFF & _PWRTE_ON


	  org	  0
	  movlw	H'00'
	  tris	 PORTB
loop:
	  movlw	H'77'
	  movwf	PORTB
	  goto	 loop
	  end

ولأختبار البرنامج نستخدم برنامج MBLAB كالأتى

نعمل الأعدادات التاليه فى برنامج ال mblab

debugger=>select tool=>mblab sim

configure=>select device=>pic16f84

debugger=>settings=>4Mhz

project=>new

ونكتب أسم للمشروع ونختار مسار التخزين

file=>new

نكتب الكود السابق ثم

file=>save

نكتب أسم للملف

project=> add file to project

نضيف الملف السابق الى المشروع

project=>build all

بعد بناء الملف بنجاح سوف يتم عمل نسخه سداسيه عشر تلقائيا--ويمكن بذلك تحميلها--حرقها--داخل

المتحكم بواسطه أى مبرمجه

ولعمل محاكاه للبرنامج بواسطه mblab نعمل الأتى

view=>special function registers

windows=>tile horizontally

لتصبح شاشه ال mblab كالأتى

01_12_05_10_15_42_1133504142Mplab1.gif

ثم

debugger=>run

debugger=>halt

or

debugger=>step into

---بعد تحميل البرنامج داخل المتحكم يمكن اختباره بواسطه الدائره التاليه

01_12_05_10_17_17_113350423716f84(_).gif

وهذا برنامج اخر يعمل على الدائره السابقه وهو لعداد ازاحه

; File DEMOF84.ASM
; Assembly code for PIC16F84 microcontroller

; Blinks LEDs on outputs in a rotating pattern.
; With 75-kHz osc, each LED stays on 1/2 second.

; CPU configuration
;  (It's a 16F84, RC oscillator,
;  watchdog timer off, power-up timer on)

	processor 16f84
	include   <p16f84.inc>
	__config  _RC_OSC & _WDT_OFF & _PWRTE_ON

; Declare variables at 2 memory locations

J	equ	H'1F' ; J = address hex 1F
K	equ	H'1E' ; K = address hex 1E

; Program

	org	0 ; start at address 0

; Set port B as output and initialize it

	movlw	B'00000000'; w := 00000000 binary
	tris	PORTB   ; port B ctrl register := w
	movlw	B'00000001'; w := 00000001 binary
	movwf	PORTB   ; port B itself := w

	 ; Clear the carry bit

	   bcf	 STATUS,C

; Rotate the bits of port B leftward through the carry bit

mloop:	rlf	PORTB,f	

; Waste some time by executing nested loops

	movlw	D'50'; w := 50 decimal
	movwf	J; J := w
jloop:	movwf	K; K := w
kloop:	decfsz	K,f; K = K-1, skip next if zero
	goto  kloop
	decfsz	J,f; J = J-1, skip next if zero
	goto	jloop

; Do it all again

	goto  mloop

	end

وهذا موقع لشرح ال mblab وتحميله وشرح المتحكم 1684 بالعربى

My Webpage

السلام عليكم

اشكركم على هذه الدروس الجميلة

ولي سؤال اذا سمحتم انا اريد نفس البرنامج ولكن اريده فقط ان يعطيني مسج بكس اذا ادخلت جهد معين على احد المنافذ ولكن لا اعرف كيفية التوصيل وشكرا

post-143038-1198965749_thumb.jpg

#20

مشكوررررررررررررررررر كتير علي هذا

لكم كل التقدم

#21

اشكركم على هذا الموضوع الشيق وشرح متميز اخي لقد ادرج الاخ الكريم 66azzam66

post-143038-1198965749.jpg

يوجد كتابة تحت عنصر المقارن LM339 لم افهمه؟

هل D1 to D5 ثنائيات ضوئية تقصد LED

عندي اسئلة كثيره ارجوا ان يتسع صدركم لنا ولاسئلتنا

تحياتي

#22

وينكم ياشباب

#23

بارك الله فيك

#24

جزاكم الله خيرا وبارك الله فيكم

#25

بارك الله فيك اخي ومشكور على المجهود الرائع

بس هل يمكن ان اكتب الكود بلغة ++C ومشكور مرة اخرى

مواضيع مشابهة