اطلاعیه

Collapse
No announcement yet.

شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

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

    شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

    سلام
    چطوری میشه روی avr روی هر پایه ای که بخواهیم یک usart داشته باشیم .یعنی یه شبیه سازی از پایه های rxd و txd روی دو پایه دلخواه دیگه. میشه یه وقفه سریال هم برای اون داشته باشیم تا اگه اطلاعاتی در پایه گیرنده فرستاده شد وقفه فعال بشه؟

    ممنون
    "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
    در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

    #2
    پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

    سلام
    ب اگر با کدویژن باشه ، آقای سپاسیار واسه Tx برنامه نوشتن تو همین سایت بگردی پیدا می کنی اما واسه Rx قضیه یه کم سخت تر میشه و برنامش رو کسی ننوشته اما کلیت کار به این صورت هست :
    1- استفاده از اینتراپت خارجی
    2- فعال کردن تایمر به اندازه 1.5 برابر طول یک سیگنال
    3 غیر فعال کردن اینتراپت و استفاده ازش برای نمونه برداری در زمانهایی برابر با طول یک سیگنال
    4-چک کردن بیتهای دریافتی از نظر توازن و ...
    5- غیر فعال کردن تایمر و فعال کردن لینتراپت خارجی مجدد
    اگر باز نیاز به توضیح بود بگید
    Don't hesitate to ask any question ..

    دیدگاه


      #3
      پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

      روی سایت اتمل یک APPLICATION NOTE راجع به SOFTWARE UART به همراه سورس کد هست.
      AVR304: Half Duplex Interrupt
      Driven Software UART

      که از یک وقفه خارجی به همراه یک تایمر استفاده میکنه.

      دیدگاه


        #4
        پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

        خیلی ممنون از راهنماییتون
        من از 3 تا پورت سریال میخواستم استفاده کنم . ولی به خاطر کمبود پورت سریال مجبورم که یه کار دیگه ای بکنم.
        مثل اینکه سرعت استفاده از پورت مجازی ساخته شده پایین هستش.( 76800 )

        من اومدم از یک مولی پلکسر 2 به 1 برای پایهtxd و از یک دیمولتی پلکسر 1 به 2 برای rxd استفاده کردم. اینطوری میتونم بین اون 2 تا وسیله باقی مونده سوییچ کنم . یعنی در عمل به یکی از اونها بیشتر در یک لحظه احتیاج ندارم. به نظر شما روش خوبیه؟

        ممنون
        "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
        در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

        دیدگاه


          #5
          پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

          راستی یه سوال مهم
          همونطور که میدونیم مثلا برای فرستادن یک بایت روی خط خروجی باید 10 تا بیت رو بیرون بفرستیم. یکی start bit و یکی stop bit . حالا اگه مثلا اول start bit رو بفرستیم بعدش بقیه اطلاعات رو نفرستیم و بعد از مثلا 1 ثانیه دیگه بقیه 8 تا بیت دیگه رو بفرستیم مشکلی پیش میاد؟ من فکر میکنم چون در فاصله اون 1 ثانیه ورودی سریال داره از خط نمونه برداری میکنه و همش صفر میبینه و هیچ وقت یک نمیبینه ، پس هیچ وقت به وجود یک بایت پی نمیبره ولی بمحض اینکه یه دونه 1 دید یعنی stop bit رو دیده و یک بایت رو تشکیل میده.این درسته؟
          همون سوال به یه شکل دیگه : اگه 10 تا بیت رو به فاصله زمانی 1 ثانیه بفرستیم چه اتفاقی میافته؟ فکر کنم اون چیزی که سریال میفهمه و دریافت میکنه با چیزی که ما فرستادیم فرق میکنه. اصلا شاید تا زمانی که ما بیت نهم رو میفرستیم گیرنده چندین بایت رو دریافت کرده باشه.

          D0 D7

          1-----1-----0---0----0----0----1----0----0----0
          فرض کنیم بین هر کدوم از این بیتها 1 ثانیه فاصله زمانی باشه

          من فکر کنم توی بیت D1 که صفر شده تازه شروع یک بایت آغاز میشه و توی زمان دریافت D5 هم یک بایت تمام میشه و مقدار دریافت شده 0 هستش
          بعد از اون هم چون همش صفر هستش بایتی مشخص نمیشه. درسته؟


          "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
          در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

          دیدگاه


            #6
            پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

            ارتباط ما اینجا بصورت آسنکرون هست یعنی برای ایجاد همزمانی بین فرستنده و گیرنده از مکانیسم سخت افزاری مثل کلاک دادن استفاده نمیشه. بنا براین تنها راه حل استفاده از فاکتور زمانی هستش. حالا وقتی میگیم سرعت 9600 باود یعنی چی؟ یعنی برای ارسال یک بیت 1/9600 ثانیه یا تقریبا 104 میکرو ثانیه استفاده میشه. و این زمان در فرستنده و گیرنده ست میشه. اما همزمانی هر دو طرف در ابتدای یک بایت با استفاده از بیت شروع انجام میشه. پس حالا اگه بیاییم بیت شروع رو بفرستیم میکرو ی گیرنده طول بیت شروع رو در نظر میگیره و بسته به نوع مشخصات خط از روی خط برای خوندن بیت های بعدی نمونه برداری میکنه. پس اگه شما بیت شروع رو بفرستی ناخودگاه مکانیسم زمانی رو بکار انداختی. پس هر عدم ارسالی از نظر شما خط رو در وضعیتی نامشخص از نظر گیرنده قرار میده که ممکنه یک یا صفر تعبیر بشه و این یعنی دریافت اطلاعات احتمالا غلط. برای ارسال اطلاعات با نرخ یک بیت در ثانیه سرعت تبادل شما میشه 1 باود.
            راجع به درست بودن به مدل شما بستگی داره. مثلا اگه بخوایین با یک سری دستگاهی ارتباط برقرار کنین که فقط در یک مدت زمانی که شما میدونین کی هست اطلاعات رد و بدل میشه این روش خوبه. اما بقیه موارد احتمالا نه. پس بهتره مشکلتون رو شرح بدین تا بشه یه راه هل خوبی با هم دربیاریم.

            دیدگاه


              #7
              پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

              پس حالا اگه بیاییم بیت شروع رو بفرستیم میکرو ی گیرنده طول بیت شروع رو در نظر میگیره و بسته به نوع مشخصات خط از روی خط برای خوندن بیت های بعدی نمونه برداری میکنه. پس اگه شما بیت شروع رو بفرستی ناخودگاه مکانیسم زمانی رو بکار انداختی. پس هر عدم ارسالی از نظر شما خط رو در وضعیتی نامشخص از نظر گیرنده قرار میده که ممکنه یک یا صفر تعبیر بشه و این یعنی دریافت اطلاعات احتمالا غلط.
              ممنون از توجهتون. وقتی که استارت بیت فرستاده میشه مکانیسم زمانی دریافت یک بایت فراهم میشه و به نظر من عدم ارسال بیت جدید یعنی همون بیت صفر که همون استارت بیت ما هم هستش روی پایه گیرنده هنوز هم فعال هستش و اگه تا 8 سایکل بعد از استارت بیت ، بیت جدیدی فرستاده نشه در سمت گیرنده ، هر 8 بیت با صفر پر میشه و اگه بیت دهم که همون استاپ بیت هستش دریافت شد (یعنی بیت یک ) یک بایت کامل در سمت گیرنده تلقی میشه (معادل صفر) درسته؟؟

              من با مگا128 کار میکنم. یک پورت سریال که دایم داره اطلاعات میاد. اونو نمیتونم کاریش کنم. میمونه دوتا کار دیگه. ولی فقط یک پورت سریال میمونه.
              کار اول- ریختن اطلاعات دخیره شده در روزهای متوالی به روی یک حافظه جانبی قابل اتصال به دستگاه . وقتی که این حافظه وصل بشه شروع به فرستادن اطلاعات کنه
              کار دوم- فرستادن همون اطلاعات به طور بیسیم به یک نقطه ای دور. وقتی این کار شروع میشه که گیرنده شناسایی بشه وگرنه که هیچی.
              پس خط سریال باقیمونده باید به ترتیب روی هر کدوم از این دو کار سوویچ کنه تا ببینه که کدومشون به دستگاه وصل شدن ( یعنی مثلا سوییچ کنه روی حافظه جانبی و یک رشته بفرسته اگه جواب داد پس یعنی وصل شده وگرنه سوییچ کنه روی خط سریال مربوط به گیرنده بیسیم و یک رشته به اون بفرسته اگه جواب داد اطلاعات رو به اون بده وگرنه که هیچی)

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

              ممنون


              "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
              در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

              دیدگاه


                #8
                پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                راستش من خودم برنامه این رو شروع کردم یه سورس هم با کدویژن پیدا کردم که مال atmega128 بودش اما نمیدونم اشکال کارم کجاست که درست جواب نمی گیرم
                اگر جواب گرفتید ممنون میشم واسه ما هم بگذارید
                این کار تو بسکام خیلی راحت تابع داره نمی دونم چرا تو کدویژن نداره
                Don't hesitate to ask any question ..

                دیدگاه


                  #9
                  پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                  یه فایل پروتئوس درست کردم با کدویژن. یه میکرو در سمت راسته صفحه است که فرض میکنیم مربوط به دستگاه اصلی باشه. و دوتا میکرو در سمت چپ صفحه . هر 3 تا هم میگیرن و هم میفرستند. کلید sw1 برای تعیین فرستنده هستش که کدوم یکی از دو میکرو سمت چپی بفرسته و کلید sw2 برای تعیین گیرنده هستش که کدوم یک از دو میکرو سمت چپی بگیره. در کل میکرو سمت راستی هم میگیره و هم میفرسته.
                  این کار میکنه ولی یه مشکل داره که وقتی کلید sw2 چند دفعه بالا پایین میشه دیگه دوتا میکرو سمت چپی نمیتونن اطلاعاتی دریافت کنند یعنی من فکر میکنم که فریم درستی رو هم دریافت نمیکنند .هر دفعه که خروجی دی مولتی پلکسر که به ورودی یکی از میکروهای سمت چپی وصل شده غیرفعال میشه خروجی زمین میشه و به احتمال خیلی زیاد همین باعث دریافت اشتباه فریم سریال میشه (چون به منزله یک استارت بیت میشه)(شاید البته) . دنبال راه حل هستم !! اگه کسی میدونه به منم بگه :smile:

                  فولدر1 برای میکروی بالایی و فولدر2 برای میکروی پایینی و فولدر rec برای میکروی سمت راستیه

                  http://www.4shared.com/file/GWx9j8K8/proteus.html
                  "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
                  در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

                  دیدگاه


                    #10
                    پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                    شما که قرار بود نرم ازاری کار کنید نه کلید و رله و مولتی پلکسر و ....
                    اینو من تست کردم تو عمل . جواب نمی ده
                    بریم با کمک هم همون نرم افزاریشو بسازیم بهتره
                    Don't hesitate to ask any question ..

                    دیدگاه


                      #11
                      پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                      سیاوش جان این یکی دیگه کار میکنه. :wow: اینطوری خروجی دیگه صفر نمیشه تا برای سریال مشکل پیش بیاد و کل مدار andو not موجود رو با دوتا آی سی جمعش میکنیم. رله هم که نداریم. به جای اون کلید sw1 و sw2 هم به میکرو وصل میشه (به یک پایه) و اون کلید فشاری ها هم حذف میشه و در موقع مناسب اطلاعات فرستاده میشه.

                      http://www.4shared.com/file/yEO9RSef/proteus2.html

                      راستی با spi هم میتونیم کار کنیم .تو avr که 4 تا پورت سریال داریم . من حواسم به این نبود ولی فعلا که همین خوبه. منظور شما از نرم افزاری چیه؟
                      "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
                      در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

                      دیدگاه


                        #12
                        پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                        spi شاید الام مفید باشه اما فکر کن می خوای چند تا ماژول که اختیاج به سریال دارند و به هم وصل کنی

                        اینکه می بیایم از آیسی های دیگه استفاده کنیم خوبه اما کلا راه اساسی نیست . منظورم از نرم افزاری اینه که مثل همون pdf بالا ، یه پایه دیگه رو به پورت سریال تبدیل کنیم
                        Don't hesitate to ask any question ..

                        دیدگاه


                          #13
                          پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                          اگه pdf رو بخونی سرعت ردوبدل کردن اطلاعات تو اون روش کمه. من spi رو ترجیح میدم.
                          با spi میشه بین دومیکرو اطلاعاتی ردوبدل کرد؟ مرجعی سراغ دارین؟
                          "در عجبم از مردمي که خود زير شلاق ظلم و ستم زندگي مي کنند و بر حسيني مي گريند که آزادنه زيست" شريعتي
                          در جهان روشنايي هايي وجوددارد كه در عميق ترين ظلمات نهانند.

                          دیدگاه


                            #14
                            پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                            اگه اجباری به ارتباط با سیستمی که پیاده سازیش دست شما نیست یا نمیتونین پروتکلش رو تغییر بدین ندارین میتونین از rs485 یا rs422 استفاده کنین. تا 32 تا میکرو رو میشه با هم شبکه کرد.

                            دیدگاه


                              #15
                              پاسخ : شبیه سازی پایه rxd و txd روی پایه های دیگر میکرو

                              بچه ها این دو تا پایه باید حتما مستقیم وصل بشه من یه مشکل دارم اونم اینه که میخوام دو قسمت از لحاظ dc جدا از هم کار کنه بین دو تا ایسی از خازن 104 استفاده کردم مشکلی ندارم ولی میخوام بازم از شما سوال کنم این کار مشکلی پیش نمیاره ؟
                              ft232bl
                              mega32
                              [move][img width=133 height=100]http://bargiri.persiangig.com/aks/0.306310001356499787_taknaz_ir.gif[/img][/move]

                              دیدگاه

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