2016-05-05 4 views
0

私は、arduino uno R3をISPプログラマとして使用して、ATMELのATMEGA32A-PUマイクロコントローラをプログラミングしようとしています。ここにあるチュートリアルに従っていた:http://hackaday.com/2010/10/23/avr-programming-introduction/Arduino R3を使用してATMEGA32A-PUをプログラミングする

このチュートリアルでは、ATMEGA168チップのプログラミングについて説明します。私はATMEGA32のデータシートを調べ、配線を調整しました。私は正しく信じています。そして、チップをプログラムするためにavrdudeを使用しています。

私はWindows 10 x64を使用しています。 WinAVR-20100110をダウンロードしました。

hackadayの指示から私はarduino IDEのFILE-> examplesのArduinoISPスケッチを使ってarduinoをロードしました。私は変更を加えなかった。 10アルドゥイーノする(RST)13
9アルドゥイーノする12
8(SCK)をArduinoのために11
7(MISO)をアルドゥイーノする
6(MOSI):

atmega32チップ上のピンがこのように接続されています。
10(VCC)GND


31(GND)を5VにGND
30(AVCC)に
11(GND)を5VにIは、電力およびgrouを供給するためのArduinoの5VおよびGNDピンを使用していAVRに連絡してください。 CMDプロンプトから私が実行しています:avrdude -v -P COM3 -b 19200 -c avrisp -p atmega32 -U flash:w:main.hex

avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23 
     Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ 
     Copyright (c) 2007-2009 Joerg Wunsch 

     System wide configuration file is "C:\WinAVR-20100110\bin\avrdude.conf" 

     Using Port     : COM3 
     Using Programmer    : avrisp 
     Overriding Baud Rate   : 19200 
     AVR Part      : ATMEGA32 
     Chip Erase delay    : 9000 us 
     PAGEL       : PD7 
     BS2       : PA0 
     RESET disposition    : dedicated 
     RETRY pulse     : SCK 
     serial program mode   : yes 
     parallel program mode   : yes 
     Timeout      : 200 
     StabDelay      : 100 
     CmdexeDelay     : 25 
     SyncLoops      : 32 
     ByteDelay      : 0 
     PollIndex      : 3 
     PollValue      : 0x53 
     Memory Detail     : 

            Block Poll    Page      Polled 
      Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack 
      ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- 
      eeprom   4 10 64 0 no  1024 4  0 9000 9000 0xff 0xff 
      flash   33  6 64 0 yes  32768 128 256 4500 4500 0xff 0xff 
      lfuse   0  0  0 0 no   1 0  0 2000 2000 0x00 0x00 
      hfuse   0  0  0 0 no   1 0  0 2000 2000 0x00 0x00 
      lock   0  0  0 0 no   1 0  0 2000 2000 0x00 0x00 
      signature  0  0  0 0 no   3 0  0  0  0 0x00 0x00 
      calibration 0  0  0 0 no   4 0  0  0  0 0x00 0x00 

     Programmer Type : STK500 
     Description  : Atmel AVR ISP 
     Hardware Version: 2 
     Firmware Version: 1.18 
     Topcard   : Unknown 
     Vtarget   : 0.0 V 
     Varef   : 0.0 V 
     Oscillator  : Off 
     SCK period  : 0.1 us 

avrdude: AVR device initialized and ready to accept instructions 

Reading | ################################################## | 100% 0.06s 

avrdude: Device signature = 0x1e9502 
avrdude: safemode: lfuse reads as E1 
avrdude: safemode: hfuse reads as 99 
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed 
     To disable this feature, specify the -D option. 
avrdude: erasing chip 
avrdude: reading input file "main.hex" 
avrdude: input file main.hex auto detected as Intel Hex 
avrdude: writing flash (144 bytes): 

Writing | ################################################## | 100% 0.22s 

avrdude: 144 bytes of flash written 
avrdude: verifying flash memory against main.hex: 
avrdude: load data flash data from input file main.hex: 
avrdude: input file main.hex auto detected as Intel Hex 
avrdude: input file main.hex contains 144 bytes 
avrdude: reading on-chip flash data: 

Reading | ################################################## | 100% 0.12s 

avrdude: verifying ... 
avrdude: 144 bytes of flash verified 

avrdude: safemode: lfuse reads as E1 
avrdude: safemode: hfuse reads as 99 
avrdude: safemode: Fuses OK 

avrdude done. Thank you. 

それはプログラミングを通過し、それが正常に144のバイトを書いたと言います。私はstk500を使ってみましたが、上記のコマンドの出力には言及していますが、私はそれを行うとタイムアウトエラーが発生します。私がしようとしているのはテスト目的のために、PORTDから8個のLEDを点灯させることです。私はavr/io.hと

を含んでいます
int main(void) 
{ 
DDRD |= 0xff;  //Set PortD Pins as an output 
PORTD |= 0xff;  //Set PortD Pins high to turn on LEDs 
while(1) { }  //Loop forever 
} 

残念ながら、PD1は唯一のライトアップにつながっています。残りの人は何もしません。

ブレッドボードに接続されたマイクロコントローラは、ピン4-21がそれぞれ470Ωの抵抗に接続されています。抵抗は、それぞれ独自のLEDに接続し、LEDはグランドに接続します。

+0

正しくプログラミングしているようです。 Avrdudeは正しく応答しており、atmega32から何らかの動作が得られています。しかし、LEDがAtmega32にどのように接続されているかは教えてください。それはいくつかの標準的なdevのボードですか? – UncleO

+0

何らかの配線問題があるかもしれません。 1つの可能性は、ポートを流れる電流が非常に制限されていることです。抵抗には適切な値が設定されていない可能性があります。 PD1 LEDはどれくらい明るいですか?それを取り外すと、別のLEDが点灯しますか? – UncleO

+0

それで、文字通りちょっとした変更を加えました。私は問題を解決しました。それは私が従っていた指示書から提供されたmakefileにありました。私はmakefileにAVRを指定したことを認識しませんでした。私は、COM3上でATMEGA32をプログラミングしていて、プログラムをリロードして今すぐ動作すると言い換えました。 – jwaldorf2

答えて

0

問題はメイクファイルにありました。私はAVRがhackadayチュートリアルの指示書からダウンロードしたmakefileにリストされていることを認識しませんでした。 MCU、AVRDUDE_PROGRAMMER、PORTをメイクファイルで変更した後、それは魅力的だった。

# WinAVR Sample makefile written by Eric B. Weddington, J�rg Wunsch, et al. 
# Modified (bringing often-changed options to the top) by Elliot Williams 

# make all = Make software and program 
# make clean = Clean out built project files. 
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB). 
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio 
#    4.07 or greater). 
# make program = Download the hex file to the device, using avrdude. Please 
#    customize the avrdude settings below first! 
# make filename.s = Just compile filename.c into the assembler code only 
# To rebuild project do "make clean" then "make all". 

# Microcontroller Type 
# MCU = attiny13 
# MCU = attiny2313 
# MCU = atmega8 
# MCU = atmega168 
MCU = atmega32 # CHANGED THIS TO THE MCU THAT I'M TRYING TO PROGRAM 

# Target file name (without extension). 
TARGET = main 

# Programming hardware: type avrdude -c ? 
# to get a full listing. 
# AVRDUDE_PROGRAMMER = dapa    # official name of 
# AVRDUDE_PROGRAMMER = dragon_isp 
AVRDUDE_PROGRAMMER = avrisp # CHANGED THIS TO THE ISP I'M USING TO PROGRAM 

AVRDUDE_PORT = COM3   # CHANGED THIS TO THE PORT ARDUINO IS CONNECTED TO 
#AVRDUDE_PORT = usb   # linux for dragon 
#AVRDUDE_PORT = /dev/parport0   # linux 
#AVRDUDE_PORT = lpt1    # windows 

############# Don't need to change below here for most purposes (Elliot) 

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. 
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) 
OPT = s 

# Output format. (can be srec, ihex, binary) 
FORMAT = ihex 

# List C source files here. (C dependencies are automatically generated.) 
SRC = $(TARGET).c 

# If there is more than one source file, append them above, or modify and 
# uncomment the following: 
#SRC += foo.c bar.c 

# You can also wrap lines by appending a backslash to the end of the line: 
#SRC += baz.c \ 
#xyzzy.c 



# List Assembler source files here. 
# Make them always end in a capital .S. Files ending in a lowercase .s 
# will not be considered source files but generated files (assembler 
# output from the compiler), and will be deleted upon "make clean"! 
# Even though the DOS/Win* filesystem matches both .s and .S the same, 
# it will preserve the spelling of the filenames, and gcc itself does 
# care about how the name is spelled on its command-line. 
ASRC = 


# List any extra directories to look for include files here. 
#  Each directory must be seperated by a space. 
EXTRAINCDIRS = 


# Optional compiler flags. 
# -g:  generate debugging information (for GDB, or for COFF conversion) 
# -O*:  optimization level 
# -f...:  tuning, see gcc manual and avr-libc documentation 
# -Wall...: warning level 
# -Wa,...: tell GCC to pass this to the assembler. 
# -ahlms: create assembler listing 
CFLAGS = -g -O$(OPT) \ 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ 
-Wall -Wstrict-prototypes \ 
-Wa,-adhlns=$(<:.c=.lst) \ 
$(patsubst %,-I%,$(EXTRAINCDIRS)) 


# Set a "language standard" compiler flag. 
# Unremark just one line below to set the language standard to use. 
# gnu99 = C99 + GNU extensions. See GCC manual for more information. 
#CFLAGS += -std=c89 
#CFLAGS += -std=gnu89 
#CFLAGS += -std=c99 
CFLAGS += -std=gnu99 



# Optional assembler flags. 
# -Wa,...: tell GCC to pass this to the assembler. 
# -ahlms: create listing 
# -gstabs: have the assembler create line number information; note that 
#    for use in COFF files, additional information about filenames 
#    and function names needs to be present in the assembler source 
#    files -- see avr-libc docs [FIXME: not yet described there] 
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 



# Optional linker flags. 
# -Wl,...: tell GCC to pass this to linker. 
# -Map:  create map file 
# --cref: add cross reference to map file 
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref 



# Additional libraries 

# Minimalistic printf version 
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min 

# Floating point printf version (requires -lm below) 
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt 

# -lm = math library 
LDFLAGS += -lm 


# Programming support using avrdude. Settings and variables. 


AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex 
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep 

AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) 

# Uncomment the following if you want avrdude's erase cycle counter. 
# Note that this counter needs to be initialized first using -Yn, 
# see avrdude manual. 
#AVRDUDE_ERASE += -y 

# Uncomment the following if you do /not/ wish a verification to be 
# performed after programming the device. 
#AVRDUDE_FLAGS += -V 

# Increase verbosity level. Please use this when submitting bug 
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
# to submit bug reports. 
#AVRDUDE_FLAGS += -v -v 

#Run while cable attached or don't 
#AVRDUDE_FLAGS += -E reset #keep chip disabled while cable attached 
#AVRDUDE_FLAGS += -E noreset 

#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x04:m #run with 8 Mhz clock 

#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x21:m #run with 1 Mhz clock #default clock mode 

#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x01:m #run with 1 Mhz clock no start up time 

# --------------------------------------------------------------------------- 

# Define directories, if needed. 
DIRAVR = c:/winavr 
DIRAVRBIN = $(DIRAVR)/bin 
DIRAVRUTILS = $(DIRAVR)/utils/bin 
DIRINC = . 
DIRLIB = $(DIRAVR)/avr/lib 


# Define programs and commands. 
SHELL = sh 

CC = avr-gcc 

OBJCOPY = avr-objcopy 
OBJDUMP = avr-objdump 
SIZE = avr-size 


# Programming support using avrdude. 
AVRDUDE = avrdude 


REMOVE = rm -f 
COPY = cp 

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex 
ELFSIZE = $(SIZE) -AC --mcu=$(MCU) $(TARGET).elf 



# Define Messages 
# English 
MSG_ERRORS_NONE = Errors: none 
MSG_BEGIN = -------- begin -------- 
MSG_END = -------- end -------- 
MSG_SIZE_BEFORE = Size before: 
MSG_SIZE_AFTER = Size after: 
MSG_COFF = Converting to AVR COFF: 
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: 
MSG_FLASH = Creating load file for Flash: 
MSG_EEPROM = Creating load file for EEPROM: 
MSG_EXTENDED_LISTING = Creating Extended Listing: 
MSG_SYMBOL_TABLE = Creating Symbol Table: 
MSG_LINKING = Linking: 
MSG_COMPILING = Compiling: 
MSG_ASSEMBLING = Assembling: 
MSG_CLEANING = Cleaning project: 




# Define all object files. 
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 

# Define all listing files. 
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) 

# Combine all necessary flags and optional flags. 
# Add target processor to flags. 
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) 
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) 



# Default target: make program! 
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ 
    $(TARGET).lss $(TARGET).sym sizeafter finished end 
    $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) 

# Eye candy. 
# AVR Studio 3.x does not check make's exit code but relies on 
# the following magic strings to be generated by the compile job. 
begin: 
    @echo 
    @echo $(MSG_BEGIN) 

finished: 
    @echo $(MSG_ERRORS_NONE) 

end: 
    @echo $(MSG_END) 
    @echo 


# Display size of file. 
sizebefore: 
    @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi 

sizeafter: 
    @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi 



# Display compiler version information. 
gccversion : 
    @$(CC) --version 




# Convert ELF to COFF for use in debugging/simulating in 
# AVR Studio or VMLAB. 
COFFCONVERT=$(OBJCOPY) --debugging \ 
    --change-section-address .data-0x800000 \ 
    --change-section-address .bss-0x800000 \ 
    --change-section-address .noinit-0x800000 \ 
    --change-section-address .eeprom-0x810000 


coff: $(TARGET).elf 
    @echo 
    @echo $(MSG_COFF) $(TARGET).cof 
    $(COFFCONVERT) -O coff-avr $< $(TARGET).cof 


extcoff: $(TARGET).elf 
    @echo 
    @echo $(MSG_EXTENDED_COFF) $(TARGET).cof 
    $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof 




# Program the device. 
program: $(TARGET).hex $(TARGET).eep 
    $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) 




# Create final output files (.hex, .eep) from ELF output file. 
%.hex: %.elf 
    @echo 
    @echo $(MSG_FLASH) [email protected] 
    $(OBJCOPY) -O $(FORMAT) -R .eeprom $< [email protected] 

%.eep: %.elf 
    @echo 
    @echo $(MSG_EEPROM) [email protected] 
    -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ 
    --change-section-lma .eeprom=0 -O $(FORMAT) $< [email protected] 

# Create extended listing file from ELF output file. 
%.lss: %.elf 
    @echo 
    @echo $(MSG_EXTENDED_LISTING) [email protected] 
    $(OBJDUMP) -h -S $< > [email protected] 

# Create a symbol table from ELF output file. 
%.sym: %.elf 
    @echo 
    @echo $(MSG_SYMBOL_TABLE) [email protected] 
    avr-nm -n $< > [email protected] 



# Link: create ELF output file from object files. 
.SECONDARY : $(TARGET).elf 
.PRECIOUS : $(OBJ) 
%.elf: $(OBJ) 
    @echo 
    @echo $(MSG_LINKING) [email protected] 
    $(CC) $(ALL_CFLAGS) $(OBJ) --output [email protected] $(LDFLAGS) 


# Compile: create object files from C source files. 
%.o : %.c 
    @echo 
    @echo $(MSG_COMPILING) $< 
    $(CC) -c $(ALL_CFLAGS) $< -o [email protected] 


# Compile: create assembler files from C source files. 
%.s : %.c 
    $(CC) -S $(ALL_CFLAGS) $< -o [email protected] 


# Assemble: create object files from assembler source files. 
%.o : %.S 
    @echo 
    @echo $(MSG_ASSEMBLING) $< 
    $(CC) -c $(ALL_ASFLAGS) $< -o [email protected] 






# Target: clean project. 
clean: begin clean_list finished end 

clean_list : 
    @echo 
    @echo $(MSG_CLEANING) 
    $(REMOVE) $(TARGET).hex 
    $(REMOVE) $(TARGET).eep 
    $(REMOVE) $(TARGET).obj 
    $(REMOVE) $(TARGET).cof 
    $(REMOVE) $(TARGET).elf 
    $(REMOVE) $(TARGET).map 
    $(REMOVE) $(TARGET).obj 
    $(REMOVE) $(TARGET).a90 
    $(REMOVE) $(TARGET).sym 
    $(REMOVE) $(TARGET).lnk 
    $(REMOVE) $(TARGET).lss 
    $(REMOVE) $(OBJ) 
    $(REMOVE) $(LST) 
    $(REMOVE) $(SRC:.c=.s) 
    $(REMOVE) $(SRC:.c=.d) 
    $(REMOVE) *~ 

# Automatically generate C source code dependencies. 
# (Code originally taken from the GNU make user manual and modified 
# (See README.txt Credits).) 
# 
# Note that this will work with sh (bash) and sed that is shipped with WinAVR 
# (see the SHELL variable defined above). 
# This may not work with other shells or other seds. 
# 
%.d: %.c 
    set -e; $(CC) -MM $(ALL_CFLAGS) $< \ 
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > [email protected]; \ 
    [ -s [email protected] ] || rm -f [email protected] 


# Remove the '-' if you want to see the dependency files generated. 
-include $(SRC:.c=.d) 



# Listing of phony targets. 
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ 
    clean clean_list program 
関連する問題