اطلاعیه

Collapse
No announcement yet.

راه اندازی ATmega8A با کریستال خارجی برای UART

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

    پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

    نوشته اصلی توسط Reza Sede
    سلام
    ممنون
    پس میشه یک نرم افزاری معرفی کنید که بتونه با پروگرمر usbasp فیوز پروگرم کنه؟
    سپاس از کمکم هاش شما
    نرم افزار khazama ,progisp
    دوربين مدار بسته و دزد گير و رفع مشكلات
    بانك اطلاعاتي سنسورها
    ساخت رقص نور براي شيشه سكوريت مغازه ها
    تعمير لوازم خانگي را اينجا مطرح كنيد
    [move][b] موفقيت بر روي ستون هاي شکست شکل مي گيرد.

    دیدگاه


      پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

      نوشته اصلی توسط Reza Sede
      سلام
      ممنون
      پس میشه یک نرم افزاری معرفی کنید که بتونه با پروگرمر usbasp فیوز پروگرم کنه؟
      سپاس از کمکم هاش شما
      progISP
      این مجموعه کامل از پروژه USBasp Driver , progISP
      لینک دانلود:progisp172.rar
      حجم 2.15 مگابایت

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

      دیدگاه


        پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

        سلام خدمت همه...
        میشه در مورد تصویر زیر توشیح بدید؟اون R که گذاشته اونجا معنیش چیه؟
        راستش با کار کردن با دریافت کننده UART مشکل دارم...اگه میشه در مورد اون هم توضیح بدید...
        با تشکر



        صفحه 159 دیتاشیت مگا16...
        با تشکر
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


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

        دیدگاه


          پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

          کلاً برای محاسبه خطا
          و R fast-slow ضرایب حداقل و حداکثر خطا است
          پایینش توی جدول نوشته
          -------------------------
          مشکلت چیه ؟ بگو حلش میکنیم عکس بده جنازه تحویل بگیر =))

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

          دیدگاه


            پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

            نوشته اصلی توسط Abbas Sarami
            کلاً برای محاسبه خطا
            و R fast-slow ضرایب حداقل و حداکثر خطا است
            پایینش توی جدول نوشته
            -------------------------
            مشکلت چیه ؟ بگو حلش میکنیم عکس بده جنازه تحویل بگیر =))

            موفق باشید
            مرسی عباس آقا لطف دارین :mrgreen:...راستی سال نو مبارک

            من میخوام با روش وقفه از ورودی دیتا بخونم...
            ولی وقتی اینتراپت و این حرفا رو تنظیم میکنم کار نمیکنه....یعنی با ترمینال پروتئوس که تست میکنم جواب نمیده...!!! :angry: :angry:
            واسه ترنسمیت خوب کار میکنه ها ولی نمیتونم دیتا بخونم....
            اینم یه نمونه کد که میگم کار نمیکنه:

            کد:
            #include <avr/io.h>
            #include <avr/interrupt.h>
            #include <util/delay.h>
            #include <stdlib.h>
            #include "N11/N1100_LCD.h"
            
            #define F_CPU 8000000ul
            unsigned char buff;
            int main(void)
            {
            	UCSRB=(1<<RXEN)|(1<<RXCIE);
            	UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
            	UBRRL=51;
            	N11_initialize();
            	
            	sei();
            	
              while(1)
              {
                _delay_ms(1000);
            		N11_CLS();
            		N11_Puts(buff);
              }
            }
            
            ISR(USART_RXC_vect)
            {
            	sprintf(buff,"%c",UDR);
            }
            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

            www.intelart.ir


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

            دیدگاه


              پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

              مرسی عباس آقا لطف دارین :mrgreen:...راستی سال نو مبارک
              خواهش میکنم ، سال نو شما هم مبارک :bye

              از اونجایی که عاشق GCC هستم نشستم برات یک برنامه توپ برای تست سریال نوشتم (100% سفارشی )
              این را با winavr نوشتم F_CPU را توی makefile تنظیم کردم ، شما اگه با avr studio کار میکنی خودت اضافه کن
              برای Baud Rate هم یک ماکرو نوشتم کار را راحت تر کنه
              ارسال و دریافت فعاله و دریافت روی وقفه
              10 بایت میگیره و بعد همون ها را خروجی میده
              [glow=red,2,300]نکته: هیچ وقت در روال وقفه تابع فراخوان نکنید.[/glow]
              کد:
              #include <avr/io.h>
              #include <avr/interrupt.h>
              #include <util/delay.h>
              
              #define BaudRate(x) {UBRRH=0; UBRRL = (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();
              	}
               
                }
              }
              موفق باشید
              امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

              دیدگاه


                پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                نوشته اصلی توسط Abbas Sarami
                خواهش میکنم ، سال نو شما هم مبارک :bye

                از اونجایی که عاشق GCC هستم نشستم برات یک برنامه توپ برای تست سریال نوشتم (100% سفارشی )
                این را با winavr نوشتم F_CPU را توی makefile تنظیم کردم ، شما اگه با avr studio کار میکنی خودت اضافه کن
                برای Baud Rate هم یک ماکرو نوشتم کار را راحت تر کنه
                ارسال و دریافت فعاله و دریافت روی وقفه
                10 بایت میگیره و بعد همون ها را خروجی میده
                [glow=red,2,300]نکته: هیچ وقت در روال وقفه تابع فراخوان نکنید.[/glow]
                کد:
                #include <avr/io.h>
                #include <avr/interrupt.h>
                #include <util/delay.h>
                
                #define BaudRate(x) {UBRRH=0; UBRRL = (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();
                	}
                 
                  }
                }
                موفق باشید
                عباس آقا دست شما درد نکنه...خیلی عالی بود...اون تابع رو واسه تست گذاشتم...
                دارم یه لایبرری مینویسم که دیگه هر دفه نخوایم هی حساب کتاب و رجستر بازی و اینا داشته باشیم!!!
                فقط یه سوال:میشه همزمان اینتراپت هر دو فعال باشه؟
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


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

                دیدگاه


                  پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                  ببخشید یه سوال دیگه هم دارم....
                  میشه در مورد کد زیر که داخل برنامه تون گذاشتید یه توضیح کوچولو بدین ؟
                  کد:
                  _puts((char*)&buff);
                  مرسی :redface:
                  تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                  www.intelart.ir


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

                  دیدگاه


                    پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                    آقا شرمنده اگه سوالام زیاد هستند...جدا جدا میپرسم که با هم قاطی نشند...
                    به نظرتون بهتره که واسه دریافت از وقفه و واسه ارسال از Polling استفاده کنیم یا واسه هردو از وقفه استفاده کنیم؟
                    اصلا در عمل تفاوتی هم میتونه داشته باشه؟
                    من خیلی از Polling بدم میاد واسه همین سعی میکنم همه چی رو تا جایی که میشه با وقفه انجام بدم...
                    با تشکر
                    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                    www.intelart.ir


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

                    دیدگاه


                      پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                      برعکس شما من همه را یکجا جواب میدم
                      نوشته اصلی توسط punisher.x64
                      فقط یه سوال:میشه همزمان اینتراپت هر دو فعال باشه؟
                      بله مشکلی نداره
                      نوشته اصلی توسط punisher.x64
                      میشه در مورد کد زیر که داخل برنامه تون گذاشتید یه توضیح کوچولو بدین ؟
                      کد:
                      _puts((char*)&buff);
                      تابع puts_ همونطور که مشخصه ورودیش اشاره گر (pointer) هست عبارت *char نوع اشاره گر را مشخص میکنه و buff& آدرس بافر برای اشاره گر هست.
                      نوشته اصلی توسط punisher.x64
                      به نظرتون بهتره که واسه دریافت از وقفه و واسه ارسال از Polling استفاده کنیم یا واسه هردو از وقفه استفاده کنیم؟
                      اصلا در عمل تفاوتی هم میتونه داشته باشه؟
                      من خیلی از Polling بدم میاد واسه همین سعی میکنم همه چی رو تا جایی که میشه با وقفه انجام بدم...
                      برای دریافت بهتره از وقفه استفاده کنی (اصولی تر هست) ولی برای ارسال نیازی به وقفه نیست

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

                      دیدگاه


                        پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                        نوشته اصلی توسط Abbas Sarami
                        برعکس شما من همه را یکجا جواب میدم بله مشکلی ندارهتابع puts_ همونطور که مشخصه ورودیش اشاره گر (pointer) هست عبارت *char نوع اشاره گر را مشخص میکنه و buff& آدرس بافر برای اشاره گر هست.برای دریافت بهتره از وقفه استفاده کنی (اصولی تر هست) ولی برای ارسال نیازی به وقفه نیست

                        موفق باشید
                        مرسی عباس جان...
                        واسه این چند تا تاپیک شد چون یکی میومد تو ذهنم!!! :mrgreen:
                        من آخرشم پوینتر رو یاد نگرفتم... :angry:
                        کد:
                        while(*str) UART_Putchar(*str++);
                        اینجا شما اشاره گر آرایه رو یکی یکی اضافه میکنید .با اینکار اندیس اشاره گر اضافه میشه؟ :surprised:

                        در مورد ارسال با وقفه هم به نظرتون CPU الاف نمیشه؟یعنی اگه واسه ارسال یه رشته از وقفه استفاده بشه میتونه تاثیر زیادی نسبت به ارسال با POLLING داشته باشه؟
                        از قبل ممنونم...
                        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                        www.intelart.ir


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

                        دیدگاه


                          پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                          نوشته اصلی توسط punisher.x64
                          مرسی عباس جان...
                          واسه این چند تا تاپیک شد چون یکی میومد تو ذهنم!!! :mrgreen:
                          من آخرشم پوینتر رو یاد نگرفتم... :angry:
                          کد:
                          while(*str) UART_Putchar(*str++);
                          اینجا شما اشاره گر آرایه رو یکی یکی اضافه میکنید .با اینکار اندیس اشاره گر اضافه میشه؟ :surprised:
                          سهمیه پاسخ گویی شما تمام شده =))

                          اشاره گر در اصل یک عدد هست که به خانه حافظه اشاره میکنه
                          امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                          دیدگاه


                            پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                            نوشته اصلی توسط Abbas Sarami
                            سهمیه پاسخ گویی شما تمام شده =))

                            اشاره گر در اصل یک عدد هست که به خانه حافظه اشاره میکنه
                            آقا ما مخلصیم
                            در مورد وقفه هم میشه توضیح بفرمایید :در مورد ارسال با وقفه هم به نظرتون CPU الاف نمیشه؟یعنی اگه واسه ارسال یه رشته از وقفه استفاده بشه میتونه تاثیر زیادی نسبت به ارسال با POLLING داشته باشه؟
                            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                            www.intelart.ir


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

                            دیدگاه


                              پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                              نوشته اصلی توسط punisher.x64
                              آقا ما مخلصیم
                              در مورد وقفه هم میشه توضیح بفرمایید :در مورد ارسال با وقفه هم به نظرتون CPU الاف نمیشه؟یعنی اگه واسه ارسال یه رشته از وقفه استفاده بشه میتونه تاثیر زیادی نسبت به ارسال با POLLING داشته باشه؟
                              ممکنه درگیری CPU را کمتر کنه ولی موقعی محسوس میشه که طول رشته زیاد باشه ، تاثیرش را توی ارسالهای طولانی متوجه میشی
                              اگه طول ارسال ها کمه نیازی به استفاده از وقفه نیست
                              امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                              دیدگاه


                                پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART

                                نوشته اصلی توسط Abbas Sarami
                                ممکنه درگیری CPU را کمتر کنه ولی موقعی محسوس میشه که طول رشته زیاد باشه ، تاثیرش را توی ارسالهای طولانی متوجه میشی
                                اگه طول ارسال ها کمه نیازی به استفاده از وقفه نیست
                                مثلا واسه رشته های 8تایی که فرقی نداره...درست میگم؟

                                حالا اگه بخوایم با وقفه ارسال کنیم باید از وقفه UDRE استفاده کنیم دیگه...درسته؟
                                کد زیر رو امتحان کردم جواب داد
                                کد:
                                ISR(USARTUDRE_vect)
                                {
                                	if (!(_UART_BUFFER[_UART_COUNTER]))
                                	{
                                		_UART_COUNTER=0;
                                		UCSRB&=0xdf;
                                		return;
                                	}
                                	UDR=_UART_BUFFER[_UART_COUNTER++];
                                }
                                فقط تنها مشکلی که دارم اینه که از تابع Puts که شما تعریف کردید استفاده کنم و اشاره گر به ورودی تابهه رو بفرستم به زیرروال وقفه....
                                به نظرتون چطور اینکارو بکنم؟
                                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                                www.intelart.ir


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

                                دیدگاه

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