مساعدة في مشروع باستخدام pic

السلام عليكم
انا طالبة وعندي مشروع تخرج عن
fingerprint based door lock
وبدنا نستخدم sm630 for fingerprint scanner
بس المشكله انو القطعه مش متوافرة لحد الان وما بنعرف متى ممكن توصل
لهيك قررنا نعمل simulator
للقطعة بحيث تقدر تتواصل مع PIC وتستجيب متل القطعة الاصلية ولان الها 2 output (Rx,Tx)
فقررنا نستخدم كمان pic لتتواصل مع البيك الاصلية من خلال Rx , TX
فسؤالي اذا بقدر حدا يساعدني هل ممكن اربط two PIC
من خلال Rx,TX pins
وكيف ممكن يتم التوصيل لانو بدنا مجرد ما وصلة القطعة الاصلية بس نركبها مكان البيك وتشتغل عادي .

وشكرا .

ممكن تعمل هيك بس لما تنقل بيانات بينهم بكون على اساس serial وكأنه كل pic موصوله مع الكومبيوتر
يعني بتستخدم USART
RX1 with RT2
RT1 with RX2
و 2 PIC لازم يكون الهم نفس Frequency
بالتوفيق

السلام عليكم

نعم ممكن مثل ما قال الأخ جواد
بس TX1 -->RX2 ,
TX2–>RX1

وبالنسبة الى القطعة الي بتنتظريها
تأكدي من voltage level انه من نوع TTL أو ضمن الخمسة فولت

حتى تقدري توصلية مباشرة وإلا بتستخدمي MAX232 للتوصيل بينهم

والسلام عليكم

فعلا النقطه الي اشار الها الاخ eabueida بخصوصا الفولت الي على RX1 , RT2
RT1, RX2 اذا كان اكبر من 5 فولت او اقل من صفر لازم تستخدمي MAX232
بس على الاغلب انه من 0-5 لانه
picxxxxx’s are sink and source to 0-5v

وهاي صورة التوصيل بالمرفقات انا جربتها واشتغلت واذا بدكم السيركت والبرامج تاعت الاختبار انا جاهز

وعلى فكره اخت wishes22 انا اسف لاني حكيت معك بصيغة المذكر بس انا ما كنت منتبه

السلام عليكم اخ جواد بالنسبة للفولت ما قصدت البيك انما sm630 for fingerprint scanner

[SIZE=4]شكرا كتتتير للجميع
انا الحمدلله زبطت معي التوصيله بس المشكله الجديدة اني كتبت الكود على الميكروبيسك على اساس ابعت اكتر من بايت بس ما كان يبعت الا اول 2 byte
ما بعرف ليش يعني لما بعتت كلمة hello من البيك الاولى ووصلت التانية على

[/size] lcd ما وصل الا 2 بايت وهي الكود لكل وحدة منهم اذا بقدر حدا يساعدني [LEFT][SIZE=4]received PIC (1)

program test[/size] [SIZE=4]

dim s2 , i as byte[/size] [SIZE=4]
dim received_byte as byte
dim ss1 as char[20]

main:[/size] [SIZE=4]
Usart_Init(2400)
Lcd_Init(PORTB)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF)

 for i = 0 to 4[/size] [SIZE=4]

  if Usart_Data_Ready = 1 then   ' If data is received[/size] [SIZE=4]
  ss1[i] = Usart_Read   ' Read received data
 next  i 

LCD_Out(1,1,ss1)[/size] [SIZE=4]
Delay_ms(1000)

end.[/size] [SIZE=4]

Sender PIC[/size] [SIZE=4]
program new
dim r2 as char[20]
dim a2 ,i as byte

main:[/size] [SIZE=4]
r2 = "hello"
Usart_Init(2400) ’ Initialize USART module
for i = 0 to 4
Usart_Write(r2[i]) ’ Send data via USART
next i

end [/size]

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

شكرا
[/left]

هههههههههههه ما في مشكله ابدا اخ jawad_ibrahim :slight_smile:

صباح الخير
eabueida:) بالفعل انا قصي عن البيك لانه بتستقبل وبتبعث اكثر اشي 5 فولت
وبالنسبه لـ sm630 for fingerprint scanner بكون موجود في الداتا شيت كم الفولت عند الـ output

wishes22 :slight_smile: الكود تاعك صحيح جربته ال 2 بيك بستجيبو لبعض بس بدون ما ينقلو داتا يعني بس كونترول سيقنال
وممكن انحل هاي المشكله من خلال ربط البيك في الكومبيوتر والربط سهل كثير وكمان من خلال السيريال بورت وههيك بنقدر ننقل داتا و كونترول سيقنال واذا بدك بشرح الك كي الربط وكيف نعمل البرمجه على vb6
وياريت تحكي النا شوي عن المشروع حتى نقدر نتخيل حل يكون فعال

السلام عليكم
شكرا كتتير لقت الحل والبيك صارت تبعت الداتا … الحمدلله :slight_smile:

الحمد لله :slight_smile:
بس ممكن تحكي النا كيف

السلام عليكم
اتوقع ان في البداية كانت المشكلة في موقع Delay
لانه لما عدلنا الكود كالتالي اشتغل …

[LEFT]PIC 1


program pic1
dim s2 as byte
dim received_byte as byte
dim ss1 as byte

main:
Usart_Init(2400)
adcon1 = 255
Lcd_Init(PORTB)
Lcd_Cmd(LCD_CLEAR)
Lcd_Cmd(LCD_CURSOR_OFF)
for s2 = 0 to 5
if Usart_Data_Ready = 1 then ’ If data is received
ss1 = Usart_Read ’ Read received data
LCD_Chr(1,s2+1,ss1)
Delay_ms(500)
end if
next s2

end

PIC 2


program pic2
dim r2 as char[20]
dim a2 , d2 as byte

main:
r2="hello"
Usart_Init(2400)
for a2 = 0 to 5
Usart_Write(r2[a2])
Delay_ms(500)
next a2
end

تحياتي للجميع

[/left]

يسلمو كثير :slight_smile:

if Usart_Data_Ready = 1 then ' If data is received
for s2 = 0 to 5   ' enter for-loop when data is recevied 
ss1 = Usart_Read ' Read received data
LCD_Chr(1,s2+1,ss1) ' or LCD_Chr_Cp(ss1)  /// print at  a pointer 
Delay_ms(500)
next s2
end if

السلام عليكم سؤال جديد …
اذا بدي اضيف button ولما اكبس عليه بدي يبعت قيمة معينة على السيرال للبيك التانية
مثلا اذا كنت موصل ال button على PORTA.0 ببعت القيمة اذا كانت قيمة ال PORTA = 1
وكتبت جملة الشرط بس اتوقع انها ما زبطت لانه ما دخل عليها من الاساس , لاني طبعت جملة عادية على LCD اذا ;كبس على BUTTON
if PORTA.0 = 1 then
LCD_Out(1,1,“hello”)
end i f
بس ما كتب اشي على LCD
وشكرا …

اهلا وسهلا :slight_smile: احنا بخدمتكم بلي بنعرفه
اول شي لازم تنتبهي لـ button كيف واصل
اعملت الك برنامج لما button ينضغط بدخل 0 على البيك واذا ما كان مضغوط بدخل 1
شوفي توصيل ال button في الصوره
اسألي اي اشي لا تترددي وياريت تبعثي الي الدائرة تاعتك حتى اشوفها

program test



main:
TRISB=0x00     ' set port B as output for LCD
TRISA=0X01     ' Set pin A0 as input

LCD_init(PORTB)
Lcd_Cmd(LCD_CURSOR_OFF)
Lcd_Cmd(LCD_CLEAR)
ADCON1=7   'to disable the digial  pins on PORT A


X:
IF PORTA.0=0 THEN      '' push button if pushed , pic will recive a 0 (see the circuit)
Lcd_Cmd(LCD_CLEAR)
LCD_Out(1,1,"wishes22  ")
end if

goto X

 goto main
end.

شكرا على الرد …
كل اشي لهلا تمام الحمدلله …

الحمد لله :):slight_smile:
انتي بأي جامعه ؟؟

السلام عليكم …
انا بالهاشمية … احسن جامعة بالدنيا من وجهة نظري على الاقل !!

اهلا وسهلا :slight_smile:
ولازم كل واحد يفتخر بجامعته

السلام عليكم سؤال جديد اذا سمحتولي
هلا انا بدي اقرا رقم من المستخدم بدخلة من خلال keypad وهو لازم يكون رقم من 1-790 بس لازم يتحول هاد الرقم لمكافئه من ال hex يعني لو دخل 200 لازم توصل البيك التانية من خلال السيريال c8 هلا الكود يلي كتبته هوو التالي
:
//////////////////////*********************************///////////////////////////

[LEFT]program keypad_test
dim s2 as byte
dim received_byte as byte
dim ss1, head1 ,ii, head2, kp as byte
dim position as char[20]

main:
head1 =0x4D ’ define the head of the packet
head2 =0x58 ’ define the second byte of the head of the packet
TRISD =255
PORTD =255
’ 57600bps communiaction bud rate for the sm630
Usart_Init(2400)
adcon1 = 255 ’ configure RA5 pin as digital I/O
Keypad_Init(PORTD)
Lcd_Init(PORTB) ’ Initialize LCD on PORTC
Lcd_Cmd(LCD_CLEAR) ’ Clear display
Lcd_Cmd(LCD_CURSOR_OFF) ’ Cursor off
ADCON1=7 ‘to disable the digial pins on PORT A
’ position = 0x00
while true
’ 0x4D + 0x58 + 0x10 + 0x03 + 0x40 + 0x00 + 0x00 + 0xF8
IF PORTA.0=0 THEN
for ii = 0 to 2
kp = 0
’— Wait for key to be pressed
while kp = 0
’— un-comment one of the keypad reading functions
kp = Keypad_Released
wend
if kp > 10 then
kp = kp + 54
else
kp = kp + 47
end if

 position[ii]= kp
 LCD_Chr(1,ii+1,kp)
 'Delay_ms(500)

 next ii

’ Usart_Write(0x4D) ’ Send data via USART
’ Delay_ms(500)
’ Usart_Write(0x58)
’ Delay_ms(500)
’ Usart_Write(0x10)
’ Delay_ms(500)
’ Usart_Write(0x03)
’ Delay_ms(500)
‘Usart_Write(0x40)
‘Delay_ms(500)
Usart_Write(position[0])
Delay_ms(1000)
Usart_Write(position[1])
Delay_ms(1000)
Usart_Write(position[2])
Delay_ms(1000)
’ Usart_Write(0xf8)
’ Delay_ms(500)
’ position = position + 0x03
end if
wend
end.
[/left]

///////////////////////*********************////////////////////////////

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

السلام عليكم

اطرحي من كل رقم 30 بالهكس

ومن ثم اضربي كل خانة بوزنها مثل عشرة او ميه حسب ترتبها
ومن ثم اجمعيهم

والسلام عليكم