اطلاعیه

Collapse
No announcement yet.

خروجی از متلب به پرت سریال و میکرو

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

    خروجی از متلب به پرت سریال و میکرو

    سلام دوستان .من این مشکلم رو قبلا توی یکی دیگه از انجمن های اینجا پرسیدم اما جوابی نشنیدم.اگه میشهشما کمکم کنید.
    پستی که من توی موضوع قبلی نهادم از این قرار بود.
    بچه ها من باید این رو تا آخر هفته تحویلش بدم.
    پروژه ی کارشناسی من پردازش تصویر با متلبه. به این ترتیب که من یه دوربین رو به مطلب وصل میکنم و یه جسم رو از جلوی دوربین عبور میدم. مطلب بایدتشخیص بده که دوربین از کدوم طرف میاد و الان کجای تصویر قرار داره.بعد با استفاده از پرت سریال به میکرو دستور بده و میکرو هم به موتورها(که من اینجا از استپ موتور استفاده میکنم ،البته موتورهای بهتری مثل سرووو موتور هم هستندد که من به خاطر هزینه اش و این که این رو در دسترس داشتم از این استفاده میکنم.) دستور بده که چپ و راست و پلا و پایین بشن. حالا من قسمت پردازش تصویرش رو انجام دادم و کاملا و دقیق هم واب گرفتم. با قسمت میکروش هم مشکلی ندارم(چون اصلا چیزی نداره)تنها مشکل من الان اینه که از مطلب به میکرو دستور بدم.
    برای این کار هم یه پرت سریال گرفتم و پایه های 2و3و5 اون رو وصل کردم. اما هر کاری میکنم نمیتونم خروجی بدم به میکرو.
    حتی یه برنامه ساده رو هم که مینویسم ارور میده.
    برای تست برنامه خروجی رو به یه led دادم و پایه پنجش رو هم به کاتد اون دادم. بعد این برنامه رو نوشتم
    function test1
    s = serial('COM1&#039
    fopen(s)
    fwrite(s,1)
    end
    اما led من روشن نمیشه. نمیدونم چرا.این اطلاعات رو هم مینویسه. بعدش اگه خواستم دوباره از اون پورت استفاده کنم میگه هیچ پرتی در دسترس نیست.باید یک بار متلب رو ببندم و دوباره باز کنم تا دوباره اجرا بشه.
    اینها رو هم مینویسه

    Serial Port Object : Serial-COM3

    Communication Settings
    Port: COM3
    BaudRate: 9600
    Terminator: 'LF'

    Communication State
    Status: closed
    RecordStatus: off

    Read/Write State
    TransferStatus: idle
    BytesAvailable: 0
    ValuesReceived: 0
    ValuesSent: 0

    خواهشا کمک کنید. با دستور fprintf هم تست کردم همینطور بود

    #2
    پاسخ : خروجی از متلب به پرت سریال و میکرو

    به احتمال زیاد پورت RS232شما روی COM3 است نگاه کن ببین مربوط به کدوم COM است بعد برنامت رو مطابق با همون COM بنویس
    :job:

    دیدگاه


      #3
      پاسخ : خروجی از متلب به پرت سریال و میکرو

      درود
      چند تا مشکل ممکنه وجود داشته باشه:
      1. پورت com مشکل داره. یا سوخته یا شماره com رو اشتباه میزنی. ار device manager شماره com رو ببین.
      2. می دونی که به میکرو باید از یه max232 استفاده کنی. چون روی پورت سریال ولتاژ +-10 ولت هست (نه 0 و 3. می تونی ار یه مبدل usb2serial با خروجی ttl استفاده کنی که دیگه نیازی به max نباشه.
      4. باود ریتت درست نیست. باید باود ریت میکرو با متلب یکی باشه. اگه باود ریتت بالا هست، کریستال میکرو رو یه چیزی بذار که به 115200 بخش پذیر باشه. مثل 7273800.

      برای تست پورت وقتی مثلا عدد 1 رو قرار میدی، چون دیتا سریال ارسال میشه ال ای دی رو باید به صورت پشمک زن ببینی. (البته به مشخصه ال ای دی هم دقت کن چون ممکنه ولتاژ معکوسش اون رو بسوزونه چون -10 ولت روش خواهد افتاد).
      بنابراین برای تست پورت می تونی این کار رو انجام بدی. پایه های tx و rx رو به هم وصل کن. بعد hyper terminal یا هر نرم افزار دیگه مثل proteus رو باز کن. حالا هرچی تایپ کنی باید بتونی روی صفحه ببینی. چون tx به rx وصله. و اگه tx و rx رو جدا کنی مباید چیزی که تایپ می کنی رو ببینی.

      اگه پورتت سالم باشه من فکر می کنم اشکال از استفاده نکردن از max 232 هست. نمیشه rs232 رو به میکرو مستقیم وصل کرد.
      مـن هیچ ندانم که مرا آن که سرشت
      از اهل بهشت کرد یا دوزخ زشت
      جامی و بتی و بربطی بر لب کشت
      اين هر سه مرا نقد و تو را نسیه بهشت

      دیدگاه


        #4
        پاسخ : خروجی از متلب به پرت سریال و میکرو

        من هنوز به میکرو وصلش نکردم. اول میخوام ببینم اصلا مطلب چیزی میفرسته یا نه؟
        برای تست هم همونطور که گفتم از یه led استفاده کردم که پایه3 سریال رو به آند و پایه 5 رو به کاتد دادم(البته مقاومت 1کیلو رو برای نسوختن led سر راهش نهادم. بعد این برنامه رو اجرا میکنم .
        function test1
        s = serial('COM3&#039
        fopen(s)
        fwrite(s,1)
        end
        برنامه اجرا میشه و هیچ اروری نمیده.وقتی هم که تموم میشه این اطلاعات رو مینویسه
        Serial Port Object : Serial-COM3

        Communication Settings
        Port: COM3
        BaudRate: 9600
        Terminator: 'LF'

        Communication State
        Status: closed
        RecordStatus: off

        Read/Write State
        TransferStatus: idle
        BytesAvailable: 0
        ValuesReceived: 0
        ValuesSent: 0
        اما led روشن نمیشه(چشمک نمیزنه) همونطور که میبینید مشخصه values sent رو هم برابر صفر گزارش میکنه.
        max 232 هم خریدم اما برای تست روی led وصلش نکردم به پرت سریال.
        راستی برای ارسال اطلاعات هم از 1.5 متر سیم آیفونی استفاده کردم.این مشکلی ایجاد نمیکنه؟

        دیدگاه


          #5
          پاسخ : خروجی از متلب به پرت سریال و میکرو

          مطمعنید که دیگه تنظیم دیگه ای نداره؟ لطفا کمک کنید

          دیدگاه


            #6
            پاسخ : خروجی از متلب به پرت سریال و میکرو

            یه بخش کوچیکی از پروژه ارشد من این بود که مطلب با یک فرمان به میکرو درخواست دریافت اطلاعات میداد.
            بعد میکرو عدد مورد نظر را به کامپیوتر ارسال میکرد یعنی به مطل میداد.
            خب این کار در هر کتابی مربوط به میکرو هست. یک کتاب دقیقا مطلب رو درگیر اینکار میکنه اگه نتونستی کتاو گیر بیاری بگو تا واست برنامه خودمو بزارم
            اسم کتاب:
            آزمایشگاه میکروکنترلر
            مولفین مهندس مجید صلصال و مهندس امیر ره افروز و ...
            صفحه 465

            دیدگاه


              #7
              پاسخ : خروجی از متلب به پرت سریال و میکرو

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

              دیدگاه


                #8
                پاسخ : خروجی از متلب به پرت سریال و میکرو

                دستور (fprintf(d,'!1' کاراکتر !1 را بصورت رشته به پورت سریال میفرسته و میتونه برای میکرو نشونه ای برای درخواست دریافت اطلاعات از طرف PC (از طرف مطلب ) به میکرو باشه
                دستور (fget1(s رشته موجود در بافر پورت سریال را میخونه که همون داطلاعات ارسالی ا میکرو به PC هست.
                اگه سوالی بود نقل قل کن به همین تا بهتر بتونم بفهمم و جواب بدم

                دیدگاه


                  #9
                  پاسخ : خروجی از متلب به پرت سریال و میکرو

                  نوشته اصلی توسط hamedtahamtan
                  سلام دوستان .من این مشکلم رو ...
                  دوست عزیز استفاده از led برای تست ارتباط سریال زیاد اصولی نیست.با باود ریت 9600 هر بیت تقریبا 100 میکرو ثانیه رو به خودش اختصاص میده.برای ارسال یه کاراکتر با احتساب یک بیت شروع و پایان جمعا 10 بیت ارسال میشه که میشه یک میلی ثانیه.احتمال اینکه ارتباط درست باشه و شما تغییرات نور led تو یک میلی ثانیه رو نبینید زیاده.بهتره مدار رو کامل ببندید و تست کنید.در ضمن یک بار بیشتر port رو باز نکنید و بعد از پایان برنامه فقط پورت رو ببندید.دو بار استفاده متوالی دستور fopen منجر به خطا میشه
                  افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

                  دیدگاه


                    #10
                    پاسخ : خروجی از متلب به پرت سریال و میکرو

                    سلام
                    مشکل اصلی شما اینه که Status پورت Close هست. در واقع بعد از اینکه دستور fopen را اجرا میکنید پورت باید باز شود و تا وقتی پورت باز نشود، چیزی هم ارسال نمیشود:
                    کد:
                    >>      s1 = serial('COM1');
                    >>      fopen(s1)
                    >> s1
                    
                      Serial Port Object : Serial-COM1
                    
                      Communication Settings 
                       Port:        COM1
                       BaudRate:      9600
                       Terminator:     'LF'
                    
                      Communication State 
                       Status:       open
                       RecordStatus:    off
                    
                      Read/Write State 
                       TransferStatus:   idle
                       BytesAvailable:   0
                       ValuesReceived:   0
                       ValuesSent:     0
                     >>
                    حالا چرا باز نمیشود؟ یکبار دستورات را یکی یکی اجرا کنید(آنها را از تابع خارج کنید) و ببینید مشکل کار کجاست؟
                    وقتی Status باز شد، اکنون میتوان به پورت مقدار فرستاد:
                    کد:
                    >> fprintf(s1, '5');
                    >> s1
                    
                      Serial Port Object : Serial-COM1
                    
                      Communication Settings 
                       Port:        COM1
                       BaudRate:      9600
                       Terminator:     'LF'
                    
                      Communication State 
                       Status:       open
                       RecordStatus:    off
                    
                      Read/Write State 
                       TransferStatus:   idle
                       BytesAvailable:   0
                       ValuesReceived:   0
                       ValuesSent:     2
                    و دقت کنید که جلوی عبارت ValueSent عدد 2 نوشته شده است که نشانگر این است که Matlab روی پورت نوشته است(قبلا مقدارش 0 بود چون چیزی نفرستاده بود). بنابراین نیازی به استفاده از LED نیست.


                    در مورد LED نظر من با abolfazl_moradpour یکیه. شما به احتمال زیاد روشن شدن LED را نمیبینید. اگر اصرار دارید که با LED امتحان کنید، دستور fprintf را در یک حلقه بی نهایت قرار بدید و مثلا عدد 5 را ارسال کنید. LED باید حالت نیمه روشن داشته باشه که اونهم احتمالا در اتاقی تاریک قابل رویت هست با ارسال عدد 7 باید کمی روشن تر دیده بشه
                    پورت سریال رو هم در آخر تابع ببندید تا نیازی نباشه Matlab را بسته و مجددا باز کنید، با اضافه کردن دستور زیر:
                    کد:
                    fclose(s1)

                    دیدگاه

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