اطلاعیه

Collapse
No announcement yet.

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

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

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

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

    دیدگاه


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

      دوست من این موردی که شما میخوای بهش میگن ماشین سیکل
      من خودم هم یه مان خیلی رو مخم بود
      اون موقع مه به ما میکرو کنترلر 8051 درس میدادن ته کتاب قدرت سپید نام این ماشین سیکلها رو نوشته بود
      تو کار تایمرها و این قبیل چیزها باید حتما اینا رو محاسیه میکردی مثلا بری درستورات دو ماشین سیکل برخی سه تا و برخی هم یک ماشین سیکل بودن
      اما الان که کلاس avr میرم تو مجتمع فنی تهران از استادمون چند بار پرسیدم گفت نمیخواد تو avr کاربرد نداره
      شاید چون فرکانس کاری خیلی بالاست و شاید اکثر برنامه ها با یه ماشین سیکل انجا ممیشه
      وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
      شما به سمت قوی تر شدن تغییر مسیر دهید

      دیدگاه


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

        سلام
        اقا من از طریق adc دارم دما رو میخونم و رو ال سی دی نشون میدم خوب مسلما تابعش که به اسم v گزاشتم از نوع float است
        رو خط بعدش یک متغییر از نوع Int به اسم high
        و رو خط بعد هم یه متغییر از نوه int به اسم low
        خوب این دو تا متغییر و با با چهار تا کلید ( دو تا برای زیاد کردن و دو تا برای کم کردن) کنترل میکنم
        میخوام یه حقه شرط بنویسم که اگر متغییر v مقدارش با متغییر high یا low برابر بود مثلا یه پورت رو یک کنه
        من اینو نوشتم
        خوب کدویزن ارور نمیده اما وارنینگ میده
        possibly incorrect assignment
        گفتم شاید نمیشه متغییر float رو مساوی متغییر int گزاشت
        خوب اومدم اون high و low رو هم float کردم و حتی اومدم بجای یک واحد تغییرشون با اون کلیدها تغییر رو کردم نیم واحد
        اما باز اون if کار نکرد میشه راهنمایم کتید


        خوب سوال دوم
        حالا وان ایف رو نوشتیم با کوچترین تغییر متغییر v از if میپره بیرون
        چطوری براش محدوده درست کنم
        مثلا اگر به دمای high رسید تا وقتی رسید به پنج تا کمتر از high یک پورت رو یک کنه
        سپاسگذارم
        وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
        شما به سمت قوی تر شدن تغییر مسیر دهید

        دیدگاه


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

          نوشته اصلی توسط mehdi_24
          سلام
          اقا من از طریق adc دارم دما رو میخونم و رو ال سی دی نشون میدم خوب مسلما تابعش که به اسم v گزاشتم از نوع float است
          رو خط بعدش یک متغییر از نوع Int به اسم high
          و رو خط بعد هم یه متغییر از نوه int به اسم low
          خوب این دو تا متغییر و با با چهار تا کلید ( دو تا برای زیاد کردن و دو تا برای کم کردن) کنترل میکنم
          میخوام یه حقه شرط بنویسم که اگر متغییر v مقدارش با متغییر high یا low برابر بود مثلا یه پورت رو یک کنه
          من اینو نوشتم
          خوب کدویزن ارور نمیده اما وارنینگ میده
          possibly incorrect assignment
          گفتم شاید نمیشه متغییر float رو مساوی متغییر int گزاشت
          خوب اومدم اون high و low رو هم float کردم و حتی اومدم بجای یک واحد تغییرشون با اون کلیدها تغییر رو کردم نیم واحد
          اما باز اون if کار نکرد میشه راهنمایم کتید


          خوب سوال دوم
          حالا وان ایف رو نوشتیم با کوچترین تغییر متغییر v از if میپره بیرون
          چطوری براش محدوده درست کنم
          مثلا اگر به دمای high رسید تا وقتی رسید به پنج تا کمتر از high یک پورت رو یک کنه
          سپاسگذارم
          برنامه+شماتیک=راهنمایی درست
          ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

          امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

          دیدگاه


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

            جسارتا کل فولدر رو اینجا اپلود کردم
            http://uplod.ir/o7k7513iju1m/ADC.rar.htm
            عرض کردم حضورتون که من دارم دما رو با adc میخونم
            دو تا متغییر هم درست کردم با نام high , low
            مثلا مقدار متغییر high رو مقدا رپنجاه میذاریم و دما رو زیاد میکنیم تا برسه به پنجاه
            من مشکلم سر نوشتن دستور مقایسه دمای خوانده شده از adc هست که این دما رو درون متغییر v میریزم
            با مقدار high
            من اینو نوشتم
            if(high=v)
            {
            PORTD.0=1;
            }
            اما کار نمیکنه
            حتی به اینم تغییر دادم باز کار نکرد
            if(v>=high)
            {
            PORTB.0=1;
            delay_ms(500);
            PORTD.0=0;
            }

            سپاسگذارم

            :angry: :angry: :angry: :angry: :angry: :angry:
            اصلا این کدیوزن و پروتئوس بعضی موقعه ها قاط میزنه بد
            :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
            وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
            شما به سمت قوی تر شدن تغییر مسیر دهید

            دیدگاه


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

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

              دیدگاه


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

                سلام
                من یه پروزه دارم مینویسم به یه مشکل برخوردم
                این پروزه دو تا میکرو داره که با usart به هم وصل هستند
                به میکرو اول که نقش sender رو داره یه کی برد و ال سی وصله که یه برنامه قفل رمز هم داره که با usart اگر کد وارد شده درست بود و قفل باز شد مثلا کارکتر پنجاه رو میفرسته و اون یکی میکرو که reciver این کد رو میگره و اگر کد پنجاه رو وارد کردیم خوب رو ال سی دی که با این میکرو reciver وصله یهپیغامی رو بده و یه پورت رو یک کنه


                برنامه میکرو sender رو نوشتم کاملا کار میکنه مشکل نداره ت وپروتئوس هم جواب میده با virtual termian jتو پروتئوس هم راحت میتونم کد ارسالی رو ببینم
                مشکل اینجاست که چطوری می تونم جداگونه میکرو که برایresive رو گذاشتم تو پروتئوس شبیه سازی کنم
                یا اینطوری بگم چطوری باید تو مد usart میکرو در حالت رسیو رو شبیه سازی کنم
                وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
                شما به سمت قوی تر شدن تغییر مسیر دهید

                دیدگاه


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

                  اقا تو پروتئوس نمیشه دو تا میکرو رو مثلا با usart به هم وصل کرد
                  من دارم با یه میکرومیفرستم با virtual terrminal تست کردمدرسته
                  اما وقتی میخوامبگیرم مکل دارم و ارور میده که
                  اینم لینک عکس اروری که میده
                  دو تا میکرو روتو یه صفحه گزاشتم کنار هم تک تک کاملا درست کار میکنن ولی وقتی با rx , tx به هم وصلشون میکنم مشکل داره
                  وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
                  شما به سمت قوی تر شدن تغییر مسیر دهید

                  دیدگاه


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

                    سلام..وقت بخیر...اگه ممکنه لطفا جوابمو هرچه سریعتر بدین..من این برنامه ای رو که میدارم برنامه adc کردن هست،
                    اما موقع زدن گزینه build all مدام error میده که:: the program has no 'main' function
                    نمدونم کجاش مشکل داره!!مامیخوایم adcمون در زمان وقفه تایمر که بر اساس فرکانس نمونه برداریمون تنظیم شده فعال بشه..
                    /************************************************** ***
                    This program was produced by the
                    CodeWizardAVR V2.05.3 Standard
                    Automatic Program Generator
                    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                    http://www.hpinfotech.com

                    Project :
                    Version :
                    Date : 12/16/2014
                    Author : PerTic@n
                    Company : If You Like This Software,Buy It
                    Comments:


                    Chip type : ATmega16A
                    Program type : Application
                    AVR Core Clock frequency: 11.059200 MHz
                    Memory model : Small
                    External RAM size : 0
                    Data Stack size : 256
                    ************************************************** ***/

                    #include <mega16a.h>

                    #include <delay.h>

                    // Standard Input/Output functions
                    #include <stdio.h>
                    int a,b;
                    long c;
                    // Timer 0 overflow interrupt service routine
                    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                    {
                    // Reinitialize Timer 0 value
                    TCNT0=0xFD;
                    ADCSRA=0x80; //adc faal mishavad
                    ADCSRA|=0x40; //tabdil aghaz mishavad
                    while ((ADCSRA & 0x10)==0);
                    ADCSRA|=0x10;
                    a=ADCH;
                    b=ADCL;
                    c=a+(256*b);
                    PIND.1=c;
                    print(PIND.1);
                    delay_ms(0.5);
                    // Place your code here

                    }

                    #define ADC_VREF_TYPE 0xC0

                    // Read the AD conversion result
                    //unsigned int read_adc(unsigned char adc_input)
                    //{
                    //ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
                    // Delay needed for the stabilization of the ADC input voltage
                    //delay_us(10);
                    // Wait for the AD conversion to complete
                    //while ((ADCSRA & 0x10)==0);
                    //ADCSRA|=0x10;
                    //return ADCW;
                    //}

                    // Declare your global variables here

                    void main(void)
                    {
                    // Declare your local variables here

                    // Input/Output Ports initialization
                    // Port A initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
                    PORTA=0xFF;
                    DDRA=0x00;

                    // Port B initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTB=0x00;
                    DDRB=0x00;

                    // Port C initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTC=0x00;
                    DDRC=0x00;

                    // Port D initialization
                    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
                    PORTD=0x00;
                    DDRD=0xFF;

                    // Timer/Counter 0 initialization
                    // Clock source: System Clock
                    // Clock value: 10.800 kHz
                    // Mode: Normal top=0xFF
                    // OC0 output: Disconnected
                    TCCR0=0x05;
                    TCNT0=0xFD;
                    OCR0=0x00;

                    // Timer/Counter 1 initialization
                    // Clock source: System Clock
                    // Clock value: Timer1 Stopped
                    // Mode: Normal top=0xFFFF
                    // OC1A output: Discon.
                    // OC1B output: Discon.
                    // Noise Canceler: Off
                    // Input Capture on Falling Edge
                    // Timer1 Overflow Interrupt: Off
                    // Input Capture Interrupt: Off
                    // Compare A Match Interrupt: Off
                    // Compare B Match Interrupt: Off
                    TCCR1A=0x00;
                    TCCR1B=0x00;
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1H=0x00;
                    ICR1L=0x00;
                    OCR1AH=0x00;
                    OCR1AL=0x00;
                    OCR1BH=0x00;
                    OCR1BL=0x00;

                    // Timer/Counter 2 initialization
                    // Clock source: System Clock
                    // Clock value: Timer2 Stopped
                    // Mode: Normal top=0xFF
                    // OC2 output: Disconnected
                    ASSR=0x00;
                    TCCR2=0x00;
                    TCNT2=0x00;
                    OCR2=0x00;

                    // External Interrupt(s) initialization
                    // INT0: Off
                    // INT1: Off
                    // INT2: Off
                    MCUCR=0x00;
                    MCUCSR=0x00;

                    // Timer(s)/Counter(s) Interrupt(s) initialization
                    TIMSK=0x01;

                    // USART initialization
                    // Communication Parameters: 8 Data, 1 Stop, No Parity
                    // USART Receiver: Off
                    // USART Transmitter: On
                    // USART Mode: Asynchronous
                    // USART Baud Rate: 9600
                    UCSRA=0x00;
                    UCSRB=0x08;
                    UCSRC=0x86;
                    UBRRH=0x00;
                    UBRRL=0x47;

                    // Analog Comparator initialization
                    // Analog Comparator: Off
                    // Analog Comparator Input Capture by Timer/Counter 1: Off
                    ACSR=0x80;
                    SFIOR=0x00;

                    // ADC initialization
                    // ADC Clock frequency: 86.400 kHz
                    // ADC Voltage Reference: Int., cap. on AREF
                    // ADC Auto Trigger Source: Timer0 Overflow
                    ADMUX=ADC_VREF_TYPE & 0xff;
                    ADCSRA=0xA7;
                    SFIOR&=0x1F;
                    SFIOR|=0x80;

                    // SPI initialization
                    // SPI disabled
                    SPCR=0x00;

                    // TWI initialization
                    // TWI disabled
                    TWCR=0x00;

                    // Global enable interrupts
                    #asm("sei&quot

                    while (1)
                    {
                    // Place your code here

                    }
                    }

                    دیدگاه


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

                      این خطایی که داده ربطی به adc و اینتراپت نداره.
                      دوباره از نو یه "پروژه" بساز و امتحان کن
                      گفت که دیوانه نهی لایق این خانه نهی

                      دیدگاه


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

                        نوشته اصلی توسط Finder_
                        این خطایی که داده ربطی به adc و اینتراپت نداره.
                        دوباره از نو یه "پروژه" بساز و امتحان کن
                        اینکار و کردم،اون درست شد..!اما خروجی مناسب از این برنامه ندارم..علت چیه؟؟

                        دیدگاه


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

                          نوشته اصلی توسط m-gazichi
                          اینکار و کردم،اون درست شد..!اما خروجی مناسب از این برنامه ندارم..علت چیه؟؟
                          به صورت دقیق بفرمایید چه کاری باید انجام بده و نمیده
                          گفت که دیوانه نهی لایق این خانه نهی

                          دیدگاه


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

                            تفاوت معرفی متغیر های عمومی قبل و بعد از تابع main در چی هست؟

                            دیدگاه


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

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

                              دیدگاه


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

                                متغییر های محلی در درون توابع تعریف میشوند و فقط در همون تابع معتبر هستند. مثل متغییری که داخل تابع main تعریف میشه
                                lمنظور شما اینه که اگر تابعی درون تابع main تعریف بشه ، در یک تابعی که اون هم خودش درون تابع main هست معتبر نیست؟








                                دیدگاه

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