اطلاعیه

Collapse
No announcement yet.

winavr و adc

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

    winavr و adc

    سلام
    دوستان من این برنامه نوشتم با موفقیت کامپایل میشه ولی نه در سیمولاتور avr studio درست کار میکنه و نه در روی مدار.
    کد:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    uint16_t ch;
    int fl=1;
    //****************************************************************
    void int_usart(void){
    	UCSRB=(1<<TXEN);
    	UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    	UCSRA=(1<<U2X);
    	UBRRL=103;
    }
    //*******************************************************************
    void int_adc(void){
    //set refrence voltag
    //set channal input and gain
    	ADMUX|=(1<<REFS0)|(0<<REFS1)|(1<<MUX1);
    	ADCSRA|=(1<<ADEN)|(0<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
    	SREG|=(1<<7);
    }
    //*******************************************************************
    ISR(ADC_vect){
    	PORTC|=(1<<1);
    	ch=ADCL;
    	UDR='2';
    	UDR=ch;
    	ch=ADCH;
    	fl=1;
    }
    //*******************************************************************
    int main(void){
    	DDRC=0xFF;
    	int_usart();
    	int_adc();
    	UDR='y';
    	sei();
    	PORTC|=(1<<0);
    	for(;;){
    		UDR='B';
    		if(fl==1){
    			ADCSRA|=(1<<ADIE)|(1<<ADSC);
    			fl=0;
    			PORTC|=(1<<2);
    			UDR='I';
    		}
    		if(bit_is_set(ADCSRA,ADIF)){
    			UDR='s';
    			fl=1;
    		}
    		
    		_delay_ms(500);
    	}
    return 0;
    }

    فرکانس کاری میکرو 8 مگا
    نوع میکرو atmega16
    کانال adc1
    مد single convertion
    دوییژن 64
    رفرنش وتاژ:avcc با خازن
    مشکل اینجاست که من هم اینتراپت adc رو فعال کردم(ADIE) و هم از بیت ADIF پبگیرم ولی نه وقفه ای رخ میده و نه ADIF ست میشه.من این برنامه رو با »:
    http://winavr.scienceprog.com/example-avr-projects/programming-avr-adc-module-with-winavr.html
    http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2006-04/msg01016.html
    مقایسه کردم هیچ موردی نبوده که در این ایجا بوده باشه و من لحاظ نکرده باشم.
    و این شد که مزاحم دوستان شدم.....

    #2
    پاسخ : winavr و adc

    شما باید ببینی اول مشکل تون مال سخت افزاز نباشه ( نویز گرفتن ...)
    چرا از کتابخانه آماده استفاده نمی کنید؟
    Difficult But possible
    به اميد ايراني آباد.
    http://art-net.ir

    دیدگاه


      #3
      پاسخ : winavr و adc

      نوشته اصلی توسط علی-
      شما باید ببینی اول مشکل تون مال سخت افزاز نباشه ( نویز گرفتن ...)
      چرا از کتابخانه آماده استفاده نمی کنید؟
      avcc با یک فیلتر lc وصل شده به vcc
      aref با خازن 100 نانو به گراند.
      مشکل دقیقا اینجاست که وقفه هیج وقت رخ نمیده و بهمین ترتیب بیت ADIF هیچوقت یک نمیشه!دلیلش رو نمیدونم.

      دیدگاه


        #4
        پاسخ : winavr و adc

        سلام
        مشکل شما تو optimizer هستش.
        هر وقت از این جور مشکلها داشتید به منوی Project / Configuration option برید و optimizition رو روی -O0 قرار بدید. اونموقع حجم برنامه زیاد میشه، ولی اگه کار کرد میفهمید که Optimizer که کارش حذف سطرهای اضافی یا ادغام چند سطر با هم هست داره تو منطق برنامه شما مشکل بوجود میاره. در 99 درصد موارد این مشکل با متغییر های global هستش که قرار تو اینتراپت ها مقدارشون عوض بشه و برنامه اصلی منتظر تغییر مقدار اونهاست. کافیه اون متغییرهای global رو با پیشوند volatile تعریف کنید.

        فایل ضمینه کاملتر توضیح میده
        فایل های پیوست شده
        بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
        اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

        دیدگاه


          #5
          پاسخ : winavr و adc

          نوشته اصلی توسط mostafahk
          سلام
          مشکل شما تو optimizer هستش.
          هر وقت از این جور مشکلها داشتید به منوی Project / Configuration option برید و optimizition رو روی -O0 قرار بدید. اونموقع حجم برنامه زیاد میشه، ولی اگه کار کرد میفهمید که Optimizer که کارش حذف سطرهای اضافی یا ادغام چند سطر با هم هست داره تو منطق برنامه شما مشکل بوجود میاره. در 99 درصد موارد این مشکل با متغییر های global هستش که قرار تو اینتراپت ها مقدارشون عوض بشه و برنامه اصلی منتظر تغییر مقدار اونهاست. کافیه اون متغییرهای global رو با پیشوند volatile تعریف کنید.

          فایل ضمینه کاملتر توضیح میده
          من اپتیمایز رو غیر فعال کردم توفیقی حاصل نشد.

          دیدگاه


            #6
            پاسخ : winavr و adc

            volatile رو امتحان کنید. من که با اضافه کردن volatile تو شبیه سازی بارها اینتراپت صدا شد.
            بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
            اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

            دیدگاه

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