اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی تاچ در TMEGA64

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

    مشکل در راه اندازی تاچ در TMEGA64

    با سلام

    من وقتی پورت های میکرو رو برای تاچ تنظیم می کنم به صورت زیر
    PORTF.0=1;
    PORTF.1=0;
    PORTF.2=0;
    PORTF.3=0;
    DDRF.0=1;
    DDRF.1=0;
    DDRF.2=1;
    DDRF.3=0;
    و ...
    نمی دونم واسه چی همچین خطایی میده
    the first argument of the '.' operator must be of 'struct' or 'union' type

    در حالی که قبلا من از همین کد برای atmega8,16,32 استفاده کردم و مشکلی نداشت نمی دونم واسه چی برای 64 گیر میده ؟ oo:
    که با این درد اگر دربند درمانند درمانند
    فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

    #2
    پاسخ : مشکل در راه اندازی تاچ در TMEGA64

    نوشته اصلی توسط mehrdadttt
    با سلام

    من وقتی پورت های میکرو رو برای تاچ تنظیم می کنم به صورت زیر
    PORTF.0=1;
    PORTF.1=0;
    PORTF.2=0;
    PORTF.3=0;
    DDRF.0=1;
    DDRF.1=0;
    DDRF.2=1;
    DDRF.3=0;
    و ...
    نمی دونم واسه چی همچین خطایی میده
    the first argument of the '.' operator must be of 'struct' or 'union' type

    در حالی که قبلا من از همین کد برای atmega8,16,32 استفاده کردم و مشکلی نداشت نمی دونم واسه چی برای 64 گیر میده ؟ oo:
    دقیقا کدوم خطو ارور میده؟
    انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی تاچ در TMEGA64

      با توجه به این هشت خطی که نوشتم ، برای هر هشت خط همین خطا رو میده .
      که با این درد اگر دربند درمانند درمانند
      فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی تاچ در TMEGA64

        دوست عزیز به این خاطر هست که PORTF و PORTG رو نمیتونی به صورت بیتی دسترسی داشته باشی.
        برای این کار باید شما به صورت زیر عمل کنی.
        کد:
        PORTF | (1<<4)  ---->  PORTF.4=1
        PORTF & ~(1<<3)  ---->  PORTF.3=0

        دیدگاه


          #5
          پاسخ : مشکل در راه اندازی تاچ در TMEGA64

          الان مشکلم این طوری حل شد
          PORTF=0x01;
          DDRF=0x05;
          delay_ms(20);
          x=read_adc(1);
          PORTF=0x02;
          DDRF=0x0A;
          delay_ms(20);
          y=read_adc(0);

          پس الان طبق گفتتون نمیشه این دو پورت رو مثلا برای روشن کردن led و سون سگمنت استفاده کرد دیگه درسته ؟
          که با این درد اگر دربند درمانند درمانند
          فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

          دیدگاه


            #6
            پاسخ : مشکل در راه اندازی تاچ در TMEGA64

            نوشته اصلی توسط mehrdadttt
            با توجه به این هشت خطی که نوشتم ، برای هر هشت خط همین خطا رو میده .
            خب چرا بصورت بیتی تعریف میکنی؟ چرا کلی نمینویسی؟ مثلا:
            PORTF=0x01
            DDRF=0x05
            انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

            دیدگاه


              #7
              پاسخ : مشکل در راه اندازی تاچ در TMEGA64

              نوشته اصلی توسط mehrdadttt
              الان مشکلم این طوری حل شد
              PORTF=0x01;
              DDRF=0x05;
              delay_ms(20);
              x=read_adc(1);
              PORTF=0x02;
              DDRF=0x0A;
              delay_ms(20);
              y=read_adc(0);

              پس الان طبق گفتتون نمیشه این دو پورت رو مثلا برای روشن کردن led و سون سگمنت استفاده کرد دیگه درسته ؟
              چرا نمیشه؟ ببین برای 7seg هم از آرایه ای که توش اعداد 0 تا9 بصورت hex برای کل پورت تعریف شده استفاده میشه. مثلا:
              کد:
              unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
              PORTF=seg[1];
              با این کد، عدد 1 توی 7seg که به پورت F متصل هستش نمایش داده میشه.
              انسانها 10 دسته اند: دسته ای که باینری میدانند و دسته ای که باینری نمیدانند!

              دیدگاه


                #8
                پاسخ : مشکل در راه اندازی تاچ در TMEGA64

                نوشته اصلی توسط hamedtaran
                چرا نمیشه؟ ببین برای 7seg هم از آرایه ای که توش اعداد 0 تا9 بصورت hex برای کل پورت تعریف شده استفاده میشه. مثلا:
                کد:
                unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
                PORTF=seg[1];
                با این کد، عدد 1 توی 7seg که به پورت F متصل هستش نمایش داده میشه.
                حرف شما درست .
                ولی چون با ADC میکرو کار دارم باید این دو پورت رو برای خود ADC و LCD کنار بزارم .

                بازم ممنون از این که این نکته (PORTF و PORTG) رو بهم گفتین .
                که با این درد اگر دربند درمانند درمانند
                فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

                دیدگاه


                  #9
                  پاسخ : مشکل در راه اندازی تاچ در TMEGA64

                  ببینید ، مساله سر آدرس پورت هاست.
                  AVR با استفاده از دستورات cbi , sbi بیتهای پورتها رو دستکاری میکنه. اما این دستورات تا آدرس 0x1F فقط کار میکنه، یعنی فقط برای پورتهای A,B,C,D,E .
                  اگر در هدر فایل مگا64 نگاه کنید پورت F از آدرس 0x61 شروع میشه. پس امکان آدرس دهی بیتی وجود نداره.
                  اما راه حل :
                  شما باید با استفاده از دستورات برنامه نویسی دسترسی به بیتها را فراهم کنید.
                  میتونید یک ماکرو مفید به شکل زیر تعریف کنید :
                  کد:
                  #define   _BV(bit)   (1<<bit)
                  حالا با این ماکرو کار رو ادامه میدیم :
                  برای یک کردن بیت b در رجیستر reg :
                  کد:
                  reg | _BV(b)
                  برای صفر کردن بیت b در رجیستر reg :
                  کد:
                  reg & ~BV(b)
                  و با تعریف دو ماکروی دیگر :

                  کد:
                  #define	_BV(bit)		(1<<bit)
                  #define SET_BIT(reg,bit)	reg | _BV(bit)
                  #define CLR_BIT(reg,bit)	reg & ~_BV(bit)
                  پس میبینید که کاملا میتونید از تک تک بیتها استفاده کنید، فقط به شکل کمی متفاوت.
                  حالا مثلا میخوایم بیت 4 از DDRF رو صفر کنیم. اینطوری مینویسیم :
                  کد:
                  CLR_BIT(DDRF,4)

                  دیدگاه


                    #10
                    پاسخ : مشکل در راه اندازی تاچ در TMEGA64

                    بازم ممنون از وقتی که دارین برام میزارین
                    نوشته اصلی توسط امیر . م
                    میتونید یک ماکرو مفید به شکل زیر تعریف کنید :
                    کد:
                    #define   _BV(bit)   (1<<bit)
                    حالا با این ماکرو کار رو ادامه میدیم :
                    برای یک کردن بیت b در رجیستر reg :
                    کد:
                    reg | _BV(b)
                    برای صفر کردن بیت b در رجیستر reg :
                    کد:
                    reg & ~BV(b)
                    و با تعریف دو ماکروی دیگر :

                    کد:
                    #define	_BV(bit)		(1<<bit)
                    #define SET_BIT(reg,bit)	reg | _BV(bit)
                    #define CLR_BIT(reg,bit)	reg & ~_BV(bit)
                    پس میبینید که کاملا میتونید از تک تک بیتها استفاده کنید، فقط به شکل کمی متفاوت.
                    حالا مثلا میخوایم بیت 4 از DDRF رو صفر کنیم. اینطوری مینویسیم :
                    کد:
                    CLR_BIT(DDRF,4)
                    من خیلی وارد برنامه نویسی میکرو نشدم . درباره ماکرو زیاد نمی دونم .

                    الان همون کدی هایی که دادین رو زیر وارد کردم ولی در کد

                    کد:
                    #include <mega64.h>
                    #define	_BV(bit)		(1<<bit)
                    #define SET_BIT(reg,bit)	reg | _BV(bit)
                    #define CLR_BIT(reg,bit)	reg & ~_BV(bit)
                    
                    
                    void main(void)
                    {
                    
                    while (1)
                       {
                       CLR_BIT(DDRF,4);
                    
                       }
                    }
                    این قسمتش
                    کد:
                    CLR_BIT(DDRF,4);
                    warning میده و توی شبیه سازی هیچ کاری نمیکنه .
                    که با این درد اگر دربند درمانند درمانند
                    فامیل دور : اشاره داره به درهایی که واقعا در نیستن ، مثل نقاشی در روی دیوار. یعنی این دردها مارو شبیه اون درها میکنه .

                    دیدگاه


                      #11
                      پاسخ : مشکل در راه اندازی تاچ در TMEGA64

                      حق داره :mrgreen:
                      کد:
                      #include <mega64.h>
                      #define	_BV(bit)		(1<<bit)
                      #define SET_BIT(reg,bit)	reg |= _BV(bit)
                      #define CLR_BIT(reg,bit)	reg &= ~_BV(bit)
                      
                      
                      void main(void)
                      {
                      
                      while (1)
                         {
                         CLR_BIT(DDRF,4);
                      
                         }
                      }
                      کد بالا را تست کن

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

                      دیدگاه


                        #12
                        پاسخ : مشکل در راه اندازی تاچ در TMEGA64

                        بله درسته ، حق با دوست عزیزمون هست . اشتباه از من بوده. چون کد ها رو بدون تست و عجله ای نوشتم مساوی ها رو نذاشتم.
                        عذر میخوام.

                        دیدگاه

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