اطلاعیه

Collapse
No announcement yet.

کوچ کردن از کدویژن به AtmelStudio

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

    پاسخ : کوچ کردن از کدویژن به AtmelStudio

    سلام خدمت دوستان عزیز،
    من یه مشکل اساسی کلاً با راه اندازی USART با ATMEL Studio دارم که کلاً بیزارم کرده ازش :|
    اینقد که من سر usart با اتمل اذیت شدم سر راه انداختن usart همراه با وقفه و dma توی armها اذیت نشدم!
    البته فک کنم بیشتر مشکلم با رشته ها باشه!
    این برنامه مشکلش چطور حل میشه؟
    [code=c]
    #include <avr/io.h>
    //#include <avr/iom8a.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include "avrlibdefs.h"
    #include "global.h"
    #include <stdio.h>
    #include <string.h>

    /* Global Variables Declaration */
    char rc_data;
    char i = 0;

    /* Function Declaration */
    void MicroInit(void);
    void usartSend(const char *strr);
    unsigned char intvalue(char ch);

    ISR (USART__RXC_vect)
    {
    while(!(UCSRA & (1<<RXC)));
    rc_data = UDR;
    UCSRA|=(1<<RXC);
    }

    int main(void)
    {
    /* Local Variables Declaration */
    unsigned char j;
    char *m_rx_buffer;

    MicroInit();

    sei();

    usartSend("Test\r\n"
    _delay_ms(400);

    while(1)
    {
    if (rc_data != 0)
    {
    usartSend(rc_data);
    rc_data = 0;
    }
    PORTB = ~PORTB;
    _delay_ms(200);
    }
    }

    void MicroInit(void)
    {
    /* Ports Configuration */
    PORTB = 0x00;
    DDRB = 0x01;
    PORTC = 0x18;
    DDRC = 0x08;
    PORTD = 0x04;
    DDRD = 0x00;
    /* USART Initialization */
    UCSRB = (0<<TXCIE) | (1<<TXEN) | (1<<RXCIE) | (1<<RXEN);
    UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0) ;
    UBRRL = 0x19;
    }

    void usartSend(const char *strr)
    {
    while (*strr)
    {
    UDR = *strr;
    strr++;
    while(!(UCSRA & (1<<TXC)));
    UCSRA|=(1<<TXC);
    }
    }

    [/code]

    همونطور که میبینین در همین کمترین حالتش هم جواب نمیده برنامه!

    - - - - = بعد ویرایش = - - - -
    باودریت میکرو رو 19200 گذاشتم و از یک مگا8ای و کریستال 8مگ استفاده میکنم.

    «پشتکار» «پشتکار» «پشتکار»

    دیدگاه


      پاسخ : کوچ کردن از کدویژن به AtmelStudio

      نوشته اصلی توسط کنجکاو!
      سلام خدمت دوستان عزیز،
      من یه مشکل اساسی کلاً با راه اندازی USART با ATMEL Studio دارم که کلاً بیزارم کرده ازش :|
      اینقد که من سر usart با اتمل اذیت شدم سر راه انداختن usart همراه با وقفه و dma توی armها اذیت نشدم!
      البته فک کنم بیشتر مشکلم با رشته ها باشه!
      این برنامه مشکلش چطور حل میشه؟
      کد:
      #include <avr/io.h>
      //#include <avr/iom8a.h>
      #include <util/delay.h>
      #include <avr/interrupt.h>
      #include "avrlibdefs.h"
      #include "global.h"
      #include <stdio.h>
      #include <string.h>
      
      /* Global Variables Declaration */
      char rc_data;
      char i = 0;
      
      /* Function Declaration */
      void MicroInit(void);
      void usartSend(const char *strr);
      unsigned char intvalue(char ch);
      
      ISR (USART__RXC_vect)
      {
      	while(!(UCSRA & (1<<RXC)));
      	rc_data = UDR;	
      	UCSRA|=(1<<RXC);
      }
      
      int main(void)
      {
      	/* Local Variables Declaration */
      	unsigned char j;
      	char *m_rx_buffer;
      	
      	MicroInit();
      	
      	sei();
      	
      	usartSend("Test\r\n");
      	_delay_ms(400);
      	
        while(1)
        {
          if (rc_data != 0)
          {
      			usartSend(rc_data);
      				rc_data = 0;
      		}							
      		PORTB = ~PORTB;
      		_delay_ms(200);
        }
      }
      
      void MicroInit(void)
      {
      	/* Ports Configuration */
      	PORTB = 0x00;
      	DDRB = 0x01;
      	PORTC = 0x18;
      	DDRC = 0x08;
      	PORTD = 0x04;
      	DDRD = 0x00;
      	/* USART Initialization */
      	UCSRB = (0<<TXCIE) | (1<<TXEN) | (1<<RXCIE) | (1<<RXEN);
      	UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0) ;
      	UBRRL = 0x19;
      }
      
      void usartSend(const char *strr)
      {
      	while (*strr)
      	{
      		UDR = *strr;
      		strr++;
      		while(!(UCSRA & (1<<TXC)));
      		UCSRA|=(1<<TXC);
      	}	
      }
      همونطور که میبینین در همین کمترین حالتش هم جواب نمیده برنامه!

      - - - - = بعد ویرایش = - - - -
      باودریت میکرو رو 19200 گذاشتم و از یک مگا8ای و کریستال 8مگ استفاده میکنم.
      سلام
      این رشته ای که واسه ارسال میفرستید خیلی کوتاهه...نباید مشکل داشته باشه...شما از Polling استفاده میکنید که من با این روش یه جمله خیلی طولانی رو راحت ارسال میکنم اونم رشته ای که داخل فلش سیو شده...از اینتراپت که استفاده میکنم واسه جمله های در حد 30تا کاراکتر خوب ارسال میشه ولی وقتی تعداد کاراکترها خیلی بیشتر میشه نمیدونم چی میشه که بعضی قسمتها رو ارسال نمیکنه...باود ریت 9600و کریستال 8 مگ گذاشتم....

      تو یه تاپیک دیگه بحث سر همین مشکل شما بود که بعد معلوم شد خود میکرو مشکل دار بوده...شما با یه میکرو دیگه هم تست کردید؟
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


      ساخت کنترلر دما PID فازی با AVR [آموزشی]

      دیدگاه


        پاسخ : کوچ کردن از کدویژن به AtmelStudio

        آره، قبلاً با مگا16 هم تست کردم این مشکل بود! الان همین برنامه تو پروتئوس هم جواب نمیده
        توی ارسال یک رشته ی از پیش مشخص شده مشکلی نداره
        توی ارسال کاراکتر یا رشته دریافتی (یا شاید هم اصن دریافت رشته) مشکل داره!

        «پشتکار» «پشتکار» «پشتکار»

        دیدگاه


          پاسخ : کوچ کردن از کدویژن به AtmelStudio

          در وقفه دریافت که دیگه while(!(UCSRA & (1<<RXC))); را نمیخواد! وقفه موقعی رخ میده که دریافت تکمیل شده باشه
          دلیل این کار را هم نفهمیدم چیه UCSRA|=(1<<TXC);
          یادم رفت بگم : کریستال 8 برای سریال و ارسالهای طولانی و نرخ19200 اصلاً مناسب نیست، فقط 11.059200

          این کد را ببین و تست کن:
          کد:
          #include <avr/io.h>
          #include <avr/interrupt.h>
          #include <util/delay.h>
          
          #define BaudRate(x) {UBRRH=(unsigned char)(((F_CPU/(16UL*(x)))-1)>>8); UBRRL = (unsigned char)(F_CPU/(16UL*(x)))-1;}
          
          
          char buff[10];
          volatile unsigned char index=0;
          
          
          ISR(USART_RXC_vect)
          {
          char st,dt;
          st=UCSRA;
          dt=UDR;
          if(!(st & (_BV(FE) | _BV(PE) | _BV(DOR)))) // Check data
          {
          buff[index++] = dt;
          }
          }
          
          
          
          void _putchar(char c)
          {
          while ((UCSRA & _BV(UDRE))==0);
          UDR=c;
          }
          
          void _puts(char *str)
          {
          while(*str) _putchar(*str++);
          }
          
          int main(void)
          {
          
          	UCSRA=0;
          	UCSRB=_BV(RXEN) |_BV(RXCIE) | _BV(TXEN); // TX and RX = enable and RX ISR = enable
          	UCSRC=_BV(URSEL)|_BV(UCSZ1) | _BV(UCSZ0); // 8bit Mode
          	BaudRate(9600UL);
          
          	index=0;
          	sei();
          		_puts("Write 10 Char\r\n ");
          		
            while(1)
            {
          
          	if(index == sizeof(buff))
          	{
          	cli();
          	_puts((char*)&buff);
          	index=0;
          	sei();
          	}
           
            }
          }
          اطلاعات بیشتر : http://www.eca.ir/forum2/index.php?topic=90823.120
          توی تاپیک بالا با جناب "punisher.x64" در مورد همین موضوع بحث شده

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

          دیدگاه


            پاسخ : کوچ کردن از کدویژن به AtmelStudio

            ممنون از پاسخ شما دوست عزیز:
            در وقفه دریافت که دیگه while(!(UCSRA & (1<<RXC))); را نمیخواد! وقفه موقعی رخ میده که دریافت تکمیل شده باشه
            آره میدونم، اونو شک کرده بودم به چیزی واسه محکم کاری اضافه کرده بودم
            دلیل این کار را هم نفهمیدم چیه UCSRA|=(1<<TXC);
            خب واسه اینکه بیت RXC از رجیستر UCSRA رو صفر کنم دیگه :|
            [بعد ویرایش] - - > اونو چون قبلاً با استفاده از بیت TXC چک میکردم اتمام ارسال رو نوشته بودم الان همونجوری مونده بود.
            یادم رفت بگم : کریستال 8 برای سریال و ارسالهای طولانی و نرخ19200 اصلاً مناسب نیست، فقط 11.059200
            حرف شما متین ولی خب همین برنامه با کدویژن و با کریستال8 بدون خطا جواب میده :|

            این کد را ببین و تست کن:
            این برنامه جواب نداد، حتی همون Write 10 Char اول رو هم نفرستاد!
            برنامه خودم رشته Test رو میفرستاد، توی بقیه اش مشکل داشت

            بازم تشکر

            «پشتکار» «پشتکار» «پشتکار»

            دیدگاه


              پاسخ : کوچ کردن از کدویژن به AtmelStudio

              اون برنامه را با چی کامپایل کردی؟ F_CPU را اضافه کردی؟

              خب واسه اینکه بیت RXC از رجیستر UCSRA رو صفر کنم دیگه :|
              کد:
              	while(!(UCSRA & (1<<TXC)));
              		UCSRA|=(1<<TXC);
              نیازی به اینکار نیست، خود میکرو این رجیستر را تنظیم میکنه ، شما چک کردی که 1 باشه بعد دوباره 1 کردی ؟؟؟!!!

              این برنامه جواب نداد، حتی همون Write 10 Char اول رو هم نفرستاد!
              برنامه خودم رشته Test رو میفرستاد، توی بقیه اش مشکل داشت
              برنامه هارا قبل از اینکه در تالار قرار بدم چک میکنم ، برنامه هیچ مشکلی نداره اگه خواستی پروتئوس و هگز را برات بفرستم
              امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

              دیدگاه


                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                اون برنامه را با چی کامپایل کردی؟ F_CPU را اضافه کردی؟
                با ATMEL Studio6 کار می کنم که AVR GCC هم نصب هس روش
                آره اضافه کردم...

                نیازی به اینکار نیست، خود میکرو این رجیستر را تنظیم میکنه ، شما چک کردی که 1 باشه بعد دوباره 1 کردی ؟؟؟!!!
                الان دسترسی به دیتاشیت ندارم ولی خب بعضی رجیسترها اینطورن که وقتی بخونیشون 0 نمیشن! باید روشون 1 ریخت تا صفر بشن (ریست بشن)

                برنامه هارا قبل از اینکه در تالار قرار بدم چک میکنم ، برنامه هیچ مشکلی نداره اگه خواستی پروتئوس و هگز را برات بفرستم
                ممنون میشم همچین کاری بکنی

                با تشکر

                «پشتکار» «پشتکار» «پشتکار»

                دیدگاه


                  پاسخ : کوچ کردن از کدویژن به AtmelStudio

                  سورس + پروتئوس + هگز
                  winavr and proteus 8
                  Mega16 and 11.059200MHz
                  uart.rar

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

                  دیدگاه


                    پاسخ : کوچ کردن از کدویژن به AtmelStudio

                    نوشته اصلی توسط Abbas Sarami
                    سورس + پروتئوس + هگز
                    winavr and proteus 8
                    Mega16 and 11.059200MHz
                    uart.rar

                    موفق باشید
                    شما از Atmel استفاده نمی کنین؟ از چه IDE استفاده میکنین؟

                    «پشتکار» «پشتکار» «پشتکار»

                    دیدگاه


                      پاسخ : کوچ کردن از کدویژن به AtmelStudio

                      نوشته اصلی توسط کنجکاو!
                      شما از Atmel استفاده نمی کنین؟ از چه IDE استفاده میکنین؟
                      من که نوشتم winAVR
                      نوشته اصلی توسط Abbas Sarami
                      winavr and proteus 8
                      امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                      دیدگاه


                        پاسخ : کوچ کردن از کدویژن به AtmelStudio

                        نوشته اصلی توسط Abbas Sarami
                        من که نوشتم winAVR
                        خب winAVR که یک کمپایلره
                        من منظورم IDE بود
                        به هر حال
                        ممنون
                        ولی من نتونستم فایل پروتئوس رو باز کنم! همین که فایل رو باز میکنم پروتئوسم کرش می کنه

                        من سعی میکنم یکم دیگه با برنامه ای که شما گفتید کار کنم ببینم چرا جواب نداد برای سخت افزار من
                        مزاحم میشم بازم

                        مرسی

                        «پشتکار» «پشتکار» «پشتکار»

                        دیدگاه


                          پاسخ : کوچ کردن از کدویژن به AtmelStudio

                          winavr کامپایلر نیست؛ کامپایلرش مجموعه GNU هست، GCC (مثل avr studio که یک ide هست)
                          امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                          دیدگاه


                            پاسخ : کوچ کردن از کدویژن به AtmelStudio

                            خیلی جالبه!
                            کم هرکاری کردم از این کد جواب نگرفتم! دقیقاً مث برنامه خودمه دریافت و ارسال مجددش! (اون ارسال رشته اولی درست شد)
                            من واقعاً دیگه نمیدونم چیکار کنم :|

                            «پشتکار» «پشتکار» «پشتکار»

                            دیدگاه


                              پاسخ : کوچ کردن از کدویژن به AtmelStudio

                              آقا ممکنه مشکل سخت افزاری باشه؟
                              من از کریستال دقیق 11.0592 و باود ریت 9600 استفاده میکنم رشته رو داخل پروتئوس درست ارسال میکنه ولی عملی که تست میکنم نمیتونه کامل ار سال کنه...
                              چند رشته که هرکدوم در حدود 70 یا 80 کاراکتر دارند رو باید پشت سر هم ارسال کنه....
                              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                              www.intelart.ir


                              ساخت کنترلر دما PID فازی با AVR [آموزشی]

                              دیدگاه


                                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                                نه!
                                چون اولاً که سخت افزار کاملاً با کدویژن جواب داده
                                دوماً این برنامه روی پروتئوس هم جواب نداد!

                                من دارم به این نتیجه میرسم مشکل از Atmel Studio باشه چون آقا صرامی که از کدشون جواب گرفتن!

                                «پشتکار» «پشتکار» «پشتکار»

                                دیدگاه

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