دورة بيك بيسيك عمليه

بارك الله فيك
ولكن يبدو ان حدث خلل في تحميل المرفقات
هل يمكنك رفعها مرة اخري

مثال على ال LCD

define LCD_DREG PORTB
define LCD_DBIT 4
define LCD_RSREG PORTB
define LCD_RSBIT 2
define LCD_EREG PORTB
define LCD_EBIT 3
define LCD_BITS 4
define LCD_LINES 2

LCDOUT $fe,1,"Obada"
هذا الكود لمسح الشاشة وكتابة عبادة عليها

LCDOUT $fe,$0c,"smsm"
هذا الكود لكتابة سمسم في السطر الثاني

اعادة تحميل الملف

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

بارك الله فيك اخي الحبيب
لو كان لدي قيمه في متغير واريد ان اظهرها علي الشاشه كمثال مقياس الجهد
فكيف انفذ مثل هذا المشروغ بفهم جيد
وارجو من الله ان يجعل كل هذا في سجل حسناتك

بالنسبة لماهية البرنامج هو فقط لإظهار نص على شاشة الLCD


بالنسبة لإظهار رقم على ال LCD نكتب التالي

result var byte
result=10

LCDOUT $fe,1,#result
ولا ننسى وضع التعريفات بالبداية

بسم الله ماشاء الله لاقوة الا بالله ربنا يزيدك من فضله نريد ان نتعامل مع Adc فنعطيه فولت وهو قيمه Analog ونريده ان يحولها الي Digital ثم نضع هذه القيمة في المتغير ونظهرها علي الشاشة وجزاكم الله بكل خير

اخي الحبيب /eabueida
السلام عليكم ورحمة الله وبركاته
هذه دائرة فولتميتر وهي تأخذ الفولت من تغير مجزء الفولت POT وبقيم analog ويقوم ADC بتحويل هذه القيم ال قيم رقميه ثم تعرض علي الشاشة
لن ادعي اني صممته بل جمعته من اكثر من 5 مصادر الي ان عمل بهذه الطريقه ولكني لم افهم بصورة جيده كل مراحل البرنامج

صورة المشروع

والمشروع بالكامل في المرفقات

السلام عليكم ورحمة الله وبركاته.
موضوع ممتاز وجيد …
بارك الله فيكم جميعا وجعله في ميزان حسناتكم.

اخي ممكن توضح الجزء الذي لم تفهمة
للعلم هذا البرنامج كتب ب بروتون كمبايلر على ما اظن

الفكرة العامة للمشروع التالي
وهي ان ADC يتكون من 10 بت اي ان الدقة ستكون Vmax/2^10 و Vmax هي 5 فولت لذلك
في البرنامج تم وضع المعادلة التالية
volt=adval*500/1024
حيث ان 10^2 = 1024
مثلا كانت قيمة الجهد حوالي 5 فولت ستكون قيمة ال adval = 1023
سيكون الناتج حوالي 5 فولت
والعلة في ان اكبر قيمة هي 1023 ان البداية تكون من الصفر وليس من الواحد

بارك الله فيك اخي الحبيب
هذه الجزئية ارجو من الله ان يمن علي بفهمها فهم جيد
[LEFT]Define ADCIN parameters
DEFINE ADC_BITS
10 ’ Set number of bits in result
DEFINE ADC_CLOCK
3 ’ Set clock source (3=rc)
DEFINE ADC_SAMPLEUS
50[SIZE=2] ’ Set sampling time in uS

Adval VAR WORD ’ Create adval to store result

[/size]TRISA = %11111111 ’ Set PORTA to all input
ADCON1 = %10000010 ’ Set PORTA analog and right justify result
[/left]

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

DEFINE ADC_BITS
في هذا الأمر تم تعريف عدد البت الذي يوجد بالمايكروكونترولر
DEFINE ADC_CLOCK 3 ’ Set clock source (3=rc)


في هذا السطر تم تعريف الclock بحيث انه مذبذب داخلي RC


DEFINE ADC_SAMPLEUS 50

في هذا الأمر تم تحديد زمن اخد العينات (قيم الفولت ) مرة كل 50 مايكروثانية

[SIZE=2]TRISA = %11111111 ’ Set PORTA to all input
ADCON1 = %10000010 ’ Set PORTA analog and right justify result

[/size]
في السطران السابقان الأول تم تعربف المنفذ ا على انه مداخل
وفي السطر التاني تم وضع المنفذ ا على وضعية المدخل التناظري (ADC)
هذا و الله اعلم

بارك الله فيك اخي الحبيب وجزاكم الله عني بكل خير
هل يمكن تعريف بن واحده فقط كمدخل ADC لأستخدام باقي البورت في أغراض أخري؟ وكيف؟
ان شاء الله نفكر بوضع key bad ليتم ادخال بينات من المستخدم الي الدائرة وهذه بداية التعديلات الحقيقية وارجو من الله التوفيق

بسم الله الرحمن الرحيم
فقط قم بتعدييل السطر التالي
ADCON1 = %10000010
الى
ADCON1 = %10001110
فيكون المدخل RA0 هو المدخل التناظري , أما البقية فهم دجيتال

السلام عليكم
أخي عبادة
هذه الداتا شيت قد تفيدك جدا في التعديلات على هذا النوع من المايكروكونترولر
http://www.4shared.com/file/14635199/66e4a6dd/pic16f877.html

بارك الله فيك اخي الحبيب eabueida وجعل سعيك هذا في سجل حسناتك

بارك الله فيك اخي الحبيب eabueida
ها قد عاد المنتدي من جديد ارجو من الله ان يديمة علينا ولا يحرمنا من لقاء احباب رسول الله صلي الله عليه وسلم
اخي الحبيب عند استعمال امر button نجد ه يكرر الأمر فكيف يمكننا ان ناخذ منه امر واحد فقط مهما طالت مدة ضغظ الزر
وجزاكم الله بكل خير

السلام عليكم ورحمة الله وبركاته
أخي الحبيب /eabueida
فكرت في بناء دائرة للتحكم في سرعة موتر تثقيب الكارتات (البورد) ولكن قابلني بعض الصعاب فيها هذا رسم الدائرة …

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

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

[LEFT]DECLARE XTAL = 4
Digit var Byte
mask var Byte
wa var byte
b0 var byte
stor var
porta.2
up var
porta.3
down var
porta.4
dig1 var byte
dig2 var byte
leddis1 var
PORTA.0
leddis2 var
PORTA.1
TRISA = %11111100
TRISB = %00000000
leddis2 =
1
leddis1 =
0
dig1 =
0
dig2 =
0
clear
wa = EREAD
1[SIZE=2]
Main:
gosub display
gosub scan_swich
gosub dimm
GoTo Main

scan_swich:

button up,[/size]0,40,5,b0,1,sw_up
button down,
0,40,5,b0,1,sw_down
button stor,
0,40,5,b0,1,sw_stor
return
sw_up:
wa = wa +
1[SIZE=2]
return

sw_down:
wa = wa - [/size]1
return
sw_stor:
ewrite
1[SIZE=2],[wa]
return

display:
digit = wa dig [/size]1
gosub bin2seg
portb = mask
leddis1 =
1
pause
75
leddis1 =
0[SIZE=2]

digit = wa dig [/size]0
gosub bin2seg
portb = mask
leddis2 =
1
pause
75
leddis2 =
0
return
dimm:
’ Start the loop at 0
’ Beginning of the loop
PWM
PortB.7,wa,20 ’ Output the value in loop for 20ms
return ’ Do it forever
bin2seg:
LookUp digit,[
$00,$01,$02,$03,$04,$05,$06,$07,$08,$09],mask
return
End

---------------------------------------[/left]

اما الصعاب منها عند ضغط زر العد التصاعدي او التنازلي يبدء العد سريع
واريد ان اجعل الزر حين الضغط عليه يعد رقم واحد مهما طال زمن الضغط علي الزر
وارجو من الله لنا ولكم التوفيق

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

loop :
if up = 1 then sw_up
if down = 1 then sw_down
if stor = 1 then sw_stor
goto loop

sw_up:
pause 300
if up = 1 then sw_up

wa = wa + 1
[SIZE=2]goto loop

sw_down:
pause 300
if down = 1 then sw_down
[/size]wa = wa - 1
goto loop
[SIZE=2]
sw_stor:
pause 300
if stor = 1 then sw_stor
ewrite 1,[wa]

goto loop

[/size]