اطلاعیه

Collapse
No announcement yet.

مشکل در ارسال اطلاعات با USART

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

    #31
    پاسخ : مشکل در ارسال اطلاعات با USART

    سلام.
    برنامه های شما رو یه ادیت کوچولو کردم ، کاری که میخواستین رو الان انجام میده و روی ال سی دی عدد 1022 که به عنوان نمونه در برنامه در نظر گرفته بودین رو نمایش میده. همونطور که جناب Rubeus توضیح دادن اول 8 بیت کم ارزش و سپس 8 بیت پرارزش ارسال می شه و درگیرنده بازسازی می شه.
    البته برای استفاده نهایی تو یه پروژه به خصوص باید ملاحظات بیشتری را در نظر گرفت ، من سعی کردم برنامه با ساده ترین حالت ممکن نوشته بشه.
    ممنون از حوصله ای که داشتین! ولی من میخاستم با اینتراپت بگیرم! مشکل اصلیم هم همین بود! اون ابتکار مسخره ای هم که تو ISR دیدین، واسه حل همین مشکل بود!

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

    (عبدالرضا کشاورز)

    دیدگاه


      #32
      پاسخ : مشکل در ارسال اطلاعات با USART

      ;UCSRC=0x06
      این مقداردهی واقعا گریه داره
      مگه مشکلش چیه؟ من با رجیسترهای avr خیلی آشنایی ندارم! :redface:

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

      ممنون از وقتی که برام میذارین...
      :wow:
      قامت انسان با لباس انسانیت شکل می گیرد،
      والا مترسک جالیز را هم می توان لباسی فاخر پوشاند

      (عبدالرضا کشاورز)

      دیدگاه


        #33
        پاسخ : مشکل در ارسال اطلاعات با USART

        نوشته اصلی توسط --نیلوفر--
        مگه مشکلش چیه؟ من با رجیسترهای avr خیلی آشنایی ندارم! :redface:

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

        ممنون از وقتی که برام میذارین...
        :wow:
        بتون نمیگم ، فقط بتون آدرس میدم : صفحه 160 دیتاشیت atmega32 . خودتون برید بخونید و بعد علتش رو بیاید اینجا بگید که چرا ;UCSRC=0x06 درست نیست و این باعث اشتباه بزرگی میشود. اینطوری باب آشنایی شما با رجیسترها فراهم میشه.

        راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
        کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
        نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
        http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
        انشالله به زودي تاپيک ها به روز رساني خواهد شد،

        دیدگاه


          #34
          پاسخ : مشکل در ارسال اطلاعات با USART

          بتون نمیگم ، فقط بتون آدرس میدم : صفحه 160 دیتاشیت atmega32 . خودتون برید بخونید و بعد علتش رو بیاید اینجا بگید که چرا ;UCSRC=0x06 درست نیست و این باعث اشتباه بزرگی میشود. اینطوری باب آشنایی شما با رجیسترها فراهم میشه.
          گرچه دوست داشتم همینجا خودتون توضیح بدین که بقیه هم راحتتر استفاده کنن، ولی همین که شماره صفحه دادین هم خوبه

          قامت انسان با لباس انسانیت شکل می گیرد،
          والا مترسک جالیز را هم می توان لباسی فاخر پوشاند

          (عبدالرضا کشاورز)

          دیدگاه


            #35
            پاسخ : مشکل در ارسال اطلاعات با USART

            نوشته اصلی توسط --نیلوفر--
            من میخاستم با اینتراپت بگیرم! مشکل اصلیم هم همین بود! اون ابتکار مسخره ای هم که تو ISR دیدین، واسه حل همین مشکل بود!
            سلام . اصلا ابتکار مسخره ای نبود. خیلی هم خوب بود و کار می کرد. مشکل برنامه شما تو بازسازی دو بایت گرفته شده در گیرنده بود که واسه حل اون مشکل من برنامتونو ادیت کردم (در اصل کارخاصی نکردم ، فقط یه ضرب و جمع بهش اضافه کردم) که به راحتی می شد در روتین اینتراپت هم استفاده بشه. به هرحال من از چهارچوب برنامه خودتون تو گیرنده استفاده کردم و همون ضرب و جمع رو بهش اضافه کردم. فقط قسمت نمایش روی ال سی دی رو به خاطر اینکه روتین اینتراپت سبکتر بشه تو main گذاشتم .
            در مورد فور شیرد هم حق با شماست اما باز متاسفانه روی همون سایت فایل ها رو قرار دادم چون فعلا عضو سایت دیگه ای نیستم!! امیدوارم که عضو باشین.

            http://www.4shared.com/rar/L9YEt2WS/...st_sim_1.html?

            موفق باشید.

            دیدگاه


              #36
              پاسخ : مشکل در ارسال اطلاعات با USART

              نوشته اصلی توسط --نیلوفر--
              گرچه دوست داشتم همینجا خودتون توضیح بدین که بقیه هم راحتتر استفاده کنن، ولی همین که شماره صفحه دادین هم خوبه
              باشه، توضیح میدم ولی خودتون هم حتما برید دیتاشیت رو نگاه کنید :

              با اجرای این دستور ( ;UCSRC=0x06 ) به صورت تئوری و (شاید در عمل در تست به صورت چندبار محدود) بتون درست جواب میده .ولی امکان خطا بسیار زیاد است و اجرای این دستور باعث اشتباه مهلکی میشود.
              ببنید ،رجیسترهای UCSRC و UBBRH دقیقا در یک خانه در sram وجود دارند( به اصل memory i/o map در avr باید توجه داشته باشید) . پس وقتی که ما مقداری درون این خانه میریزیم باید بگونه ای باشد که میکرو بفهمد میخواهید UBRRH را مقدار دهی کنید یا UCSRC .
              به صورت استاندارد در دیتاشیت ذکر شده است که اگر مقدار بیت آخری(بیت 7 ) که درون این خانه میریزید 0 باشد آنگاه رجیستر UBBRH مقداردهی میشود و اگر مقدار بیت آخر 1 باشد UCSRC مقدار دهی میشود . پس مقدار دهی *******UCSRC=0b0 و یا *******UBBRH=0b1 ( * = حالت بی تفاوت ) اشتباه است.

              حالا مقداردهی برنامه ای که به شما دادم :
              کد:
              UCSRC=0x86;
              UBRRH=0x00;
              UBRRL=0x33;
              این به این معنی است که usart را به صورت 8 بیتی ساده با سرعت 9600bps راه اندازی کن(با کلاک میکرو 8 مگاهرتز) . که درست است.

              و حالا اگه اینجوری بود:
              کد:
              UCSRC=0x06;
              UBRRL=0x33;
              خروجیش میشه: usart را به صورت 8 بیتی ساده با سرعت حدودا 314.8bps راه اندازی کن ( با کلاک میکرو 8 مگاهرتز) . که با اینکه سرعت خیلی پایین است ولی خطا بسیار زیاد است.
              ولی تو کد شما چون بعد از UCSRC=0x06 اومده نوشته UBRRH=0x00 . اول خراب کرده بعد دوباره درست کرده ( یعنی کد UCSRC=0x06 عملا هیچ کاری نمیکنه و الکیه(مقدار رجیستر UCSRC مقدار پیشفرض است و عملا دستکاری نمیشود)
              راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
              کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
              نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
              انشالله به زودي تاپيک ها به روز رساني خواهد شد،

              دیدگاه


                #37
                پاسخ : مشکل در ارسال اطلاعات با USART

                سلام . اصلا ابتکار مسخره ای نبود. خیلی هم خوب بود و کار می کرد. مشکل برنامه شما تو بازسازی دو بایت گرفته شده در گیرنده بود که واسه حل اون مشکل من برنامتونو ادیت کردم (در اصل کارخاصی نکردم ، فقط یه ضرب و جمع بهش اضافه کردم) که به راحتی می شد در روتین اینتراپت هم استفاده بشه. به هرحال من از چهارچوب برنامه خودتون تو گیرنده استفاده کردم و همون ضرب و جمع رو بهش اضافه کردم. فقط قسمت نمایش روی ال سی دی رو به خاطر اینکه روتین اینتراپت سبکتر بشه تو main گذاشتم .
                در مورد فور شیرد هم حق با شماست اما باز متاسفانه روی همون سایت فایل ها رو قرار دادم چون فعلا عضو سایت دیگه ای نیستم!! امیدوارم که عضو باشین.

                http://www.4shared.com/rar/L9YEt2WS/serial_test_sim_1.html?

                موفق باشید.
                ممنون از اصلاحیتون.... آخرش هم همون ابتکار خودم شد!
                فقط نمیدونم چرا به ذهنم نرسید که جمع و تفریقهای شما رو خودم اضافه کنم! :surprised:
                قامت انسان با لباس انسانیت شکل می گیرد،
                والا مترسک جالیز را هم می توان لباسی فاخر پوشاند

                (عبدالرضا کشاورز)

                دیدگاه


                  #38
                  پاسخ : مشکل در ارسال اطلاعات با USART

                  با اجرای این دستور ( ;UCSRC=0x06 ) به صورت تئوری و (شاید در عمل در تست به صورت چندبار محدود) بتون درست جواب میده .ولی امکان خطا بسیار زیاد است و اجرای این دستور باعث اشتباه مهلکی میشود.
                  ببنید ،رجیسترهای UCSRC و UBBRH دقیقا در یک خانه در sram وجود دارند( به اصل memory i/o map در avr باید توجه داشته باشید) . پس وقتی که ما مقداری درون این خانه میریزیم باید بگونه ای باشد که میکرو بفهمد میخواهید UBRRH را مقدار دهی کنید یا UCSRC .
                  به صورت استاندارد در دیتاشیت ذکر شده است که اگر مقدار بیت آخری(بیت 7 ) که درون این خانه میریزید 0 باشد آنگاه رجیستر UBBRH مقداردهی میشود و اگر مقدار بیت آخر 1 باشد UCSRC مقدار دهی میشود . پس مقدار دهی *******UCSRC=0b0 و یا *******UBBRH=0b1 ( * = حالت بی تفاوت ) اشتباه است.

                  حالا مقداردهی برنامه ای که به شما دادم :
                  کد: [انتخاب]

                  UCSRC=0x86;
                  UBRRH=0x00;
                  UBRRL=0x33;

                  این به این معنی است که usart را به صورت 8 بیتی ساده با سرعت 9600bps راه اندازی کن(با کلاک میکرو 8 مگاهرتز) . که درست است.

                  و حالا اگه اینجوری بود:
                  کد: [انتخاب]

                  UCSRC=0x06;
                  UBRRL=0x33;

                  خروجیش میشه: usart را به صورت 8 بیتی ساده با سرعت حدودا 314.8bps راه اندازی کن ( با کلاک میکرو 8 مگاهرتز) . که با اینکه سرعت خیلی پایین است ولی خطا بسیار زیاد است.
                  ولی تو کد شما چون بعد از UCSRC=0x06 اومده نوشته UBRRH=0x00 . اول خراب کرده بعد دوباره درست کرده ( یعنی کد UCSRC=0x06 عملا هیچ کاری نمیکنه و الکیه(مقدار رجیستر UCSRC مقدار پیشفرض است و عملا دستکاری نمیشود)
                  ممنون از توضیحات شیواتون...

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

                  (عبدالرضا کشاورز)

                  دیدگاه


                    #39
                    پاسخ : مشکل در ارسال اطلاعات با USART

                    این مقاله را سرچ و دانلود کنید:
                    آموزش میکروکنترلر avr سریع تالیف : رضا سپاس یار

                    درضمن در کنار خوندنش ،دیتاشیت رو هم نگاه بندازید
                    راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                    کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                    نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
                    انشالله به زودي تاپيک ها به روز رساني خواهد شد،

                    دیدگاه


                      #40
                      پاسخ : مشکل در ارسال اطلاعات با USART

                      درود بر دوستان عزیز
                      من می خوام 80 (10 بایت) اطلاعات از طریق سریال انتقال بدم تا 16 بیت مشکل ندارم اما :angry: بعدش اطلاعات قاطی میشه
                      اگه کسی راه حلی داره کمکم کنه ممنون میشم ؟ :nice:
                      با تقدیم احترامات
                      دم همتون گرم
                      داناترین مردم کسی است که دانش مردم را با دانش خود جمع کند
                      پیامبر اکرم (ص)
                      علی ابن ابیطالب : همانا پاداش دانشمند از شخص روزه دار و شب زنده دارکه در راه خدا جهاد می کند بیشتر است
                      اگر میخواهید دشمنان خود را تنبیه کنید به دوستان خود محبت کنید.(کورش کبیر)

                      دیدگاه


                        #41
                        پاسخ : مشکل در ارسال اطلاعات با USART

                        نوشته اصلی توسط eh.sedaghat
                        درود بر دوستان عزیز
                        من می خوام 80 (10 بایت) اطلاعات از طریق سریال انتقال بدم تا 16 بیت مشکل ندارم اما :angry: بعدش اطلاعات قاطی میشه
                        اگه کسی راه حلی داره کمکم کنه ممنون میشم ؟ :nice:
                        با تقدیم احترامات
                        دم همتون گرم
                        سلام

                        سوال خیلی خوبیه:

                        در رابطه با این مشکل:
                        تو همزمان سازی اگه یه اشتباهی رخ بده بعد از فرستادن یه تعداد خاص ، همون طور که فرمودید قاتی پاتی میشه.

                        دو طرفتون میکرو هست؟ از تنظیمات مشابه برای دوطرف انتخاب کردید؟ ( baud rate ) ( کلاک سیستم مشابه؟) ( تو چه مدی استفاده میکنید؟)

                        اگر از همه چیز مطمئنید برای کلاک میکروها میتونید از کریستال های دقیق استفاده کنید.( یکیش که مرسوم تر هست : 11.0592 )

                        برای اطلاع بیشتر به صفحه ی 163 از دیتاشیت مگا32 رجوع کنید.
                        راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                        کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                        نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                        http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
                        انشالله به زودي تاپيک ها به روز رساني خواهد شد،

                        دیدگاه


                          #42
                          پاسخ : مشکل در ارسال اطلاعات با USART

                          نوشته اصلی توسط RubeuS
                          سلام

                          سوال خیلی خوبیه:

                          در رابطه با این مشکل:
                          تو همزمان سازی اگه یه اشتباهی رخ بده بعد از فرستادن یه تعداد خاص ، همون طور که فرمودید قاتی پاتی میشه.

                          دو طرفتون میکرو هست؟ از تنظیمات مشابه برای دوطرف انتخاب کردید؟ ( baud rate ) ( کلاک سیستم مشابه؟) ( تو چه مدی استفاده میکنید؟)

                          اگر از همه چیز مطمئنید برای کلاک میکروها میتونید از کریستال های دقیق استفاده کنید.( یکیش که مرسوم تر هست : 11.0592 )

                          برای اطلاع بیشتر به صفحه ی 163 از دیتاشیت مگا32 رجوع کنید.
                          دوباره سلام
                          ممنون از توجه تون
                          هر دو طرف میکرو هستند یک طرف مگا8 طرف دیگر مگا 128 هر دو هم دریافت و هم ارسال انجام میدن
                          از کریستال 16 مگا استفاده میکنم
                          کمتر نمی تونم چون سرعتم میاد پایین باید برای 16 تا ای سی مگا 8 ارسال کنم سپس متظر دریافت بشم
                          (البته فعلا ارسالم حل بشه بعد میرم سر وقت دریافت)
                          مد هم از 8 بیت ارسال 2 تا استپ بدون پریتی استفاده می کنم .
                          منتظر راهنماییتون هستم............ :question: :wow:
                          با تشکر
                          داناترین مردم کسی است که دانش مردم را با دانش خود جمع کند
                          پیامبر اکرم (ص)
                          علی ابن ابیطالب : همانا پاداش دانشمند از شخص روزه دار و شب زنده دارکه در راه خدا جهاد می کند بیشتر است
                          اگر میخواهید دشمنان خود را تنبیه کنید به دوستان خود محبت کنید.(کورش کبیر)

                          دیدگاه

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