اطلاعیه

Collapse
No announcement yet.

مشکل یوزارت با atmel studio

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

    مشکل یوزارت با atmel studio

    دوستان این کد چرا نباید کار کنه؟
    ایراد کجاست؟
    گیرنده
    کد:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdio.h>
    #include "lcd.h"
    #include <stdlib.h>
    #define BAUD 9600
    #define BAUDRATE ((F_CPU)/(BAUD*16ul)-1)
    int w;
    char r[10];
    
    void uart_init (void)
    {
    	UBRRH=0x00;
    	UBRRL=BAUDRATE;
    	UCSRB|=(1<<RXEN);
    	UCSRC|=(1<<UCSZ0)|(1<<UCSZ1);
    }
    uint8_t uart_r (){
    	while((UCSRA &(1<<RXC))== 0);
    	return UDR;
    }
    
    int main(void)
    {
    	
    	char data;
      while(1)
      {
    		w++;		
    		lcdInit();
    		lcdGotoxy(0,1);
    		itoa(w,r,10);
    		lcdPuts(r);
    		data=uart_r();
    		lcdClear();
    		lcdGotoxy(0,0);
    		lcdPutchar(data);
    		_delay_ms(1000);
    		    
      }
    }
    فرستنده
    کد:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdio.h>
    #define BAUD 9600
    #define BAUDRATE ((F_CPU)/(BAUD*16ul)-1)
    void uart_init (void)
    {
    	UBRR0H=0x00;
    	UBRR0L=BAUDRATE;
    	UCSR0B|=(1<<TXEN0);
    	UCSR0C|=(1<<UCSZ00)|(1<<UCSZ01);
    }
    void uart_transmit (unsigned char data){
    	while (!(UCSR0A&(1<<UDRE0)));
    	UDR0=data;
    }
    int main(void)
    {
    	uart_init();
    	DDRC=(1<<PINC5);
    	DDRA=0XFF;
    	DDRB=0XFF;
      while(1)
      {
    		if (bit_is_set(PINC,5))
    		{
    		uart_transmit(40);
    		PORTA=0XFF;
    		PORTB=0XFF;
    		_delay_ms(1000);
    		PORTA=0X00;
    		PORTB=0X00;
    		_delay_ms(1000);
    		}
      }
    }
    گیرنده هیچی دریافت نمیکنه
    پایه فرستنده رو با اهم متر چک کردم.نغیرات کوچیکی تو ولتاژش میوفته که باید نشون دهنده ارسال باشه؟درسته؟

    #2
    پاسخ : مشکل یوزارت با atmel studio

    مگه با avr studio ننوشتی ؟ چرا مقدار F_CPU مشخص نیست؟
    کد:
    #define F_CPU 11059200UL
    امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

    دیدگاه


      #3
      پاسخ : مشکل یوزارت با atmel studio

      نوشته اصلی توسط Abbas Sarami
      مگه با avr studio ننوشتی ؟ چرا مقدار F_CPU مشخص نیست؟
      کد:
      #define F_CPU 11059200UL
      تنظیمان فرکانس رو از قسمت تولچاین و برگه سیمبول انجام دادم
      همیشه این کار رو میکنم
      مگه ایرادی داره؟

      دیدگاه


        #4
        پاسخ : مشکل یوزارت با atmel studio

        سلام
        آقا یه سوال:
        چرا از کتابخونه استفاده نمیکنی؟؟

        دیدگاه


          #5
          پاسخ : مشکل یوزارت با atmel studio

          به برنامه دریافت دقت کن!
          اصلاً تابع uart_init را فراخوان نکردی :NO:
          در ضمن نیازی به فراخوان مکرر lcdInit نیست
          کد:
          int main(void)
          {
          char data;
          uart_init();
          lcdInit();	
            while(1)
            {
          		w++;		
          		lcdGotoxy(0,1);
          		itoa(w,r,10);
          		lcdPuts(r);
          		data=uart_r();
          		lcdClear();
          		lcdGotoxy(0,0);
          		lcdPutchar(data);
          		_delay_ms(1000);
          		    
            }
          }
          نوع ورودی توابع را همیشه مشخص کن حتی اگه void هست
          کد:
          uint8_t uart_r(void)
          امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

          دیدگاه


            #6
            پاسخ : مشکل یوزارت با atmel studio

            نوشته اصلی توسط Abbas Sarami
            به برنامه دریافت دقت کن!
            اصلاً تابع uart_init را فراخوان نکردی :NO:
            در ضمن نیازی به فراخوان مکرر lcdInit نیست
            کد:
            int main(void)
            {
            char data;
            uart_init();
            lcdInit();	
              while(1)
              {
            		w++;		
            		lcdGotoxy(0,1);
            		itoa(w,r,10);
            		lcdPuts(r);
            		data=uart_r();
            		lcdClear();
            		lcdGotoxy(0,0);
            		lcdPutchar(data);
            		_delay_ms(1000);
            		    
              }
            }
            نوع ورودی توابع را همیشه مشخص کن حتی اگه void هست
            کد:
            uint8_t uart_r(void)
            ممنون از پاسختون
            این کار روانجام دادم
            به اضافه ی
            تابع دیتا رو توسط دستور itoa به ال سی دی فرستادم
            تو پروتیوس که جواب داد
            ببینم در عمل چطور میشه
            ممنون

            دیدگاه


              #7
              پاسخ : مشکل یوزارت با atmel studio

              تو عمل جواب نداد متاسفانه
              اعدادی مثل 231 و 230 نوشته میشه دائما!!
              فرستنده
              کد:
              #include <avr/io.h>
              #include <util/delay.h>
              #include <stdio.h>
              #define BAUD 9600
              #define BAUDRATE ((F_CPU)/(BAUD*16ul)-1)
              void uart_init (void)
              {
              	UBRR0H=0x00;
              	UBRR0L=BAUDRATE;
              	UCSR0B|=(1<<TXEN0);
              	UCSR0C|=(1<<UCSZ00)|(1<<UCSZ01);
              }
              void uart_transmit (unsigned char data)
              {
              	while (!(UCSR0A&(1<<UDRE0)));
              	UDR0=data;
              }
              int main(void)
              {
              	_delay_ms(500);
              	uart_init();	
              	while(1)
              	{
              			uart_transmit(40);
              			_delay_ms(500);
              			uart_transmit(50);
              			_delay_ms(500);
              			uart_transmit(60);
              			_delay_ms(500);
              			
              	}
              }
              گیرنده
              کد:
              #include <avr/io.h>
              #include <util/delay.h>
              #include <stdio.h>
              #include "lcd.h"
              #include <stdlib.h>
              #define BAUD 9600
              #define BAUDRATE ((F_CPU)/(BAUD*16ul)-1)
              int w;
              char r1[10];
              char r[10];
              
              void uart_init (void)
              {
              	UBRRH=0x00;
              	UBRRL=BAUDRATE;
              	UCSRB|=(1<<RXEN);
              	UCSRC|=(1<<UCSZ0)|(1<<UCSZ1);
              }
              uint8_t uart_r (void)
              {
              	while((UCSRA &(1<<RXC))== 0);
              	return UDR;
              }
              
              int main(void)
              {
              	_delay_ms(500);
              	uart_init();
              	lcdInit(CURSOR_BLINK_OFF);
              	char data;
              	while(1)
              	{
              		w++;
              		lcdGotoxy(0,1);
              		itoa(w,r,10);
              		lcdPuts(r);
              		data=uart_r();
              		lcdClear();
              		lcdGotoxy(0,0);
              		itoa(data,r1,10);
              		lcdPuts(r1);
              		_delay_ms(100);
              		
              	}
              }

              دیدگاه


                #8
                پاسخ : مشکل یوزارت با atmel studio

                البته چون از دو منبع تغذیه استفاده کردم کمی مشکل داشتم
                زمین های دو بورد رو یکی کردم
                اتفاقی که افتاد در گیرنده این بود که میره تو حلقه دریافت گیر میکنه و هیچ حرکتی نمیکنه
                ؟؟؟؟؟؟

                دیدگاه


                  #9
                  پاسخ : مشکل یوزارت با atmel studio

                  نوشته اصلی توسط rezash86
                  البته چون از دو منبع تغذیه استفاده کردم کمی مشکل داشتم
                  زمین های دو بورد رو یکی کردم
                  اتفاقی که افتاد در گیرنده این بود که میره تو حلقه دریافت گیر میکنه و هیچ حرکتی نمیکنه
                  ؟؟؟؟؟؟
                  بین هر مرحله در ارسال یک تاخیری بگذارید ... مثلا 100 میلی ثانیه
                  ببین کار میکنه؟
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه


                    #10
                    پاسخ : مشکل یوزارت با atmel studio

                    نوشته اصلی توسط Saman.Asadi
                    بین هر مرحله در ارسال یک تاخیری بگذارید ... مثلا 100 میلی ثانیه
                    ببین کار میکنه؟

                    دیدگاه


                      #11
                      پاسخ : مشکل یوزارت با atmel studio

                      سلام موضوع حل شد
                      دلیل استفاده از دریافت 5 بیتی در سمت گیرنده..
                      و ارسال اطلاعات 8 بیتی در سمت فرستنده.
                      علت اشتباه تفاوت مگا 32 و مگا 128 در رجیستر ursel میباشد
                      در 128 چنین رجیستری نداریم
                      اما در 32 این رجیستر نقش اصلی رو بازی میکنه
                      اگر 1 بشه میشه رجیستر ucsrc رو برنامه ریزی کرد ..در غیر اینصورت انگار نه انگار که براش کد نوشته شده
                      در هر صورت تجربه ی خوبی برای من بود که عادت زیادی به کد های بسکام دارم(هیچی از کد ها نمیفهمیدم و فقط استفاده میکردم)

                      دیدگاه

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