اطلاعیه

Collapse
No announcement yet.

مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

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

    مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

    سلام

    این سورس کد avr :
    کد:
    [left]#include <avr/io.h>
    #include <stdio.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    static int uart_putchar(char c, FILE *stream);
    static FILE uart_stdout = FDEV_SETUP_STREAM(uart_putchar, NULL,
                           _FDEV_SETUP_WRITE);
    
    static int uart_putchar(char c, FILE *stream)
    {
     if (c == '\n')
      uart_putchar('\r', stream);
     loop_until_bit_is_set(UCSRA, UDRE);
     UDR = c;
     return 0;
    }
    
    void USARTInit(uint16_t ubrr_value)
    {
    	UBRRH=0x0;
    	UBRRL=ubrr_value; //set BAUDRATE to 19200 bps FOR 4Mhz OSC
    	
    	/*ASYNCHRONOUSE_8BIT_NO PARITY_1STOP*/
    	UCSRC = ((1<<URSEL)|(3<<UCSZ0));
    	UCSRB=(1<<RXEN)|(1<<TXEN);
    }
    int main()
    {
    	USARTInit(51);		//UBRR = 51
    
    	while(1)
    	{
    		stdout = &uart_stdout;
    		printf("hello world!");
    		_delay_ms(2000);
    
    	}
    	return 0;
    }[/left]
    طبق این برنامه هر دوثانیه یکبار باید رشته "hello world!" از طریق پورت RS232 برای کامپیوتر ارسال بشه و باید همه اطلاعات به صورت یک رشته 12 بایتی برسه اما توی pc این اطلاعات دریافت میشه:
    کد:
    "h" ( 1 bytes)
    "e" ( 1 bytes)
    "l" ( 1 bytes)
    "l" ( 1 bytes)
    "o" ( 1 bytes)
    "w" ( 1 bytes)
    "o" ( 1 bytes)
    "r" ( 1 bytes)
    "l" ( 1 bytes)
    "d" ( 1 bytes)
    "!" ( 1 bytes)
    یعنی رشته بافر نمیشه و به صورت بایت به بایت ارسال میشه!

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

    در ضمن مشکل از برنامه port listener نیست

    آی سی هم atmega8 هست


    پیشاپیش ممنون

    #2
    پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

    هیچ مشکل خاصی نیست

    فقط شما باید اطلاعات رو تو کامپیوتر تو یه رشته string بریزی و سپس ازش استفاده کنی

    میتونی تو میکرو هم به جای اینکه کاراکتر بفرستی کد اسکی معادلشو بفرستی تا تو کامپیوتر احتیاج به تبدیل نداشته باشی

    اما اگه برنامه تبدیل رو به کامپیوتر محول کنی و میکرو رو خلوت تر کنی بهتره

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

    دیدگاه


      #3
      پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

      میتونی تو میکرو هم به جای اینکه کاراکتر بفرستی کد اسکی معادلشو بفرستی تا تو کامپیوتر احتیاج به تبدیل نداشته باشی
      میشه بیشتر توضیح بدی؟ کد اسکی معادل چیو بفرستم؟

      دیدگاه


        #4
        پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

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

        دیدگاه


          #5
          پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

          شما باید خودت این اطلاعات رو توی رشته بریزی چون در کامپیوتر و میکرو متغیری از نوع String عملاً وجود نداره و وتغیرهای string همه آرایه ای از کاراکترها هستند. شما برنامه ای که توی کامپیوتر نوشتی رو بزار تا ببینیم مشکل چیه.
          در ضمن شما برنامتو با هایپر ترمینال تست کن نباید مشکلی باشه.

          دیدگاه


            #6
            پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

            مرسی از همه دوستان
            من خودم رشته ام کامپیوتره و برنامه نویسی رو خوب بلدم و میدونم که میشه کاراکترها رو تو یه متغیر بافر کرد و بعد نمایش داد
            ولی تابع printf که در برنامه چیپ استفاده شده کارش اینه که کاراکترها رو تا رسیدن به کاراکتر NULL بافر کنه و بعد ارسال کنه
            یعنی با یک بار receive کردن کل اطلاعات به صورت چندباتی به کامپیوتر منتقل بشه
            من همچین چیزیو قبلا دیده بودم! یعنی با همین برنامه ای که تو pc نوشتم اطلاعات رو به صورت یکجا(multi byte) دریافت میکرد !
            البته نوع آی سیش فرق میکرد.
            اینجا رو ببینید : http://www.eit.lth.se/fileadmin/eit/courses/edi021/AVR-libc-1.6.4/group__avr__stdio.html

            دیدگاه


              #7
              پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

              اینم اسکرین شات از برنامه:

              دیدگاه


                #8
                پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

                مشکل از برنامه ای است که برای کامپیوتر نوشتید, قسمت مربوط به پورت برنامتون رو اینجا بزارید.
                من همچین چیزیو قبلا دیده بودم! یعنی با همین برنامه ای که تو pc نوشتم اطلاعات رو به صورت یکجا(multi byte) دریافت میکرد !
                میکرو اطلاعات رو به صورت بایت به بایت میفرسته و اینطور نیست که بصورت یک بافر یا آرایه ای از بایت ها اینارو بفرسته بافر شدن اطلاعات در کامپیوتر انجام میشه.

                دیدگاه


                  #9
                  پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

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

                  مرسی از همه دوستان

                  دیدگاه


                    #10
                    پاسخ : مشکل با ارسال و دریافت اطلاعات چندبایتی با USART

                    دوستان مشکل از مبدل usb به com بود!
                    گفتم بگم شاید یکی دیگه بعدا به این مشکل برخورد کنه

                    مرسی از همه

                    دیدگاه

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