اطلاعیه

Collapse
No announcement yet.

مشکل در دریافت داده از طریق uart

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

    مشکل در دریافت داده از طریق uart

    سلام
    یه مشکل عجیب و غریب :cry:
    میخوام 160 بایت رو در مواقعی از کامپیوتر به avr ارسال کنم و در مواقعی از avr به کامپیوتر.
    زمانی که از میکرو به کامپیوتر ارسال میکنم، داده ها بدون خطا ارسال میشه. اما برای حالت عکس این اتفاق نمیوفته.
    مشکل از کجا میتونه باشه؟!
    گفت که دیوانه نهی لایق این خانه نهی

    #2
    پاسخ : مشکل در دریافت داده از طریق uart

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

    دیدگاه


      #3
      پاسخ : مشکل در دریافت داده از طریق uart

      سلام
      دوستان من میخوام با terminal از کامپیوتر کاراکتر رو با پروتکل UART بفرستم به میکرو که تو LCD نمایش بده ولی کار نمیکنه .و همچنین اگه PINB1==0 کاراکتر O رو تو Terminal نشون بده. ولی تو LCD چیزی ظاهر نمیشه .اما وقتی PINB.1==0 میشه تو Terminal یه سری مقادیر نامفهوم ظاهر میشه.لطفا راهنماییم کنید.اینم از کد c برنامه:

      ************************************************** *****
      <include <mega16a.h#
      <include <delay.h#
      <include <alcd.h#
      <include <stdio.h#


      (void main(void
      }
      ; char data
      ; [char T[10

      ;(DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0
      ;(DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0
      PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (1<<PORTB1) |(0<<PORTB0


      USART initialization//
      Communication Parameters: 8 Data, 1 Stop, No Parity//
      USART Receiver: On//
      USART Transmitter: On//
      USART Mode: Asynchronous//
      USART Baud Rate: 9600//
      ;(UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM
      ;(UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8
      ;(UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL
      ;UBRRH=0x00
      ;UBRRL=0x33


      ;data=UDR


      ;(lcd_init(16
      (while (1
      }
      ;() lcd_clear
      ;(sprintf(T"%d",data
      ;(lcd_puts(T
      ;(delay_ms(20

      {;'if(PINB.1==0){UDR='o
      ;( while(PINB.1==0
      {

      {

      دیدگاه


        #4
        پاسخ : مشکل در دریافت داده از طریق uart

        نوشته اصلی توسط آرال نمایش پست ها
        سلام
        دوستان من میخوام با terminal از کامپیوتر کاراکتر رو با پروتکل UART بفرستم به میکرو که تو LCD نمایش بده ولی کار نمیکنه .و همچنین اگه PINB1==0 کاراکتر O رو تو Terminal نشون بده. ولی تو LCD چیزی ظاهر نمیشه .اما وقتی PINB.1==0 میشه تو Terminal یه سری مقادیر نامفهوم ظاهر میشه.لطفا راهنماییم کنید.اینم از کد c برنامه:

        ************************************************** *****
        <include <mega16a.h#
        <include <delay.h#
        <include <alcd.h#
        <include <stdio.h#


        (void main(void
        }
        ; char data
        ; [char T[10

        ;(DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0
        ;(DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0
        PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (1<<PORTB1) |(0<<PORTB0


        USART initialization//
        Communication Parameters: 8 Data, 1 Stop, No Parity//
        USART Receiver: On//
        USART Transmitter: On//
        USART Mode: Asynchronous//
        USART Baud Rate: 9600//
        ;(UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM
        ;(UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8
        ;(UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL
        ;UBRRH=0x00
        ;UBRRL=0x33


        ;data=UDR


        ;(lcd_init(16
        (while (1
        }
        ;() lcd_clear
        ;(sprintf(T"%d",data
        ;(lcd_puts(T
        ;(delay_ms(20

        {;'if(PINB.1==0){UDR='o
        ;( while(PINB.1==0
        {

        {

        سلام
        اول این که مطمئن بشید باودریت درست تنظیم شده. ثانیا اتصالات رو چک کنید.
        در مورد برنامه هم شما فقط یک بار UDR رو میخونید که زیاد روش درستی استفاده نکردید! طبیعیه که چیزی نشون نده. شما باید فلگ مربوط به دریافت داده رو چک کنید و اگر چیزی دریافت شده بود مقدار UDR رو قرائت و روی LCD نمایش بدید.
        به همین شکل برای ارسال هم باید مطمئن بشید داده قبلی ارسال شده و بعد داده جدید رو داخل UDR قرار بدید. برای این کار هم باید پرچم مناسب رو چک کنید.

        دیدگاه


          #5
          پاسخ : مشکل در دریافت داده از طریق uart

          سلام
          آیا داده ای که terminal میفرسته کد hex هستش ؟

          دیدگاه


            #6
            پاسخ : مشکل در دریافت داده از طریق uart

            نوشته اصلی توسط آرال نمایش پست ها
            سلام
            آیا داده ای که terminal میفرسته کد hex هستش ؟
            داده ای که ترمینال یا هرجای دیگه میفرسته صرفا یک سری 0 و 1 بی معنی هستش که شما قرار داد میکنید این 0 و 1 های ظاهرا بی معنی، چه معنایی در پس خودشون داشته باشن.
            حالا منظورتون از کد hex دقیقا چیه؟

            دیدگاه


              #7
              پاسخ : مشکل در دریافت داده از طریق uart

              برای مثال وقتی حرف A رو با terminal میفرستیم آیا در LCD هم A نمایش داده میشه؟

              دیدگاه


                #8
                پاسخ : مشکل در دریافت داده از طریق uart

                نوشته اصلی توسط آرال نمایش پست ها
                برای مثال وقتی حرف A رو با terminal میفرستیم آیا در LCD هم A نمایش داده میشه؟
                آهان. ببنید ترمینال های سریال چند حالت برای ارسال و نمایش دارن. معمولا به صورت پیش فرض کاراکتری کار میکنن و وقتی شما یک یا چند کاراکتر وارد کنید، کد اسکی اون ها رو به ترتیب ارسال میکنه. یعنی اگر توی این حالت A رو بفرستید، کد اسکی A که عدد 65 باشه رو ارسال میکنه. حالت دیگه ای که دارن، اعداد مبنای 16 یا هگزادسیمال میفرستن. یعنی فقط 0 تا 9 و a تا f رو قبول میکنن. وقتی توی این حالت A وارد کنید، معادل هگزادسیمال اون که عدد 10 باشه ارسال میشه.
                توابع LCD کاراکتری با کد اسکی کار میکن. یعنی برای نمایش A باید بهش کد اسکی اون رو بدید. توی کد بالا شما از این خط استفاده کردید: ;(sprintf(T"%d",data
                توی این خط داده دریافتی به عدد صحیح تبدیل میشه و نمایش داده میشه. یعنی اگر ترمینال شما کد اسکی 65 رو ارسال کنه که معادل کاراکتر A باشه، با این کد شما LCD رو مجبور کردید عدد 65 رو نمایش بده نه کاراکتر A

                دیدگاه


                  #9
                  پاسخ : مشکل در دریافت داده از طریق uart

                  سلام دوستان
                  من میخوام از کامپیوتر با نرم افزارTerminal توسط پروتکل UART کاراکتر بفرستم به میکرو که تو LCD نمایش بده . کد زیر رو هم نوشتم ولی چیزی نشون نمیده .فقط بعضی از اعداد رو که میفرستم مربع نشون میده.خیلی وقته توش گیر کردم .لطفا راهنمایی کنید.



                  (while (1
                  }
                  ;()lcd_clear
                  ;()data=getchar
                  :(lcd_putchar(data
                  ;(delay_ms(200
                  }

                  دیدگاه


                    #10
                    پاسخ : مشکل در دریافت داده از طریق uart

                    ببین تو این پروتکل ارتباطی حتما باید گیرنده و فرستنده از یک نوع بادریت بهره ببرند.دلیلش اینه که بادریتی که شما رد ترمینال کامپیوتر انتخاب کردی با boud rate میکرو تو با هم برابر نیست.
                    سعی کنید این بادریت ها را با هم برابر کنید.و اگه نشد باردیت ها را عوض کنید.افتاد؟
                    eshop-hodhod.ir

                    دیدگاه


                      #11
                      پاسخ : مشکل در دریافت داده از طریق uart

                      نوشته اصلی توسط Namvar14 نمایش پست ها
                      ببین تو این پروتکل ارتباطی حتما باید گیرنده و فرستنده از یک نوع بادریت بهره ببرند.دلیلش اینه که بادریتی که شما رد ترمینال کامپیوتر انتخاب کردی با boud rate میکرو تو با هم برابر نیست.
                      سعی کنید این بادریت ها را با هم برابر کنید.و اگه نشد باردیت ها را عوض کنید.افتاد؟
                      من حتی باود ریت رو هم تغییر دادم ولی درست نشد.

                      دیدگاه


                        #12
                        پاسخ : مشکل در دریافت داده از طریق uart

                        میتونه مشکل از terminal باشه؟

                        دیدگاه


                          #13
                          پاسخ : مشکل در دریافت داده از طریق uart

                          لطفا یه بزرگوار کمکم کنه

                          دیدگاه


                            #14
                            پاسخ : مشکل در دریافت داده از طریق uart

                            نوشته اصلی توسط آرال نمایش پست ها
                            لطفا یه بزرگوار کمکم کنه
                            سلام
                            احتمالا یا اتصالات مشکل دارن یا درایور به درستی نصب نشده.

                            دیدگاه

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