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

موضوع: کمک در ارتباط دو میکرو با usart

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض کمک در ارتباط دو میکرو با usart

    سلام دوستان
    من ميخوام دو تا sam7x256 رو با usart به هم وصل کنم ولي هر کاري ميکنم جواب نميده
    برنامه ام رو ميذارم لطفا کمکم کنيد
    برنامه به اين شکله که هر دوتا ميکرو 0x55 رو بايد براي هم بفرستند و اونا بايد ديتاي دريافتي رو روي tft نمايش بدن
    راستی از برد های آرم اتمل کویر استفاده میکنم
    دو تا برد رو با usart به هم وصل کنم
    لطفا کمکم کنيد
    کد:
    #include <AT91SAM7X256.h>
    #include <delay.h>
    #include "TFTLCD.h"
    #include "nature.h"
    char PORTRAIT = 0; 
    char data;
    //char q = 'B';
    int main(){
    tftlcd_init();
    *AT91C_PMC_PCER = 1<<6;//Enable pmc for usart
    *AT91C_PIOA_PDR =(1<<0|1<<1);//Disable pin0  pin 1	for usart0
    *AT91C_PIOA_ASR =(1<<0|1<<1);//duty a for usart
     //Usart configuration
    *AT91C_US0_CR = 0X88;
    *AT91C_US0_MR = 0x80;                        
    *AT91C_US0_BRGR = 0x4E0;	                  
    *AT91C_US0_CR = 1<<6;
    
    while(1){
     // while (!(*AT91C_US0_CSR & 1<<1));	
        *AT91C_US0_THR = 0x55;
    	delay_ms(50);
       *AT91C_US0_RHR = data;
       tftlcd_putchar(data ,RED,GREEN,1);
       delay_ms(50);
        //tftlcd_putchar(q ,RED,GREEN,1);
       tftlcd_gotoxy(0,0);
    
    }
    }

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

  3. #2
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    بهتره برای پیکربندی بخش های مختلف میکروکنترلر از کد های استاندارد استفاده کنید ، این کد ها در فایل هدر میکروکنترلر وجود داره ، مثلا به جای :
    کد:
    *AT91C_PIOA_PDR =(1<<0|1<<1);//Disable pin0  pin 1    for usart0
    میتونید بنویسید :
    کد:
    *AT91C_PIOA_PDR|=(AT91C_PA0_RXD0 | AT91C_PA1_TXD0|AT91C_PA3_RTS0);
    در زیر پیکربندی صحیح واحد USART1 رو مشاهده میکنید شما متونید این پیکربندی رو با تغییر دادن شماره ی واحد به یک و همچنین شماره پایه ها به یوزارت 0 تغییر بدید )
    کد:
    //*AT91C_PMC_PCER :    (PMC) Peripheral Clock Enable Register for USART0
    *AT91C_PMC_PCER|=(1<<AT91C_ID_US1);    // Enable Clock for USART0    
    *AT91C_PIOA_PDR|=(AT91C_PA5_RXD1 | AT91C_PA6_TXD1|AT91C_PA8_RTS1|AT91C_PA9_CTS1);        //Disable I/O,PA5_RXD1,PA6_TXD1,PA8_RTS1,PA9_CTS1
    *AT91C_PIOA_ASR|=(AT91C_PIO_PA5 | AT91C_PIO_PA6|AT91C_PIO_PA8|AT91C_PIO_PA9); // define     peripheral A select regidtry
    //*AT91C_US0_CR:USART Control Register
    *AT91C_US1_CR=(AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXEN|AT91C_US_TXEN);//RESET UART,  Enable    Receiver & Transmitter
    //*AT91C_US1_IDR:USART Interrupt Disable Register
    *AT91C_US1_IDR = 0xFFFF; // all usart0 interrupts disabled
    //*AT91C_US1_RTOR:USART Receiver Time-out Register
    *AT91C_US1_RTOR = 0; // receiver time-out (disabled)
    //*AT91C_US1_TTGR : USART Transmitter Timeguard Register
    *AT91C_US1_TTGR = 0; // transmitter timeguard (disabled)
    //*AT91C_US1_MR:USART Mode Register
    *AT91C_US1_MR = (AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_FDIV1 |  // 8-bit characters        
    //USART Mode Register=(NORMAL MODE ,  Clock Selection= MCK/DIV (DIV = 8),  
    AT91C_US_CHRL_8_BITS | AT91C_US_NBSTOP_1_BIT);
    //Character Length: 8 bits , 1 stop bit ) Echo,Local Loopback, Remote Loopback. is disable
    // attention :in This  mode if USCLKS does not select the external clock SCK the USART drives the SCK pin (CLKO bit in US0_MR)
    //Oversampling Mode=8 , The NACK is not generated , The USART does not filter the receive line    ,
    //if  you use  other Selected Clock , this  line  is true:
     //*AT91C_US0_BRGR=(((M_crystal*73/14)/2)/usart0_Baud0);            //BARD RATE
    *AT91C_US1_FIDI = 0; // FI over DI Ratio Value (disabled)
    *AT91C_US1_IF = 0; // IrDA Filter value (disabled)
    *AT91C_US1_BRGR=(((18432000*73/14)/2)/16/9600) ;                //BARD RATE
    این پیکربندی رو با کد های خودتون مقایسه کنید تا ببنید پیکربندی به درستی انجام شده یا نه .

    برای دریافت و ارسال اطلاعات هم دو رجیستر مجزا وجود داره که نشون میده بافر ارسال / دریافت داده پر هست یا خالی ، ارسال داده :
    کد:
    while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY));   // Wait for Empty Tx Buffer
      *AT91C_US0_THR = ch;
    برای دریافت داده :
    کد:
    while (!((*AT91C_US0_CSR) & AT91C_US_RXRDY));   // Wait for Empty Rx Buffer
      ch=*AT91C_US0_RHR ;
    شما چرا از کتابخونه ها استفاده نمیکنید ؟

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


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض

    ممنون
    من کد جدیدمو رو میذارم اگه میشه نگاش کنید ببینید مشکلش کجاست؟
    توی شبیه ساز هم بهم جواب نمیده
    کد:
    #include <AT91SAM7X256.h>
    #include <delay.h>
    #include "TFTLCD.h"
    #include "nature.h"
    char PORTRAIT = 0;
    char data; 
    char q='a';
    /////////////////////////////////
    int main(){
    tftlcd_init();
    *AT91C_PMC_PCER|=(1<<AT91C_ID_US0);//Enable pmc for usart
    *AT91C_PIOA_PDR|=(AT91C_PA0_RXD0 | AT91C_PA1_TXD0);//Disable pin0  pin 1	for usart0
    *AT91C_PIOA_ASR =(AT91C_PIO_PA0 | AT91C_PIO_PA1);//duty a for usart
     //Usart configuration
    // *AT91C_US1_CR = 0x88; 
    *AT91C_US0_MR = 0x80;                        
    *AT91C_US1_BRGR=0x4E0;          //BAURD RATE
    //*AT91C_US1_CR = 1<<6; 	                  
    *AT91C_US0_CR=(AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXEN|AT91C_US_TXEN);//RESET UART,  Enable    Receiver & Transmitter
    while(1){
     //while (!(*AT91C_US1_CSR & 1<<1));
    while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY));// Wait for Empty Tx Buffer
       *AT91C_US0_THR = 0x10;
    while (!((*AT91C_US0_CSR) & AT91C_US_RXRDY));   // Wait for Empty Rx Buffer
       data=*AT91C_US0_RHR ;
        delay_ms(50);
      	 tftlcd_putchar(q ,RED,GREEN,1);
        delay_ms(50);
    }
    }
    ////////////////////////////////////////

  6. #4
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    کد جدید :
    کد:
    #include <AT91SAM7X256.h>
    #include "delay.h"
    //#include "TFTLCD.h"
    //#include "nature.h"
    //char PORTRAIT = 0;
    char data; 
    //char q='a';
    /////////////////////////////////
    int main(){
    //tftlcd_init();
    *AT91C_PMC_PCER|=(1<<AT91C_ID_US0);//Enable pmc for usart
    *AT91C_PIOA_PDR|=(AT91C_PA0_RXD0 | AT91C_PA1_TXD0);//Disable pin0  pin 1    for usart0
    *AT91C_PIOA_ASR =(AT91C_PIO_PA0 | AT91C_PIO_PA1);//duty a for usart
     //Usart configuration
    // *AT91C_US1_CR = 0x88; 
    *AT91C_US0_CR=(AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXEN|AT91C_US_TXEN);//RESET UART,  Enable    Receiver & Transmitter
    *AT91C_US0_MR = (AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_FDIV1 |  // 8-bit characters        
    //USART Mode Register=(NORMAL MODE ,  Clock Selection= MCK/DIV (DIV = 8),  
    AT91C_US_CHRL_8_BITS | AT91C_US_NBSTOP_1_BIT);                      
    *AT91C_US0_BRGR=0x4E0;          //BAURD RATE
    //*AT91C_US1_CR = 1<<6;                       
    
    
    while(1){
     //while (!(*AT91C_US1_CSR & 1<<1));
     while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
       *AT91C_US0_THR = data;
    while (!((*AT91C_US0_CSR) & AT91C_US_RXRDY));   // Wait for Empty Rx Buffer
       data=*AT91C_US0_RHR ;
        delay_ms(50);
          // tftlcd_putchar(q ,RED,GREEN,1);
        delay_ms(50);
    }
    }
    ////////////////////////////////////////
    توی خطوط زیر مشکل وجود داشت :
    کد:
    *AT91C_US1_BRGR=0x4E0;          //BAURD RATE
    توی شبیه سازی مقدار نرخ انتقال داده برابر با 300 هست ، ظاهرا یه جای توی محاسبات اشتباه کردید . US0_BRGR با مقدار صحیح مقدار دهی نشده ( البته شاید شما به نرخ 300 نیاز داشته باشید ) .

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


  8. #5
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض

    ممنون
    نه اشتباه محاسباتی کرده بودم
    واقعا ممنون

  9. #6
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض

    دو تا سوال دیگه
    با کدوم دستور میشه عدد دریافت و ارسال کرد و روی tft نمایش داد؟
    توی شبیه ساز کیل هم برنامه رو run میکنم برای من حدود 20 ثانیه طول میکشه تا برنامه کامل جواب بده و
    bude rate به مقدار 9600 برسه؟ در حالی که از زمان شبیه سازی کمتر از یک ثانیه گذشته.(کلا زمان شبیه سازی توی کیل من خیلی کند پیش میره
    مشکل کجاشه؟
    بازم ممنون
    ویرایش توسط Niloufar.Male : 24-11-2013 در ساعت 00:07

  10. #7
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض

    برنامه جدید رو نوشتم
    اگه میشه یه نگاه بهش بندازید
    ببینید مشکلی داره یا نه
    من از برد های آرم اتمل کویر استفاده میکنم
    از برنامم جواب نگرفتم
    کد:
    #include <AT91SAM7X256.h>
    #include <delay.h>
    #include "TFTLCD.h"
    #include "nature.h"
    char PORTRAIT = 0;
    char data; 
    /////////////////////////////////
    int main(){
    tftlcd_init();
    *AT91C_PMC_PCER|=(1<<AT91C_ID_US0);//Enable pmc for usart
    *AT91C_PIOA_PDR|=(AT91C_PA0_RXD0 | AT91C_PA1_TXD0);//Disable pin0  pin 1	for usart0
    *AT91C_PIOA_ASR =(AT91C_PIO_PA0 | AT91C_PIO_PA1);//duty a for usart
     //Usart configuration
    *AT91C_US0_CR=(AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXEN|AT91C_US_TXEN);//RESET UART,  Enable    Receiver & Transmitter
    *AT91C_US0_MR = (AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_FDIV1 |  // 8-bit characters        
    //USART Mode Register=(NORMAL MODE ,  Clock Selection= MCK/DIV (DIV = 8),  
    AT91C_US_CHRL_8_BITS | AT91C_US_NBSTOP_1_BIT);                      
    *AT91C_US0_BRGR=0x27;          //BAURD RATE
    while(1){
     //while (!(*AT91C_US1_CSR & 1<<1));
    
    while (!((*AT91C_US0_CSR) & AT91C_US_RXRDY));   // Wait for Empty Rx Buffer
       data=*AT91C_US0_RHR ;
        delay_ms(50);
    	while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY));// Wait for Empty Tx Buffer
       *AT91C_US0_THR = 0x55;
    }
    }
    ////////////////////////////////////////

  11. #8
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    برنامه برای من بدون هیچ مشکلی کار میکه و سریع جواب میده . بهتره کل پروژه رو ارسال کنید ، من فایل های TFTLCD.h و nature.h رو ندارم و اونا رو از سورس حذف میکنم ، شاید توی این فایل ها دستوراتی باشه که سرعت اجرا رو کم میکنه ، شاید هم سرعت کامپیوترتون پایینه .
    چرا شما از کتابخونه ی USART.H استفاده نمیکنید ؟

  12. #9
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض

    اول ممنون از جواب
    فایل ها رو ضمیمه میکنم
    ولی برای خیلی از برنامه ها که دیدم سرعت usart خیلی خوب و منطقی هست
    دلم میخوا از tft استفاده کنم تا بفهمم برنامه داره درست اجرا میشه و اون عبارت های ارسالی دقیقاا همون ها هستند
    اگه میشه به اون برنامه tft رو هم اضافه کنید
    شاید مشکل از خطوط tft هست
    یه سوال دیگه هم دارم
    شما از کجا میدونید برنامه تون درست اجرا میشه؟من از طریق tft این کار رو میکنم
    اگه راه ساده تری هم وجود داره
    ممنون میشم اگه بهم بگید
    ویرایش توسط Niloufar.Male : 24-11-2013 در ساعت 17:28

  13. #10
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض

    آقای 1nafar توی آپلود فایل ها بهم ارور میگیره
    اون کتابخونه ها داخل سیدی کتاب ارم شرکت کویر بود
    یه برنامه دیکه هم نوشتم اگه میشه یه نگاه بهش بندازید ببینید مشکل داره یانه
    کد:
    #include <AT91SAM7X256.h>
    #include <delay.h>
    #include "TFTLCD.h"
    #include "nature.h"
    char PORTRAIT = 0;
    char data;
    /////////////////////////////////
    int main(){
    tftlcd_init();
    *AT91C_PMC_PCER|=(1<<AT91C_ID_US0);//Enable pmc for usart
    *AT91C_PIOA_PDR|=(AT91C_PA0_RXD0 | AT91C_PA1_TXD0);//Disable pin0  pin 1	for usart0
    *AT91C_PIOA_ASR =(AT91C_PIO_PA0 | AT91C_PIO_PA1);//duty a for usart
     //Usart configuration
    *AT91C_US0_CR=(AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXEN|AT91C_US_TXEN);//RESET UART,  Enable    Receiver & Transmitter
    *AT91C_US0_MR = (AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_FDIV1 |  // 8-bit characters        
    //USART Mode Register=(NORMAL MODE ,  Clock Selection= MCK/DIV (DIV = 8),  
    AT91C_US_CHRL_8_BITS | AT91C_US_NBSTOP_1_BIT);                      
    *AT91C_US0_BRGR=0x27;          //BAURD RATE
    while(1){
    // while (!(*AT91C_US1_CSR & 1<<1));
    
    while (!((*AT91C_US0_CSR) & AT91C_US_RXRDY));   // Wait for Empty Rx Buffer
       data=*AT91C_US0_RHR ;
       tftlcd_putchar(data,BLUE,GREEN,1);
        delay_ms(50);
    	while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY));// Wait for Empty Tx Buffer	
       *AT91C_US0_THR = 0x55;
    }
    }
    ////////////////////////////////////////
    ویرایش توسط Niloufar.Male : 24-11-2013 در ساعت 17:52

  14. #11
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    همون طور که قبلا هم گفتم من به سخت افزار و فایل های TFTLCD.h و nature.h دسترسی ندارم .
    ولی برای خیلی از برنامه ها که دیدم سرعت usart خیلی خوب و منطقی هست
    دلم میخوا از tft استفاده کنم تا بفهمم برنامه داره درست اجرا میشه و اون عبارت های ارسالی دقیقاا همون ها هستند
    اگه میشه به اون برنامه tft رو هم اضافه کنید
    شاید مشکل از خطوط tft هست
    یه سوال دیگه هم دارم
    شما از کجا میدونید برنامه تون درست اجرا میشه؟من از طریق tft این کار رو میکنم
    اگه راه ساده تری هم وجود داره
    ممنون میشم اگه بهم بگید
    من از شبیه ساز keil استفاده میکنم ، برای کسب اطلاعات بیشتر مجله ی شماره ی6-7 رو دانلود کنید :
    دانلود : مجله تخصصی میکروکنترلر شماره 6-7 - ایـــــــــران میـــــــکرو ™
    در ضمن بهتره فعلا از کتابخونه برای راه اندازی بخش های مختلف میکروکنترلر استفاده کنید و بعد از یادگیری نحوه ی کار به سراغ استفاده ی مستقیم از رجیستر ها برید .

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


  16. #12
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    61
    تشکر
    14
    تشکر شده 4 بار در 4 پست

    پیش فرض

    من اون کتابخونه رو راه اندازی کردم و هیچ مشکلیی نداشتم
    همون بار اول هم ازش جواب گرفتم
    توی اون برنامه اصلی هم توی شبیه سازی جواب میگیرم
    ولی توی واقعیت نه.
    ویرایش توسط Niloufar.Male : 25-11-2013 در ساعت 16:40

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

  1. کمک در مورد واحد usart
    توسط amiray در انجمن AVR
    پاسخ: 15
    آخرين نوشته: 06-01-2014, 14:26
  2. کمک در مورد usart
    توسط mahdi_6739 در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 01-10-2012, 11:06
  3. مدباس و usart
    توسط ali_73909 در انجمن میکروکنترلرهای 8و16 بیتی
    پاسخ: 0
    آخرين نوشته: 23-08-2012, 05:22
  4. مشکل در usart
    توسط barat در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 21-05-2012, 19:48

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

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