2016-05-15 14 views
0

私はArduino Unoのような開発ボードを使用するのではなく、AVRを直接使用しようとしました。私が見ている問題は、出力ピンに多くのLEDを駆動しようとするときです。その多くは、予想される5Vよりはるかに低い低電圧を読み取っています。AVR ATMEGA32A-PU低出力電圧

私は14MHzの水晶をオフにしています。私はAVRのヒューズを次のように設定しました: lfuse:0xFF hfuse:0x89 水晶はピンXTAL1 & XTAL2に接続します。水晶の各リードも22pFのセラミックコンデンサを介してGNDに接続されています。

私はVCCとGNDの間に.1uF電解キャップを接続し、もう1つはAVCCとGNDの間に陰極( - )をGND端子に接続しました。私の電源端子には10uFの電解キャップもあります。

次のようにATMEGA32Aへの接続は、次のとおり PB0-7を:OPEN RESET:5V GND:GND XTAL1:クリスタル XTAL2:クリスタル PD0-7:510オーム抵抗10K抵抗をVCC VCCにGND にLED PC0-7へ:5V GND:GND AREF:5V(だけでなく、このOPENを試みたがありません変更。) PA0-7:OPEN

PORTDは思わ510オームの抵抗GND にLED AVCCへちょうどうまく動作するように。私はこれらのピンのそれぞれにAVRから地面まで4.6Vの電圧降下を得ています。しかし、PORTCは正しく動作していません。私がC0から上に行くと、PORTCを上げるにつれて、それぞれのピンからの電圧降下が減少します。 PC0はほぼ4.6Vを供給します。それは2.2Vを測定するC7に達すると徐々に減少します。

何か特別な理由はありますか?私はAVRが必要とするいくつかのタイプの接続がないのですか?私の非常に単純なコードとmakefileは以下の通りです。

メイン

#include <avr/io.h> 
void setup(); 
void setup() 
{ 
    DDRD=0XFF; 
    PORTD = 0xff; 
    DDRC |= 0XfF; 
    PORTC = 0xff; 
} 
int main() 
{ 
    setup(); 
    while(1) 
    { 
    } 
    return 0; 
} 

メイク

MCU = atmega32 
# Target file name (without extension). 
TARGET = main 
AVRDUDE_PROGRAMMER = avrisp 
AVRDUDE_PORT = COM3 
OPT = s 
FORMAT = ihex 
SRC = $(TARGET).c 
#SRC += TimerOne.cpp 
EXTRAINCDIRS = 
CLOCK = 14745600 
CPU = F_CPU=$(CLOCK) 


# 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 \ 
$(patsubst %,-I%,$(EXTRAINCDIRS)) 

# -lm = math library 
LDFLAGS = -lm 
AVRDUDE = avrdude 
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b 19200 
AVRDUDE_FLAGS += -v 
# --------------------------------------------------------------------------- 

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

# Define programs and commands. 
CC = avr-g++ -D$(CPU) -D$(MCU) 
OBJCOPY = avr-objcopy 
OBJDUMP = avr-objdump 
SIZE = avr-size 
REMOVE = rm -f 
COPY = cp 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex 
ELFSIZE = $(SIZE) -AC --mcu=$(MCU) $(TARGET).elf 

# Define all object files. 
OBJ = $(patsubst src%,obj$(VERSION)%,$(patsubst %.c,%.o,$(SRC))) 
# 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: main.hex 

main.hex: main.elf 
    $(OBJCOPY) -O $(FORMAT) -R .eeprom main.elf main.hex 

main.elf: main.o 
    $(CC) $(ALL_CFLAGS) main.o --output main.elf $(LDFLAGS) 

main.o: 
    @echo 
    @echo $(MSG_COMPILING) $< 
    $(CC) -c $(ALL_CFLAGS) main.c -o [email protected] 

# Program the device. 
program: $(TARGET).hex 
    $(AVRDUDE) $(AVRDUDE_FLAGS) -U flash:w:$(TARGET).hex 

# Flash the device 
flash: 
    $(AVRDUDE) $(AVRDUDE_FLAGS) -U lfuse:w:0xFF:m -U hfuse:w:0x89:m 

# 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) $(TARGET).o 

# Listing of phony targets. 
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ 
    clean clean_list program 

答えて

1

私が唯一の私が最終的に検索の日後に自分で答えを見つける前に質問を依頼する必要があると思われます。多くの場合、答えはデータシートにありました。問題はヒューズビットでした。デフォルトでは、PORTCの一部であるJTAGインターフェイスが有効になっています。それがPORTCが正しく機能していなかった理由です。 HFUSEビットを0x89から0xC9に更新しました。これはJTAGインターフェイスを無効にし、PORTCは通常のIOポートのように動作しました。

関連する問題