اطلاعیه

Collapse
No announcement yet.

سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

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

    #76
    پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

    سلام
    من برنامه شما را تست کردم (توی پروتئوس) ، مشکلی نداشت.
    من فقط یک کمی تغییرات توی کد دادم (خیلی جزئی)
    این کد کامپایل شده با کدویژن نسخه 2.05.3 است (میتونی از سایت تکنو الکترو دانلود کنید)
    کد:
    #include <mega8.h>
    #include <delay.h>
    #include <1wire.h>
    #include <ds18b20.h>
    #include <i2c.h>
    #include <ds1307.h>
    
    #define DATA PORTD
    #define LE PORTC
    
    unsigned char hour,minute,second;
    unsigned int j,temp;
    const unsigned char adad[]={0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x6F,0x63,0x39};
    unsigned char data[4];
    
    void main(void)
    {
    
    DDRC = 0b00001111;
    DDRD = 0b01111111;
    
    i2c_init();
    rtc_init(0,0,0);
    
    w1_init();
    
    
      while(1)
      {
      //Show Time ----------------------------------------------------------------------------    
      rtc_get_time(&hour,&minute,&second);
      data[0]=adad[hour/10];
      data[1]=adad[hour%10];
      data[2]=adad[minute/10];
      data[3]=adad[minute%10];  
      
        for(j=0;j<4;j++)
        {
          LE = 0x00;
          DATA = data[j];
          LE = 0x01 << j;
          delay_us(100);
          LE = 0x00;
        }
    
      delay_ms(1000);
    
      // Show Temp ---------------------------------------------------------------------------
      temp = ds18b20_temperature(0); 
        
      data[0]=adad[temp/10];                                             
      data[1]=adad[temp%10];
      data[2]=adad[10]; 
      data[3]=adad[11];
    
        for(j=0;j<4;j++)
        {
          LE = 0x00;
          DATA = data[j];
          LE = 0x01 <<j;
          delay_us(100);
          LE = 0x00;
        }
        
      delay_ms(1000);
    
      }
    }
    شما تاخیری که بین نمایش ها داده بودید 50 میلی ثانیه بود مشکل مربوط به همونه :agree:

    http://www.uplooder.net/cgi-bin/dl.c...9439a563e58fd7

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

    دیدگاه


      #77
      یه سوال در مورد امکان capture با دستور نرم افزاری هستم. کسی می تونه بهم کمک کنه

      درود بیکران به دوستان
      من می خواستم بجای اینکه از پین سخت افزاری ICP1 برای نمونه برداری از کانتر 1 در مگا 169 استفاده کنم اینکار رو بصورت نرم افزاری بهش فرمان Capture بدم. ممنون میشم کسی منو تو این زمینه یاری کنه . با کنترل کدم بیت از کدام رجیستر بصورت نرم افزاری می توان فرمان Capture را داد؟
      با کدویژن دارم کد می نویسم. ممنونم

      دیدگاه


        #78
        پاسخ : یه سوال در مورد امکان capture با دستور نرم افزاری هستم. کسی می تونه بهم کمک کنه

        نوشته اصلی توسط blu1351
        درود بیکران به دوستان
        من می خواستم بجای اینکه از پین سخت افزاری ICP1 برای نمونه برداری از کانتر 1 در مگا 169 استفاده کنم اینکار رو بصورت نرم افزاری بهش فرمان Capture بدم. ممنون میشم کسی منو تو این زمینه یاری کنه . با کنترل کدم بیت از کدام رجیستر بصورت نرم افزاری می توان فرمان Capture را داد؟
        با کدویژن دارم کد می نویسم. ممنونم
        دوست عزیر پین icp1 یه مقایسه گر هست که مثل یه opamp که وقتی ولتاژ دو سر ورودی و خروجی با هم اختلاف پیدا میکنن در خروجی تاثیر میگزاره . اگه میشه بیشتر توضیح بده که میخوای چه چیزی رو مقایسه کنی .
        mer30

        دیدگاه


          #79
          پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

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

          دیدگاه


            #80
            پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

            دوستان چطوری میتونم با پی سی یه عدد اعشاری رو به میکرو بفرستم و رو ال سی دی نمایش بدم؟ اعداد صحیح رو راحت میتونم بگیرم ولی اعداد اعشاری رو متاسفانه نه-
            سعی کردم عدد اعشاری رو تو پی سی به صحیح تبدیل کنم و بعد بفرستم که بازم مشکل داره و نمیتونم اعداد اعشاری رو تو میکرو بگیرم!
            کسی یه قطعه کد برای دریافت عدد اعشاری و نمایش و ذخیره اون تو میکرو نداره؟ :cry2:

            دیدگاه


              #81
              پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

              نوشته اصلی توسط voyager2020
              دوستان چطوری میتونم با پی سی یه عدد اعشاری رو به میکرو بفرستم و رو ال سی دی نمایش بدم؟ اعداد صحیح رو راحت میتونم بگیرم ولی اعداد اعشاری رو متاسفانه نه-
              سعی کردم عدد اعشاری رو تو پی سی به صحیح تبدیل کنم و بعد بفرستم که بازم مشکل داره و نمیتونم اعداد اعشاری رو تو میکرو بگیرم!
              کسی یه قطعه کد برای دریافت عدد اعشاری و نمایش و ذخیره اون تو میکرو نداره؟ :cry2:
              من برای اینکار ی ترفند زدم (بحث روی یک داده 0XFFFF هست) ستا بایت میفرستادم که بایت اول هشت بیت کم ارزش بایت بعد پر ارزش و بایت بعد محل ممیز!!
              که بقیه کار میمونه دیتای اول + دیتای دوم که هشتا شیفت میخوره به طرف پر ارزش! بعد هم محل ممیز رو اعمال و ....
              انجام پروژه های برنامه نویسی اندروید
              [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
              http://cafebazaar.ir/app/?id=com.atxdroid

              دیدگاه


                #82
                پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                سلام.من یک برنامه ساده برای lcd گرافیکی نوشتم ولی به glcd_init ایراد می گیرد .چیکار کنم.؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                یاعلی مدد

                دیدگاه


                  #83
                  پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                  نوشته اصلی توسط میثم_1818
                  سلام.من یک برنامه ساده برای lcd گرافیکی نوشتم ولی به glcd_init ایراد می گیرد .چیکار کنم.؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                  اطلاعات کامل نیست! همه چیزت رو بگو.

                  دیدگاه


                    #84
                    پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                    #include <mega32.h>
                    #include <ks0108.h>
                    void main(void)
                    {
                    glcd_init();
                    glcd_clear();
                    PORTA=0x00;
                    DDRA=0x00;
                    PORTB=0x00;
                    DDRB=0x0ff;
                    }
                    متن با برنامه من است
                    ودرقسمت پیغام ها چراپیغام زیررا می دهد.
                    Error: C:\cvavr2.05.3\bin\rfg.c(5): undefined symbol 'glcd_init'
                    یاعلی مدد

                    دیدگاه


                      #85
                      پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                      ورژن کامپایلرتون چنده؟(کتابخونه مال کامپایلره یا...؟)
                      مقدار DDRB رو هم درست کنید.

                      دیدگاه


                        #86
                        پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                        سلام ورژن کدویژنم CodeVisionAVR V2.05.3هر کاری می کنم همون اخطار می دهد
                        یاعلی مدد

                        دیدگاه


                          #87
                          پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                          جدول error های کدویژن رو چطوری میشه بدست اورد اصلا" توی help کدویژن چنین جدولی وجود داره؟




                          ضمنا" اگر سوالم حذف نشه و با اجازه بزرگترها!! من 2222 نفری بودم که این پست رو دیده :nerd:

                          دیدگاه


                            #88
                            پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                            توسط سورس برنامه های آموزشی اقای طراح برنامه ای نوشتم که قرار هست کد گرفته شده از کیبرد توسط وقفه usart ارسال بشه اما به دلیلی که نمیدونم چی هست اجازه استفاده از وقفه ها داده نمیشه کد ارور این هست :
                            Error: C:\Documents and Settings\MY CODES\usart_0\usart_0.c(48): 'interrupt' or '__interrupt' attributes not allowed in this context

                            Error: C:\Documents and Settings\MY CODES\usart_0\usart_0.c(77): 'interrupt' or '__interrupt' attributes not allowed in this context

                            کد های برنامه master :

                            کد:
                            // CRYSTAL=1000000 MHz
                            
                            #include <mega32A.h>
                            #include <delay.h>
                            #define nokey_code 12
                            
                            flash unsigned char keyboard_codes[]={0x76,0x6E,0x5E,0x3E,0x75,0x6D,0x5D,0x3D,0x73,0x6B,0x5B,0x3B};
                            volatile unsigned char key_code=nokey_code;
                            
                            
                            void main()
                            
                            {
                            
                             unsigned char temp_key_code,old_key_code=nokey_code;
                             
                             DDRD=(1<<DDD2)|(1<<DDD1);
                             PORTD=(1<<PORTD1)|(1<<PORTD0);
                             UBRRH=0;
                             UBRRL=25; // Baud Rate = Fosc/(16*(UBRR+1)) = 2403.8
                             UCSRB=(1<<TXCIE)|(1<<TXEN)|(1<<UCSZ1)|(1<<UCSZ0);
                             
                             OCR0=124;
                             TCCR0=(1<<WGM01)|(1<< CS01);
                             TIMSK=(1<<OCIE0);
                             #asm("sei");
                             
                             while(1)
                              {
                              // Update key code.
                              // This is necessary because of possible change of key code during loop
                              temp_key_code=key_code;
                              if (temp_key_code!=nokey_code) 
                               {
                               if (temp_key_code!= old_key_code)
                                {
                                old_key_code=temp_key_code;
                                if (temp_key_code!=nokey_code)UDR=temp_key_code;
                                }
                               }
                            
                              }
                             
                             //----------------------------------------------------------------------------
                             
                             
                             interrupt [TIM0_COMP] void timer0_compare_isr(void)
                             {
                             static unsigned char x20=0;
                             unsigned char temp , i;
                             if (++x20==20)
                             {
                              x20=0;
                              DDRB=(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
                              PORTB=(1<<PORTB6)|(1<<PORTB5)|(1<<PORTB4)|(1<<PORTB3);
                              delay_us(5); // delay for signal stablization
                              temp=(PINB & 0X78);
                              DDRB=(1<<DDB6)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3);
                              PORTB=(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0);
                              delay_us(5); // delay for signal stablization
                              temp |=(PINB & 0X07);
                              for(i=0;i<12;i++)
                              {
                               if(temp==keyboard_codes[i])
                               {
                                key_code=i;
                                break;
                               }
                               else key_code=nokey_code;
                              }
                             }
                             }
                            
                            //----------------------------------------------------------------------------
                            
                            interrupt [USART_TXC] void USART_TX_Complete(void)
                             {
                              PORTD^=(1<<PORTD2);
                              delay_ms(500);
                              PORTD^=(1<<PORTD2);
                             }
                             }

                            دیدگاه


                              #89
                              پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                              نوشته اصلی توسط Rohalamin
                              میشه دقیق تر توضیح بدید موضوع از چه قراره؟
                              چون توی کتاب های C همچین چیزی نگفته و فقط رنج و سایز رو گفته.
                              والا الان شک کردم.
                              چون خیلی وقت پیش هم جواب داده بودم.
                              ببینید توی کتابهایی که زبان C رو توضیح داده اند این زبان رو برای کامپیوتر شرح داده اند نه برای میکرو.
                              در حالت کلی لانگ برای کامپیوتر یا ۳۲ بیتیه یا ۶۴ بیتی (بستگی به سیستم عامل داره) اما توی میکرو ها فکر میکنم لانگ همون ۸ بیتی باشه.
                              شما میتونید تست کنید ببینید که آیا این مسیله درست هست یا نه.

                              دیدگاه


                                #90
                                پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                                نوشته اصلی توسط saeed_eca
                                بله مشکل از همون a بود.اگه میشه این مفهوم این دستور رو هم بگید تو کتاب علامتش رو پیدا نکردم : PORTA=~1<<i

                                و یه سوال دیگم اینکه چه موقع باید از حافظه فلش استفاده کنم و چه موقع از حافظه ای ای پی رام ...برای مثال یک رقص نور ساده رو باید تو کدوم حافظه لود و پروگرام کنم ؟
                                والا اون دستور میگه که عدد 0xFE رو به اندازه i به سمت چپ شیفت بده و در خروجی پورت A بریزه.

                                در مورد سوال دومتون هم شما همیشه با فلش کار میکنید. برنامه ای که شما مینویسید توی فلش هستش.
                                رقص نور هم همین طوره حالا یه وقتی هست که شما میخواید بعد از این که برنامه تون رو نوشتید و میکرو رو پروگرم کردید یه حافظه ای رو داشته باشید که کاربر به دلخواه خودش توش چیز بریزه اون وقته که از eeprom استفاده میکنید.
                                مثل تابلو روان میمونه. شما میتونید تابلو روان رو بنویسید بعد به کاربرتون میگید که فقط متنی که میخواد نمایش داده بشه رو روی حافظه مشخصی توی eeprom بریزه در این صورت برنامه شما بدون تغییر کردن اون متن رو نمایش میده و ....

                                دیدگاه

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