ايران ويج

نسخه‌ی کامل: ارتباط سریال دو میکرو
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5
سلام.میشه یکی منو راهنمایی کنه.من میخوام بین دو تا avr ارتباط بیسیم برقرار کنم.ارتباط هم دوطرفه است.مشکلم اینه که وقتی AVR مثلا تو مد ارسال هست وقتی داده برای دریافت میرسه اینتذاپت نمیگیره و دیتا رو دریاغت نمیکنه.چکارش کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟لطفا کمکم کنید.مرسی
(۳۰-شهریور-۱۳۸۹, ۱۱:۰۷:۲۴)thania_x نوشته است: [ -> ]سلام.میشه یکی منو راهنمایی کنه.من میخوام بین دو تا avr ارتباط بیسیم برقرار کنم.ارتباط هم دوطرفه است.مشکلم اینه که وقتی AVR مثلا تو مد ارسال هست وقتی داده برای دریافت میرسه اینتذاپت نمیگیره و دیتا رو دریاغت نمیکنه.چکارش کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟لطفا کمکم کنید.مرسی
سلام والا من نفهميدم شما ميخواي موقع ارسال ديتا دريافتم بكني همزمان ؟/

اره.راستش دارم یه پیجر می سازم،مثلا گیرنده بعد از دریافت داده باید یه پیام دریافت به فرستنده بفرسته و فرستنده هم باید بعد از ارسال این پیام دریافت رو بگیره.در ضمن من یه فرستنده دارم چند تا گیرنده.ممنون میشم کمکم کنید

مهندس مشکلی این وسط وجود نداره !

بهتره عملی تست کنین و اگه به مشکل خوردین بیان کنین !!!
به مشکل برخوردم.مشکلم اینه که مثلا تو برنامه ارسال باید یه زیر برنامه دریافت تعریف کنم که وقتی داده میاد با یه اینتراپت بره توش.ولی تو برنامه من وقتی میره تو اینتراپت قفل میکنه و دیگه هیچ کاری انجام نمیده.یه روش می خوام که به avr بفهمونم که الان داده برای دریافت داره یا تو مدار گیرنده بفهمه که الان باید ارسال کنه.یه چیزی غیر از اینتراپت
برنامتو بذار مهندس !

ایراد باید از برنامه باشه !!
چشم،برنامه رو میذارم.فقط قبلش یه سوال.الان avr فرستنده و گیرنده احتیاج به سنکرون کردن داره؟به جز بیت ریت یکسان دیگه چی لازم داره؟واقعا مرسی از کمکاتون
هیچی !
فقط سرعت ارسال اطلاعات یکی باشه و بقیه پارامترهای سریال رو هم عوض نکنین !
مثلا 8 بیتی باشه و بیت پریتی و بیت شروع و .......


البته این نکته مهم فراموش نشه که سرعت میکرو رو درست تو برنامه وارد کنین !
ترجیحا دو تا میکرو رو هم مثل هم بذارین تا خطای ارسال اطلاعات هم نباشه !!!


اگه هم قراره به کامیپوتر وصل بشه باید از کریستال خواص مثل 11059200 هرتز استفاده کنین تا خطا صفر باشه !
هر چند با بقیه فرکانس ها هم مشکلی نداره !!


اگه هم با ماژول بیسیم کار می کنین ممکنه ماژولتون نتونه تو هر سرعتی کار کنه !
با همون 9600 تست کنین !!!

این برنامه ساده شده ارسال هست.قرار با اومدن داده با اینتراپت از برنامه ارسال خارج و زیر برنامه دریافت بره.اما نمیرهههههههههههههه
این کد های اول برنامه ات رو توضیح می دی :
واسه چیه اینها ؟؟؟؟؟؟

کد:
A(1) = 162
A(2) = 51
A(3) = 91
A(4) = 120
A(5) = 20


به نظر من برنامه ات پر ایراد بودش :

این برنامه رو یه تست بزن :

کد php:
$regfile "M16def.dat"
$crystal 1000000
$baud 
9600
'---------------------------------------------------
Config Lcdpin = Pin , Db7 = Pina.7 , Db6 = Pina.6 , Db5 = Pina.5 , Db4 = Pina.4 , E = Pina.3 , Rs = Pina.2
Config Lcd = 16 * 2
'
---------------------------------------------------
Dim A(10) As Byte As Byte As Byte As Byte Receive As String 100 Ant As Byte
'---------------------------------------------------
Enable Interrupts
Enable Urxc
On Urxc Receive_program
'
---------------------------------------------------
Config Pinb.0 Input
'---------------------------------------------------
Cls
Home
Lcd "salam"
Wait 2
Cls
'
---------------------------------------------------
A(1) = 162
A
(2) = 51
A
(3) = 91
A
(4) = 120
A
(5) = 20
'---------------------------------------------------
Do
   Debounce Pinb.0 , 1 , Ant , Gosub
Loop
'
---------------------------------------------------
Ant:
   
Printbin 85 13
   Cls
   
For 1 To 5
      Printbin A
(i)
      
Lcd Chr(a(i))
      
Lcd " "
   
Next
   Printbin 13
Return
'---------------------------------------------------
Receive_program:
   B = Inkey()
   If B = 13 Then :
      Lcd Receive
      Waitms 50
      Ant = 1
   Else :
      If Ant = 1 Then :
         Receive = Chr(b) : Ant = 0
      Else :
         Receive = Receive + Chr(b)
      End If
   End If
Return 


البته برنامه بالا رو هنوز میشه خلوت تر کرد !!

البته این وقفه سریال یکم خود درگیری داره و خوب می تونی برنامتو بدون وقفه سریال هم کار کنی :
مثل برنامه زیر :

کد php:
$regfile "M16def.dat" $crystal 1000000 $baud 9600
'---------------------------------------------------
Config Lcdpin = Pin , Db7 = Pina.7 , Db6 = Pina.6 , Db5 = Pina.5 , Db4 = Pina.4 , E = Pina.3 , Rs = Pina.2
Config Lcd = 16 * 2
'
---------------------------------------------------
Dim A(10) As Byte As Byte As Byte As Byte Receive As String 100 Ant As Byte
'---------------------------------------------------
Config Pinb.0 = Input
'
---------------------------------------------------
Cls Home L Lcd "salam" Wait 2 Cls
'---------------------------------------------------
A(1) = 162 : A(2) = 51 : A(3) = 91 : A(4) = 120 : A(5) = 20
'
---------------------------------------------------
Do
   
Debounce Pinb.0 Ant Gosub
   B 
Inkey()
   If 
<> 0 Then Gosub Receive_program
Loop
'---------------------------------------------------
Ant:
   Printbin 85 ; 13
   Cls
   For I = 1 To 5
      Printbin A(i)
      Lcd Chr(a(i))
      Lcd " "
   Next
   Printbin 13
Return
'
---------------------------------------------------
Receive_program:
   If 
13 Then :
      
Lcd Receive
      Waitms 50
      Ant 
1
   
Else :
      If 
Ant 1 Then :
         
Receive Chr(b) : Ant 0
      
Else :
         
Receive Receive Chr(b)
      
End If
   
End If
Return 
اول خیلی خیلی خیلی............ ممنون که کمک می کنید،واقعا لطف می کنید.
من این برنامه رو تست کردم.رو lcd یه چیزای عجیبی نشون میده.میشه یکم راجع به برنامه توضیح بدید؟واقعا ممنون میشم .مرسییییییییییییی
یه سوال دیگه.با دستور inkey که میخونم داده تبدیل به اسکی میشه.چطور تبدیلش کنم به دسیمال؟
صفحه‌ها: 1 2 3 4 5