اطلاعیه

Collapse
No announcement yet.

کنترل پین TXD در زمان استفاده از UART

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

    کنترل پین TXD در زمان استفاده از UART

    امکانش هست بعد از کانفیگ UART سخت افزاری بشه پین TXD رو تغییر وضعیت داد؟

    #2
    پاسخ : کنترل پین TXD در زمان استفاده از UART

    یعنی مثلا چطوری؟
    اگه از نظر خودتون موردی نداره بگین چیکار می خوایین بکنین و مشکل کجاست و چرا می خوایین این کار رو بکنید؟

    دیدگاه


      #3
      پاسخ : کنترل پین TXD در زمان استفاده از UART

      من باید یه نوع ارتباط سریال با باود 250K رو ایجاد کنم که هر فریمش 11 بیته. 1بیت شروع، 8بیت دیتا و 2بیت هم پایان. تا اینآ‌جای کار مشکلی نیست ولی باید بین هر فریم یک پالس 1 میکرو ثانیه ایجاد کنم یعنی یه بار TXD رو صفر و یک کتم.همچنین قبل از اولین فریم باید 100 میکرو ثانیه پایه TXD صفر و 12 میکرو ثانیه یک بشه.

      دیدگاه


        #4
        پاسخ : کنترل پین TXD در زمان استفاده از UART

        پین بغلی TXD رو بزن به لاین TXD و همین کارا رو روی لاینش انجام بده(خیلی راحت همون قد که می خوای high یا low بکن). اگه می ترسی به میکرو صدمه بزنه یه دیود هم واسه خط TXD بذار. حله یا نه هنوز به نظرت مشکل داره؟ من باشم براش یه تابع می نویسم که دیگه همه اینکارا رو خودش انجام بده.

        دیدگاه


          #5
          پاسخ : کنترل پین TXD در زمان استفاده از UART

          سلام
          بیت txen از رجیسترUCSRB(رجیستر کنترل وضعیت) رو کنترل کن با یک کردن ابن بیت فرستنده USARTفعال خواهد شد .هنگامی که این بیت یک میشود عملکرد عادی پایه TXقطع شده و به عنوان حروجی سریال عمل خواهد نمود صفر کردن این بیت تا هنگامی که اطلاعات بطور کامل ارسال نشود فرستنده را غیر فعال نمیکند

          دیدگاه


            #6
            پاسخ : کنترل پین TXD در زمان استفاده از UART

            نوشته اصلی توسط حسام هاشم
            سلام
            بیت txen از رجیسترUCSRB(رجیستر کنترل وضعیت) رو کنترل کن با یک کردن ابن بیت فرستنده USARTفعال خواهد شد .هنگامی که این بیت یک میشود عملکرد عادی پایه TXقطع شده و به عنوان حروجی سریال عمل خواهد نمود صفر کردن این بیت تا هنگامی که اطلاعات بطور کامل ارسال نشود فرستنده را غیر فعال نمیکند
            این بیت رو صفر کردم ولی چیزی نشد.
            توی دیتاشیت نوشته:
            The disabling of the Transmitter (setting the TXEN to zero) will not become effective
            until ongoing and pending transmissions are completed (i.e., when the Transmit Shift
            Register and Transmit Buffer Register do not contain data to be transmitted). When disabled,
            the Transmitter will no longer override the TxD pin
            .
            این دو تا رجیستر کجا هستن؟

            دیدگاه


              #7
              پاسخ : پاسخ : کنترل پین TXD در زمان استفاده از UART

              نوشته اصلی توسط حمیدرضا رضائی
              این دو تا رجیستر کجا هستن؟
              یکیش فکر نکنم بهش دسترسی داشته باشیم(شیفتر)، یکی دیگش هم UDR باید باشه(بافر)(صفحه 140 دیتاشیت مگا32).

              دیدگاه


                #8
                پاسخ : کنترل پین TXD در زمان استفاده از UART

                من هرچه قدر با این رجیستر ها ور رفتم جواب نگرفتم.
                TXEN رو صفر کردم و واقعا هم صفر شد ولی هنوز پین TXD در وضعیت HI هست
                کسی نظری نداره؟

                دیدگاه


                  #9
                  پاسخ : کنترل پین TXD در زمان استفاده از UART

                  هیچ کدوم از این ها هم جواب ندادن:
                  Ucsrb.txcie = 0
                  Ucsrb.rxcie = 0
                  Ucsrb.rxen = 0
                  Ucsrb.txen = 0
                  Ucsrb = 0

                  دیدگاه


                    #10
                    پاسخ : پاسخ : کنترل پین TXD در زمان استفاده از UART

                    نوشته اصلی توسط حمیدرضا رضائی
                    هیچ کدوم از این ها هم جواب ندادن:
                    Ucsrb.txcie = 0
                    Ucsrb.rxcie = 0
                    Ucsrb.rxen = 0
                    Ucsrb.txen = 0
                    Ucsrb = 0
                    حاجی می خوای به همون گزینه خودم فکر کنی؟ :redface:

                    دیدگاه


                      #11
                      پاسخ : کنترل پین TXD در زمان استفاده از UART

                      برای استفاده از TXD به عنوان یک پین I/O بعد از اتمام ارسال، ابتدا باید در رجیستر UCSRA منتظر یک شدن بیت شماره 6 که همان TXC است بمانید تا ارسال جاری تمام شود (با فرض mega32). بعد در محل این بیت یک بنویسید تا صفر شود و برای بار بعد بتوانید از آن استفاده کنید. سپس در UCSRB بیت شماره 3 یا TXEN را صفر کنید و در این شرایط با فرض اینکه پین متناظر با TXD از قبل خروجی تعریف شده باشد، می توانید آن را بسته به نیاز Low و High کنید. برای ارسال های بعدی هم باید مجددا TXEN یک شود و این روال همچنان ادامه یابد.
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


                        #12
                        پاسخ : پاسخ : کنترل پین TXD در زمان استفاده از UART

                        نوشته اصلی توسط Rohalamin
                        پین بغلی TXD رو بزن به لاین TXD و همین کارا رو روی لاینش انجام بده(خیلی راحت همون قد که می خوای high یا low بکن). اگه می ترسی به میکرو صدمه بزنه یه دیود هم واسه خط TXD بذار. حله یا نه هنوز به نظرت مشکل داره؟ من باشم براش یه تابع می نویسم که دیگه همه اینکارا رو خودش انجام بده.
                        اگه قرار باشه ترفندی به کار ببرم از UART نرم افزاری استفاده میآ‌کنم. تست کردم و خوب هم جواب داده فقط مشکلش اینه که با این مقدار باود باید از فرکانس 16مگ استفاده کنم که با توجه به این که میآ‌خوام از نوسانساز داخلی میکرو استفاده بشه، غیر ممکنه.
                        میآ‌خوام ترجیحا با UART سخت افزاری و بدون کارهای عجیب و غریب باشه.

                        نوشته اصلی توسط طراح
                        برای استفاده از TXD به عنوان یک پین I/O بعد از اتمام ارسال، ابتدا باید در رجیستر UCSRA منتظر یک شدن بیت شماره 6 که همان TXC است بمانید تا ارسال جاری تمام شود (با فرض mega32). بعد در محل این بیت یک بنویسید تا صفر شود و برای بار بعد بتوانید از آن استفاده کنید. سپس در UCSRB بیت شماره 3 یا TXEN را صفر کنید و در این شرایط با فرض اینکه پین متناظر با TXD از قبل خروجی تعریف شده باشد، می توانید آن را بسته به نیاز Low و High کنید. برای ارسال های بعدی هم باید مجددا TXEN یک شود و این روال همچنان ادامه یابد.
                        مشکل اینجاست که بیت TXC یه هیچ عنوان یک نمیشه.شاید مشکل از بسکام باشه.
                        در رجیستر UCSRA فقط میآ‌تونم بیت های 0 و 1 رو تغییر بدم. در حالی که TXC هم وضعیت R/W داره و قاعدتا باید بشه تغییر وضعیتش داد.

                        دیدگاه


                          #13
                          پاسخ : کنترل پین TXD در زمان استفاده از UART

                          تا حدی مشکل رو پیدا کردم.
                          در صورتی میشه این کارو انجام داد که حتما قبلش یک ارسال انجام شده باشه. در حالی که بنده میآ‌خوام قبل از اولین ارسال این کارو انجام بدم.
                          مشکل بعدی اینه که در ارسال حتما باید از دستور print استفاده بشه در حالی که من از دستور printbin استفاده می کنم.

                          دیدگاه


                            #14
                            پاسخ : کنترل پین TXD در زمان استفاده از UART

                            سلام به همه دوستان
                            من با یک مشکل جدید مواجه شدم و اونم اینه که هر بار ارسال اطلاعات میکنم گیرنده ایتدا عدد ارسالی و بعد عدد 48 رو دریافت میکنه باود ریت 9600 هست با وقفه دریافت udr کار میکنم
                            خیلی ذهنم رو درگیر کرده
                            ممنون مبشم دوستان راهنمایی کنن .
                            اگه نیازی به نمونه برنامه و توضیح بیشتر هست در خدمتم .

                            دیدگاه


                              #15
                              پاسخ : کنترل پین TXD در زمان استفاده از UART

                              در صورت برقراری مشکل، بجای استفاده از دستورات بسکام بصورت مستقیم به رجیسترها مقداردهی کنید تا بتوانید عملکرد دلخواه خود را پیاده سازی کنید.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه

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