اطلاعیه

Collapse
No announcement yet.

مشکل ارتباط سریال

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

    مشکل ارتباط سریال

    سلام دوستان
    کابل مبدل usb به سریال 3 سیمه PL2303HX USB To از سایت خریدم و مستقیم به میکرو و کامپیوتر وصل کردم با باودریت 9600 وتنظیمات پیشفرض
    تو حلقه while متغییر ;int b=55 رو هر سه ثانیه به کامپیوتر ارسال میکردم مشکل اینه ترمینال امیلاتور کدویژن فقط کد هگز میخونه(65 65 c1) که نمیتونم بفهمم چیه و کد اسکی نمیخونه
    دوستان یکی بگه مشکل چیه :angry:
    کد:
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x06;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    while (1)
       {
    
         delay_ms(2000);
         printf("a%d",b);
    
    
    
       }
     }
    با متلب هم اطلاعات رو خوندم یک رشته چرت وپرت بهم داد: "ÁeeÁueÁee&a mp;Aacute;euÁee"


    کد:
    clear;close all;clc
    ch=serial('com7');
    set(ch,'BaudRate',9600)
    try
    fopen(ch)
    data=fscanf(ch)
    fclose(ch)  
    catch
      data=fscanf(ch,'%s')
      fclose(ch) 
      delete(ch)
      clear(ch)
    end

    #2
    پاسخ : مشکل ارتباط سریال

    سلام نمیدونم چرا ولی جالبه که اطلاعات رو با 0x30 تا شیفت تو جدول اسکی دریافت میکنید
    نرم افزار Hercules ترمینال خوبی داره به نظرم یه تست با اون بگیرید

    head<=
    ...تشکر خدا...
    [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

    دیدگاه


      #3
      پاسخ : مشکل ارتباط سریال

      شما هم توی متلب و هم ترمینال ایمولاتور کدویژن درست دریافت میکنی (0xc1-0x65-0x65) = ('Á'-'e'-'e&#039
      ایراد کار احتمالاً مربوط به کریستال شما هست . مقدارش چقدره ؟
      فیوز بیت ها درست set شده ؟
      از کریستال 11.059200 استفاده کنید و فیوزبیت های CKSEL , SUT را تماماً 1 قرار دهید (و یا کریستال را بالای 4 مگ قرار بدهید)

      موفق باشید
      امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

      دیدگاه


        #4
        پاسخ : مشکل ارتباط سریال

        اقا من با باود ریت 300 جواب گرفتم
        حالا من باید از کریستال خارجی استفاده کنم تا باودریت را زیادکنم
        فیوزبیت برای کریستال8و4 چی باید باشه

        دیدگاه


          #5
          پاسخ : مشکل ارتباط سریال

          نوشته اصلی توسط Abbas Sarami
          شما هم توی متلب و هم ترمینال ایمولاتور کدویژن درست دریافت میکنی (0xc1-0x65-0x65) = ('Á'-'e'-'e&#039
          ایراد کار احتمالاً مربوط به کریستال شما هست . مقدارش چقدره ؟
          فیوز بیت ها درست set شده ؟
          از کریستال 11.059200 استفاده کنید و فیوزبیت های CKSEL , SUT را تماماً 1 قرار دهید (و یا کریستال را بالای 4 مگ قرار بدهید)

          موفق باشید

          اقا من با باود ریت 300 جواب گرفتم
          حالا من باید از کریستال خارجی استفاده کنم تا باودریت را زیادکنم
          فیوزبیت برای کریستال8و4 خارجی چی باید باشه؟

          فیوزبیت SUT برای تنظیم چیه

          از همکاریتون متشکرم

          دیدگاه


            #6
            پاسخ : مشکل ارتباط سریال

            برای 8MHz داخلی :
            CKSEL = 0100
            SUT = 10
            ----------------------------
            برای 4MHz داخلی :
            CKSEL = 0011
            SUT = 10
            ----------------------------
            برای 4-8 مگا هرتز خارجی (کریستال):
            CKSEL = 1101
            SUT = 11
            ----------------------------
            برای کریستال 11.0592MHz (مناسب برای سریال):
            CKSEL = 1111
            SUT = 11

            موفق باشید
            امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

            دیدگاه


              #7
              پاسخ : مشکل ارتباط سریال

              نوشته اصلی توسط Abbas Sarami
              برای 8MHz داخلی :
              CKSEL = 0100
              SUT = 10
              ----------------------------
              برای 4MHz داخلی :
              CKSEL = 0011
              SUT = 10
              ----------------------------
              برای 4-8 مگا هرتز خارجی (کریستال):
              CKSEL = 1101
              SUT = 11
              ----------------------------
              برای کریستال 11.0592MHz (مناسب برای سریال):
              CKSEL = 1111
              SUT = 11

              موفق باشید

              اقا خیلی باحالی مشکلاتم حل شد
              حالا باید یه عدد از متلب بفرستم وocr1 را بربر اون قرار بدم
              ایا میتونم عدد دهدهی از متلب بفرستم به پورت سریال و تو میکرو به نام ocr1 اسکنش کنم (scanf ( "%2d" ,ocr1

              دیدگاه


                #8
                پاسخ : مشکل ارتباط سریال

                سلام من با کریستال داخلی1 , و باود ریت 300
                برنامه ساده زیر را نوشتم ودر محیط ترمینال کدویژن اجرا کردم متاسفانه هر عدد hex که ارسال کنم همیشه کد اسکی a=1118 را در ترمینال کد ویژن دریافت میکنم :angry: :angry: :angry: oo: :
                آیا دستور scanf را اشتباه نوشتم؟؟؟؟؟؟؟؟؟؟
                از توجهتون متشکرم
                کد:
                
                void main(void)
                {
                // Declare your local variables here
                char enter=13;
                 int a=2;
                
                
                PORTB=0x00;
                DDRB=0xFF;
                
                // USART initialization
                // Communication Parameters: 8 Data, 1 Stop, No Parity
                // USART Receiver: On
                // USART Transmitter: On
                // USART Mode: Asynchronous
                // USART Baud Rate: 300
                UCSRA=0x00;
                UCSRB=0x18;
                UCSRC=0x86;
                UBRRH=0x00;
                UBRRL=0xCF;
                
                while (1)
                   {
                
                     delay_ms(2000);
                     scanf("%d",&a);
                     delay_ms(100);
                     printf("a=%d",&a);
                     PORTB=a;
                
                   }
                 }

                دیدگاه


                  #9
                  پاسخ : مشکل ارتباط سریال

                  نیازی به & در تابع printf نیست
                  کد:
                       printf("a=%d",a);
                  امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                  دیدگاه


                    #10
                    پاسخ : مشکل ارتباط سریال

                    نوشته اصلی توسط Abbas Sarami
                    نیازی به & در تابع printf نیست
                    کد:
                         printf("a=%d",a);

                    البته کریستال رو 11.0592 گذاشتم وفیوزبیت رو تنظیم کردم تا ارتباط بخوبی برقرار شد و تونستم رشته ارسالی از کامپیوتر را دریافت کنم ولی برای ارسال عدد صحیح از ترمینال کدویژن و بسکام کماکان مشکل دارم و هر دفعه یک عدد ثابت متفاوت مثلا 90 به ازای فشردن کلید 5 دریافت میکنم
                    کسی میدونه برنامه ساده زیر چ مشکلی داره
                    :angry: :angry: :angry:
                    در حقیقت میخام یه عدد اینتیجر در فرمت هگز از کامپیوتر به میکرو بدم ولی نمیتونم
                    کد:
                    void main(void)
                    {
                    // Declare your local variables here
                     int a;
                    
                    PORTB=0x00;
                    DDRB=0xFF;
                    
                    // USART initialization
                    // Communication Parameters: 8 Data, 1 Stop, No Parity
                    // USART Receiver: On
                    // USART Transmitter: On
                    // USART Mode: Asynchronous
                    // USART Baud Rate: 9600
                    UCSRA=0x00;
                    UCSRB=0x18;
                    UCSRC=0x86;
                    UBRRH=0x00;
                    UBRRL=0x47;
                    while (1)
                       {
                    
                         delay_ms(2000);
                         scanf("%d",a);
                         delay_ms(100);
                         printf("a=%d",a);
                         PORTB=a;

                    دیدگاه


                      #11
                      پاسخ : مشکل ارتباط سریال

                      کد:
                           delay_ms(2000);
                           scanf("%d",&a);
                           delay_ms(100);
                           printf("a=%d",a);
                           PORTB=a;
                      امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                      دیدگاه

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