NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 1927 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 9 از 9

موضوع: استفاده همزمان از دو پورت uart در atmega 2560

  1. #1
    تازه وارد
    تاریخ عضویت
    Apr 2014
    نوشته ها
    4
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض استفاده همزمان از دو پورت uart در atmega 2560

    سلام بر دوستان و اساتید گرامی
    من واسه یک پروژه لازم دارم که همزمان از دوتا پورت سریال میکرو atmega2560 استفاده کنم
    اما زمانی که از دستورات printf(...)
    و دستورات مربوط به پورت سریال جهت ارسال و دریافت اطلاعات استفاده میکنم
    به صورت پیش فرض این دستورات روی پورت USART0
    کار می کنند و نمیتونم واسه USART2 یا بقیه پورت های سریال با این دستور هادیتا ارسال و دریافت کنم؟
    کسی راه حل این موضوع رو میدونه؟
    کامپایلر من کدویژن هست
    با تشکر
    ویرایش توسط reza3sw : 15-06-2017 در ساعت 13:48

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    تعریف شده که وقتی از printf استفاده شود فراخوانی تابع UART0 انجام شود.
    می توان به طور مستقیم از توابعی که با سریال ارسال رشته می کنند دیتا بفرستید و جایی خواستید ارسال متن متغییر کنید از sprintf استفاده کنید. به این ترتیب تمام سریال ها را با توابع خودشان استفاده می کنید. مثلا :
    USART0_SendString
    USART1_SendString
    ...

  4. تشکرها از این نوشته :


  5. #3
    کاربر فعال
    تاریخ عضویت
    Mar 2011
    نوشته ها
    131
    تشکر
    38
    تشکر شده 45 بار در 37 پست

    پیش فرض

    سلام منم یه مشکل مشابه دارم من یه سیستم دارم که باید اعداد هگز و به فرمت 0x--بهش بدم حالا وقتی عدد ثابت هست راحت هست ولی دوتا پارامترش متغییر هست که اگر می تونستم از تابع printf استفاده کنم با این خط برنامه printf("%x", str[i]); مشکل حل بود ولی من این تابع رو ندارم رو پورت سریالم کسی می تونه کمک کنه؟

  6. #4
    تازه وارد
    تاریخ عضویت
    Apr 2014
    نوشته ها
    4
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام و تشکر از پاسختون
    اما من متوجه نشدم
    یعنی اگه بخام روی usart1 یک دیتایی رو بفرستم
    با sprintf میشه؟
    چون تا جایی که اطلاع دارم
    که نمیدونم صحیحه یا غلط
    این دستور یک رشته رو تووی متغیر استرینگ چاپ میکنه و بعد از اینکه اینکار انجام شد با دستور printf
    مقدار اون متغیر رو به سریال میفرستن

  7. #5
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    چه لزومی دارد حتما از printf استفاده کنید!؟ اگر این دستور نبود چگونه می خواستید دیتا را رجیستر دیتای مربوطه در واحد سریال قرار دهید؟
    نقل قول نوشته اصلی توسط reza3sw نمایش پست ها
    این دستور یک رشته رو تووی متغیر استرینگ چاپ میکنه و بعد از اینکه اینکار انجام شد
    ذکر شد که :
    تمام سریال ها را با توابع خودشان می توانید استفاده می کنید. مثلا تابعی درست کنید با این نام ها:

    ()USART0_SendString
    ()USART1_SendString

  8. #6
    تازه وارد
    تاریخ عضویت
    Apr 2014
    نوشته ها
    4
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

    آقا ممنون از لطفتون🎁🎁
    فهمیدم چی شد

  9. #7
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    سلام. منم همین مشکل رو با بسکام دارم اما به طریقی دیگه. من برای دریافت دیتا از دو یو آرت مشکل دارم. کلا uart0 کار میکنه اما بقیه دریافتی ندارن
    با استفاده از این کدها
    کد:
    Open "comh.1:9600,8,n,1" For Output As #1
    Open "come.1:9600,8,n,1" For Input As #2
    Open "comd.2:9600,8,n,1" For Input As #3
    فعالش کردم و یا اینطوری
    کد:
    'Config Com1 = 9600 , Parity = None , Stopbits = 1 , Databits = 8
    'Open "com1:" For Binary As #3
    برای خوندن هم از دستور
    b=udr1()
    یا
    b=inkey(#3)
    یا
    b=waitkey(#3) هم استفاده کردم برای دریافت دیتا اما به نتیجه ای نرسیدم .
    از atmega2560 هم دارم استفاده میکنم

  10. #8
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    دوستان لطفا یکی به دادم برسه

  11. #9
    کاربر علاقه مند omidctrl آواتار ها
    تاریخ عضویت
    Apr 2014
    نوشته ها
    83
    تشکر
    14
    تشکر شده 38 بار در 34 پست

    پیش فرض

    سلام. من این برنامه زیر رو برای کار با دو پورت سریال Atmega64 نوشتم. هم تو شبیه سازی و هم در عمل جواب داد و مشکلی نبود. گفتم ممکنه بکار شما بیاد، هر چند میکروتون فرق میکنه.
    فقط برنامه کامل نیست، قسمت های مربوط به کار با سریال رو گذاشتم. از وقفه سریال هم برای چک کردن دریافت داده استفاده کردم و اینکه میدونستم بیت های شروع و پایان داده چی هستن.
    امیدوارم مشکلتون حل بشه.

    Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    On Urxc lable1
    On Urxc1 lable2

    do
    Enable Interrupts
    Enable Urxc
    Enable Urxc1
    loop

    lable1:
    Open "com1:" For Binary As #1
    Rec = Inkey(#1)
    پس از خواندن تمام داده ها
    Disable Interrupts
    Disable Urxc
    Disable Urxc1
    Close #1
    Return

    lable2:
    Open "com2:" For Binary As #2
    Rec = Inkey(#2)
    پس از خواندن تمام داده ها
    Disable Interrupts
    Disable Urxc
    Disable Urxc1
    Close #2
    Return

موضوعات مشابه

  1. ارتباط بین lpc1768 و atmega 8 از طریق uart
    توسط milad_elect در انجمن LPC series (NXP)
    پاسخ: 5
    آخرين نوشته: 26-09-2015, 16:23
  2. پاسخ: 1
    آخرين نوشته: 29-08-2015, 00:34
  3. تبدیل پایه های پورت به uart
    توسط gbg در انجمن AT91 series (ATMEL)
    پاسخ: 6
    آخرين نوشته: 26-09-2013, 22:45
  4. نحوه اتصال 10 سنسور به میکروکنترلر 2560
    توسط hamedafb در انجمن مفاهیم اولیه در رباتیک
    پاسخ: 16
    آخرين نوشته: 21-09-2011, 16:05

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •