اطلاعیه

Collapse
No announcement yet.

درست کار نکردن یوزارت

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    درست کار نکردن یوزارت

    سلام
    اعصابم دیگه خط خطی شده از صبح دارم با اینا ور میرم که درست شن ولی متاسفانه نشدن.. :angry:
    برنامه های فرستنده و گیرنده رو میذارم ، ببینید ایرادش از کجاست...(به پروتیوس هم اعتماد نکردم و تو عمل بستم ..)
    میخوام رشته ارسال کنم
    رو ال سی دی گیرنده چرت و پرت میزنه ...
    یه مهندس به ما کمک میکنه مشکلمون حل شه ؟؟
    فرستنده:[code=qbasic]$regfile = "m8def.dat"
    $crystal = 11059200
    $baud = 9600
    Config Timer0 = Timer , Prescale = 1
    Enable Interrupts
    Enable Ovf0
    Start Timer0
    On Ovf0 Xxx
    Config Portb.0 = Output

    Do
    Print "sina"
    Loop
    End
    Xxx:
    Toggle Portb.0
    Return

    [/code]


    گیرنده:
    [code=qbasic]$regfile = "m8Def.dat"

    $crystal = 11059200

    $baud = 9600

    Config Lcdpin = Pin , Db7 = Pind.7 , Db6 = Pind.6 , Db5 = Pind.5 , Db4 = Pind.4 , E = Pind.3 , Rs = Pind.2
    Config Lcd = 16 * 2
    Cls
    Dim S As String * 10
    Do
    Input S
    Home
    Lcd S
    Loop
    End
    [/code]
    تشکر.

    تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
    علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

    #2
    پاسخ : درست کار نکردن یوزارت

    سلام بجای دستورprintاز printbin استفاده کنید
    به جای inputاز inputbin
    Gnd گیرنده وفرستنده در ارتباط سیمی باید مشترک باشه
    یه فکری هم برا تایمرتون بکنید که همش تو زیر برنامه ست

    دیدگاه


      #3
      پاسخ : درست کار نکردن یوزارت

      ممنون از جوابتون
      تایمر خیلی مشکل ایجاد نمیکنه ...
      printbin که رشته نمیفرسته ..
      بسکام ارور میده :eek:
      تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
      علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

      دیدگاه


        #4
        پاسخ : درست کار نکردن یوزارت

        نوشته اصلی توسط pars_paya
        ممنون از جوابتون
        تایمر خیلی مشکل ایجاد نمیکنه ...
        printbin که رشته نمیفرسته ..
        بسکام ارور میده :eek:
        خواهش میکنم,خودش تبدیل میکته شما یه متغییر رشته تعریف کن و اون متغیر رو ارسال کن,من به همین دستور اطلاعات دما و رطوبت رو از فاصله 200متر ارسال میکنم

        دیدگاه


          #5
          پاسخ : درست کار نکردن یوزارت

          در گیرنده از روتین وقفه استفاده کن
          در ضمن اصراریه که درفرستنده بدون تاخیر و با حداکثر سرعت رشته ارسال میکنی؟
          بین هر کدوم یه تاخیری بزار

          دیدگاه


            #6
            پاسخ : درست کار نکردن یوزارت

            نوشته اصلی توسط Rezash86
            در گیرنده از روتین وقفه استفاده کن
            در ضمن اصراریه که درفرستنده بدون تاخیر و با حداکثر سرعت رشته ارسال میکنی؟
            بین هر کدوم یه تاخیری بزار
            موافقم

            دیدگاه


              #7
              پاسخ : درست کار نکردن یوزارت

              سلام مهندس
              شما یه زحمتی بکش، تو فرستنده یه متغیر String تغریف بکن (حالا بعد هرچی خواستی توش بنویس) بعد اونو Print کن.
              تو گیرنده هم از وقفه سریال استفاده کن. واسه گیرنده این تاپیک میتونه کمکت کنه:
              http://www.eca.ir/forum2/index.php?topic=73845.0
              البته من از کد اولی جواب نگرفتم، اما از اونی که خودم گذاشتم در عمل در باودهای زیر 38400 کامل جواب گرفتم. شب برات برنامه ارسال و دریافتو هر دوتاشو میذارم، اما فعلا این دریافتو داشته باش، اونور هم واسه ارسال String بفرست، ایشاالله مشکل حل میشه. البته اینم در نظر بگیر که میکرو گیرنده خیلی میره تو وقفه ها...
              البته به نظرم رسید که شاید بد نباشه برنامه فرستنده رو اینطوری اصلاح کنی:
              کد:
                $regfile = "m8def.dat"
                $crystal = 11059200
                $baud = 9600
                Dim Sina as string * 10
                Sina = "Sina"
                Config Timer0 = TIMER , Prescale = 1
                Enable Interrupts
                Enable Ovf0
                Start Timer0
                ON Ovf0 Xxx
                Config Portb.0 = OUTPUT
                 
                DO
                LOOP
                END
                Xxx:
                Toggle Portb.0
                PRINT Sina
                RETURN
              نوشته اصلی توسط Rezash86
              در گیرنده از روتین وقفه استفاده کن
              در ضمن اصراریه که درفرستنده بدون تاخیر و با حداکثر سرعت رشته ارسال میکنی؟
              بین هر کدوم یه تاخیری بزار
              سلام مهندس
              به خاطر PWM تو پروژش نمیشه از تاخیر استفاده کنه.
              تشكر نكن، صلوات بفرست:

              [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

              دیدگاه


                #8
                پاسخ : درست کار نکردن یوزارت

                ممنون داداش..
                اسباب زحمت شدیم ...
                شرمنده ....
                پس شب منتظرم ...
                تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                دیدگاه


                  #9
                  پاسخ : درست کار نکردن یوزارت

                  آقا حدودا ردیف شده ...
                  فقط نمیدونم چرا فقط بار اولی که دکمه فرستنده رو میزنم درست میفرسته :eek: :eek: :eek: :eek:
                  دفعات بعدی که دکمه رو میزنم فقط عبارت "A5" خونده میشه :eek: :eek: :eek: :eek:
                  فرستنده:[code=qbasic]$regfile = "m8def.dat"
                  $crystal = 11059200
                  $baud = 9600

                  Config Portb.0 = Input
                  Dim S As String * 20
                  Dim A As Byte
                  Dim B As Byte
                  Dim C As Byte
                  Dim Aa As String * 5
                  Dim Bb As String * 5
                  Dim Cc As String * 5


                  A = 252
                  B = 50
                  C = 3





                  Do
                  Debounce Pinb.0 , 0 , Yyy , Sub
                  Aa = Str(a)


                  Bb = Str(b)


                  Cc = Str(c)





                  Loop
                  End
                  Yyy:
                  S = Aa + "A" + Bb + "A" + Cc
                  Printbin S
                  S = ""
                  Return[/code]


                  گیرنده:

                  [code=qbasic]$regfile = "m8def.dat"

                  $crystal = 11059200

                  $baud = 9600
                  Enable Interrupts
                  Enable Urxc
                  On Urxc Xxx
                  Config Lcdpin = Pin , Db7 = Pind.7 , Db6 = Pind.6 , Db5 = Pind.5 , Db4 = Pind.4 , E = Pind.3 , Rs = Pind.2
                  Config Lcd = 16 * 2
                  Cls
                  Dim S As String * 10
                  Dim D As String * 4
                  Dim I As Byte
                  Dim F As String * 4
                  Do


                  Loop
                  End
                  Xxx:
                  Inputbin S


                  Home
                  Lcd S ; " "
                  S = ""
                  Return[/code]
                  تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                  علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                  دیدگاه


                    #10
                    پاسخ : درست کار نکردن یوزارت

                    سلام مهندس جان
                    ببخشید دیر شد
                    اینو یه تستی بکن، ایشالله جواب بگیری، من خودم از این روش تونستم خیلی راحت رشته های 300 کاراکتری بفرستم. باودریت هم مشکلی نیست تا 38400 ببری بالا، البته بیشترشو تست نکردم، شاید اونم جواب بده.
                    برنامه فرستنده:
                    کد:
                    $regfile = "m16def.dat"
                    $crystal = 11059200
                    $baud = 9600
                    $swstack = 32
                    $hwstack = 64
                    $framesize = 64
                    
                    dim 1 as byte
                    dim 2 as byte
                    dim 3 as byte
                    dim 4 as byte
                    dim 5 as byte
                    dim s as string * 20
                    dim olds as string * 20
                    
                    do
                    s = str(1) + str(2) + str(3) + str(4) + str(5)
                    if s <> olds then
                    print s
                    s = olds
                    end if
                    loop
                    end
                    اگه خواستی چیز دیگه ای اضافه کنی اشکالی نداره، اما اول یه بار همینو تست کن بعد جزئیات رو اضافه کن. اون IF هم که گذاشتم واسه اینه که اگه S تغییری داشت ارسال بشه و اگه تغییر نداشت نه، اینطوری میکرو گیرنده کمتر میره تو وقفه.

                    برنامه میکرو گیرنده:
                    کد:
                    $regfile = "m16def.dat"
                    $crystal = 11059200
                    $baud = 9600
                    $swstack = 32
                    $hwstack = 64
                    $framesize = 64
                    
                    dim r as string * 20
                    dim Buffer_udr as byte
                    
                    Enable Urxc
                    On Urxc Rxc
                    Enable Interrupts
                    
                    do
                    loop
                    end
                    
                    Rxc:
                    $timeout = 1000000
                    Input r noecho
                    Buffer_udr = Udr
                    Return
                    Return
                    تو این میکرو هم دیتا توسط Input دریافت میشه و تو متغیر R قرار میگیره، Noecho هم باعث میشه که داده گرفته شده مجددا ارسال نشه (دستور Input بصورت پیشفرض هرچی دریافت کنه رو ارسال هم میکنه، یعنی اکو داره). اون تایم اوت هم برای اینه که اگه دیتا درست دریافت نشد (به هر دلیلی) میکرو در این دستور متوقف نمونه و برنامه ادامه پیدا کنه. اون udr رو هم تو متغیر بافر خالی کردم که میکرو فکر کنه از این رجیستر استفاده شده و بافر خالیه و بره برای دریافت کاراکتر بعدی. حالا میتونی از رشته R تو لوپ اصلی گیرنده استفاده کنی. راستی یادت باشه اگه نتونستی رشته R رو تو حلقه اصلی دریافت کنی یه بار Noecho رو حذف کن ببین اصلا چیزی دریافت میشه یا نه. اگه دریافت شد ولی تو حلقه اصلی نیومد یه متغیر دیگه تعریف کن (مثل r) و بعد از دستور Input متغیر R رو توش خالی کن.
                    تست کن نتیجه رو حتما بهم خبر بده.
                    ممنون
                    تشكر نكن، صلوات بفرست:

                    [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                    دیدگاه


                      #11
                      پاسخ : درست کار نکردن یوزارت

                      آقا تشکر ...
                      خیلی بامرامی ....
                      برنامه ت کلی بدردم خورد ...
                      کارم راه افتاد ......
                      خدا پدرتو بیامرزه ........
                      ایشالله جبران کنم واست .....
                      تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                      علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                      دیدگاه


                        #12
                        پاسخ : درست کار نکردن یوزارت

                        سلام
                        خدارو شکر که حل شد
                        چاکرتیم داداشی، من که کاری نکردم، وظیفه بوده.
                        ما درس پس میدیم استاد :redface:
                        تشكر نكن، صلوات بفرست:

                        [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                        دیدگاه


                          #13
                          پاسخ : درست کار نکردن یوزارت

                          ببخشید دوباره مزاحم شدم ..
                          الان میخوام اون 12 متغیری رو که فرستادم رو تو گیرنده تفکیک کنم ...
                          چطور باید این کار رو انجام بدم ؟؟
                          ممنون
                          تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                          علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                          دیدگاه


                            #14
                            پاسخ : درست کار نکردن یوزارت

                            نوشته اصلی توسط pars_paya
                            ببخشید دوباره مزاحم شدم ..
                            الان میخوام اون 12 متغیری رو که فرستادم رو تو گیرنده تفکیک کنم ...
                            چطور باید این کار رو انجام بدم ؟؟
                            ممنون
                            سلام مهندس
                            خوب تو گیرنده واسه هر متغیر یه رشته تعریف کن:
                            [code=vb]
                            Dim a1 as string * 3
                            Dim a2 as string * 3
                            Dim a3 as string * 3
                            Dim a4 as string * 3
                            Dim a5 as string * 3
                            .
                            .
                            .
                            Dim a12 as string * 3[/code]
                            البته طول هر رشته رو هرچقدر که خواستی بده، من با فرض بایت بودن داده های ارسالیت و 0 الی 255 بودن مقدارش طول رشته رو 3 در نظر گرفتم.
                            با فرض رشته دریافت شده با نام R میتونی از سه دستور left - mid - right استفاده کنی تا رشته های 3 تایی رو از رشته اصلی جدا کنی. کار سختی هم نیست، یه نگاه بکن:
                            [code=vb]
                            a1 = left (R , 3)
                            a2 = mid (R , 4 , 3)
                            .
                            .
                            .
                            a12 = right (R , 3)[/code]
                            تو دستور left متغیر رو مشخص میکنی و تعداد کاراکتری که میخوای از چپ ترین کاراکتر رشته شمرده بشه (یعنی 3 تای اول رشته R). تو دستور mid باز رشته اصلی مشخصه و شماره کاراکتری که قراره ازش شمارش شروع بشه (یعنی از کاراکتر 4 تا 6 رو میخوام) و تعداد کاراکتری که لازمه برداشته بشه. دستور right هم دقیقا مثل دستور left هست، فقط جهت برداشتن رشته عوض شده. به جای همشون هم میشه از دستور mid استفاده کرد و اصلا کاری به right و left نداشته باشی. یه نگاهی اینجا بکن:
                            http://avrhelp.mcselec.com/index.html?mid.htm
                            مرسی
                            تشكر نكن، صلوات بفرست:

                            [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

                            دیدگاه


                              #15
                              پاسخ : درست کار نکردن یوزارت

                              آقا خیلی ممنون از توضیحات کاملت ...
                              ببین مثلا یه رشته داریم مثل 252A50B3
                              که اعداد بین حروف میتونن هر چند رقمی باشند
                              چطوری میتونم تیکه رشته های مربوط به هر عدد رو استخراج کنم؟؟
                              ممنون میشم اگه یه تیکه برنامه بذاری واسم ...
                              بازم ما شرمنده شدیم ....
                              تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
                              علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

                              دیدگاه

                              لطفا صبر کنید...
                              X