اطلاعیه

Collapse
No announcement yet.

mega8

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

    mega8

    بچه ها مگه مداری که برای راه اندازی مگا 8 لازم است با دیگر میکر و ها مثل مگا هشت تفاوت داره؟
    من هر کاری می کنم میکرو برنامه ای رو که نوشتم اجرا نمی کنه
    اینم برنامم
    #include <avr/io.h>
    #include <util/delay.h>

    int main()
    {
    DDRD=0xff;
    DDRB=0xff;
    DDRC=0xff;
    while(1)
    {
    PORTB=0xff;
    PORTD=0;
    PORTC=0;
    _delay_ms(100000);
    PORTD=0xff;
    PORTB=0;
    PORTC=0;
    _delay_ms(100000);
    PORTC=0xff;
    PORTD=0;
    PORTB=0;
    _delay_ms(100000);

    }
    }

    #2
    پاسخ : mega8

    باید به کامپایلر با سوییچ mmcu بگید برنامه رو برای atmega8 کامپایل کنه.
    برای اینکه آدرس درستی رو برای رجیسترها در نظر بگیره.

    کد:
    avr-gcc -mmcu=atmega8 -DF_CPU=1000000 main.c -o main.o


    اگر Makefie دارید اونو باید ادیت کنید.
    چگونه هوشمندانه بپرسیم

    دیدگاه


      #3
      پاسخ : mega8

      با codevision داری مینویسی یا AVR ؟
      خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

      دیدگاه


        #4
        پاسخ : mega8

        نوشته اصلی توسط حمید نجفی
        با codevision داری مینویسی یا AVR ؟
        از include ها معلومه ماله Avr-libc هست ( Winavr )
        چگونه هوشمندانه بپرسیم

        دیدگاه


          #5
          پاسخ : mega8

          اولا که من از winavr استفاده می کنم
          اولش که پروژه رو ایجاد می کنم مگا 8 رو انتخاب می کنم
          این makefile رو ما آخرش قضیش رو نفهمیدیم چطوریاست

          دیدگاه


            #6
            پاسخ : mega8

            نوشته اصلی توسط khatarat
            اولا که من از winavr استفاده می کنم
            اولش که پروژه رو ایجاد می کنم مگا 8 رو انتخاب می کنم
            این makefile رو ما آخرش قضیش رو نفهمیدیم چطوریاست
            من ایجاد پروژه و اینا بیلمیرم
            Makefile تونو بزارید اینجا تا ببینم

            ( شعر نو شد ! :mrgreen: )

            مطالعه بیشتر در مورد Makefile ( کلیک کنید! )
            چگونه هوشمندانه بپرسیم

            دیدگاه


              #7
              پاسخ : mega8

              ################################################## #############################
              # Makefile for the project mega8
              ################################################## #############################

              ## General Flags
              PROJECT = mega8
              MCU = atmega8
              TARGET = mega8.elf
              CC = avr-gcc.exe

              ## Options common to compile, link and assembly rules
              COMMON = -mmcu=$(MCU)

              ## Compile options common for all C compilation units.
              CFLAGS = $(COMMON)
              CFLAGS += -Wall -gdwarf-2 -O0
              CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

              ## Assembly specific flags
              ASMFLAGS = $(COMMON)
              ASMFLAGS += $(CFLAGS)
              ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

              ## Linker flags
              LDFLAGS = $(COMMON)
              LDFLAGS +=


              ## Intel Hex file production flags
              HEX_FLASH_FLAGS = -R .eeprom

              HEX_EEPROM_FLAGS = -j .eeprom
              HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
              HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings


              ## Objects that must be built in order to link
              OBJECTS = mega8.o

              ## Objects explicitly added by the user
              LINKONLYOBJECTS =

              ## Build
              all: $(TARGET) mega8.hex mega8.eep size

              ## Compile
              mega8.o: ../mega8.c
              $(CC) $(INCLUDES) $(CFLAGS) -c $<

              ##Link
              $(TARGET): $(OBJECTS)
              $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

              %.hex: $(TARGET)
              avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@

              %.eep: $(TARGET)
              -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0

              %.lss: $(TARGET)
              avr-objdump -h -S $< > $@

              size: ${TARGET}
              @echo
              @avr-size -C --mcu=${MCU} ${TARGET}

              ## Clean target
              .PHONY: clean
              clean:
              -rm -rf $(OBJECTS) mega8.elf dep/* mega8.hex mega8.eep

              ## Other dependencies
              -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)

              دیدگاه


                #8
                پاسخ : mega8

                Makefile مشکل خاصی نداره

                فقط موقع کامپایل Warning ندارید ؟
                اینطوری :
                کد:
                avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -O0 -MD -MP -MT mega8.o -MF dep/mega8.o.d -c mega8.c
                In file included from mega8.c:2:
                /usr/lib/gcc/avr/4.3.2/../../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"
                /usr/lib/gcc/avr/4.3.2/../../../avr/include/util/delay.h:90:3: warning: #warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"


                چون F_CPU تعریف نشده. این ثابت ، فرکانس کارو برای محاسبهٔ زمان تاخیر ست میکنه. ( delay.h بهش نیاز داره )
                در ضمن توی خط ۱۶ Optimize کردن کامپایلر غیرفعال شده. وقتی دارید از delay.h استفاده میآ‌کنید باید optimization فعال باشه

                من یه زره Makefile ادیت کردم
                * تو خط ۱۲ ثابت F_CPU تعریف شده روی 1MHz ، فیوز بیتهای مریوط به فرکانس میکرو هم باید روی همین فرکانس تنظیم بشن تا زمان Delayها درست باشن
                * در خط ۱۶ هم O 0 به O1 تغییر پیدا کرده. ( optimization فعال شده )
                دیگه نباید Warning داشته باشید.
                از این استفاده کنید :
                http://rafb.net/p/7gDVlw75.html

                ( چه جالب ! بین O و 0 فاصله نزاریم میشه این O0 )

                احتمال داره که چون تاخیرها درست محاسبه نشدن شما فکر کنید که برنامه در حال کار کردن نیست.
                با این Makefile تست کنید اگر درست نشد یه فکر دیگه بکنیم !

                چگونه هوشمندانه بپرسیم

                دیدگاه


                  #9
                  پاسخ : mega8

                  اگر با چیزی که بالا گفتم جواب نگرفتید ،برنامتونو به اینصورت تغییر بدبد :

                  کد PHP:
                  #include <avr/io.h>
                  #include <util/delay.h>

                  void delay_sfloat sec );

                  int main()
                  {
                   
                  DDRD=0xff;
                   
                  DDRB=0xff;
                   
                  DDRC=0xff;
                   while(
                  1)
                   {
                     
                  PORTB=0xff;
                     
                  PORTD=0;
                     
                  PORTC=0;
                     
                  delay_s(2);
                     
                  PORTD=0xff;
                     
                  PORTB=0;
                     
                  PORTC=0;
                     
                  delay_s(2);
                     
                  PORTC=0xff;
                     
                  PORTD=0;
                     
                  PORTB=0;
                     
                  delay_s(2);
                   }
                  }

                  void delay_sfloat sec ){
                      
                  int i;
                      
                      
                  sec *= 1000;
                      for( 
                  i=i<=sec i++ ){
                          
                  _delay_ms(1);
                      }

                  چگونه هوشمندانه بپرسیم

                  دیدگاه

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