logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega32][SiProg] Zablokowana atmega32 po programowaniu, fusebits nie ruszane

Ayzel 25 Lut 2012 22:38 2322 3
REKLAMA
  • #1 10599215
    Ayzel
    Poziom 10  
    Witam.

    Ostatnio zablokowałem dwie Atmegi32 w niezrozumiały dla mnie sposób.
    Pierwsza Atmega32 działała dłuższy czas na kwarcu 16Mhz. Ostatnio chciałem wgrać na nią program z http://tuxgraphics.org/electronics/200606/article06061.shtml ze stosem TCP/IP. Przerobiłem program testowy na potrzeby Atmegi32 (m.in. ustawiłem F_CPU 16000000UL) po czym przez program PonyProg2000 wgrałem go na Atmege32. Po tym zabiegu mikrokontroler nie odpowiada na próby read/write PonyProga.

    Tak więc po zdobyciu drugiej Atmegi32 kontynuowałem zabawę z programem z tuxgraphics. Atmege ustawiłem fusebitami na wewnętrzny generator 8Mhz, program F_CPU 8000000UL i wszystko grało. Dzisiaj chciałem przestawić wszystko na 16Mhz. W programie zmieniłem jedynie F_CPU na 16000000UL (makefile -DF_CPU=16000000UL) po czym wgrałem program na Atmege i tak jak poprzednio nastąpił zgon :/ Miałem w planach po prawidłowym wgraniu programu zmienić fusebity, ale jak widać już nie dało rady.

    Program w zablokowanych Atmegach w ogóle nie startuje. Porty które powinny być podciągnięte do VCC leżą przy GND.

    Macie może jakieś pomysły co jest przyczyną takiego zachowania?

    Dodam jeszcze, że w pierwszej oraz drugiej atmedze stan wysoki mają jedynie piny PC2,PC3,PC5.
  • REKLAMA
  • #2 10599896
    Gienek
    Poziom 37  
    Pytanie: czy Ty sam kompilowałeś program dla Atmegi32? Na wskazanej stronie jest używany procesor Atmega88.
  • REKLAMA
  • #3 10600043
    Ayzel
    Poziom 10  
    Tak sam kompilowałem polecenie - "make test1.hex"

    MCU=atmega32
    F_CPU=16000000
    CC=avr-gcc
    OBJCOPY=avr-objcopy
    # optimize for size:
    CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues
    
    eth_rem_dev.hex : eth_rem_dev.out 
    	$(OBJCOPY) -R .eeprom -O ihex eth_rem_dev.out eth_rem_dev.hex 
    	avr-size eth_rem_dev.out
    	@echo " "
    	@echo "Expl.: data=initialized data, bss=uninitialized data, text=code"
    	@echo " "
    
    eth_rem_dev.out : main.o ip_arp_udp.o enc28j60.o timeout.o
    	$(CC) $(CFLAGS) -o eth_rem_dev.out -Wl,-Map,eth_rem_dev.map main.o ip_arp_udp.o enc28j60.o timeout.o
    enc28j60.o : enc28j60.c avr_compat.h timeout.h enc28j60.h
    	$(CC) $(CFLAGS) -Os -c enc28j60.c
    ip_arp_udp.o : ip_arp_udp.c net.h avr_compat.h enc28j60.h
    	$(CC) $(CFLAGS) -Os -c ip_arp_udp.c
    main.o : main.c ip_arp_udp.h avr_compat.h enc28j60.h timeout.h net.h
    	$(CC) $(CFLAGS) -Os -c main.c
    timeout.o : timeout.c timeout.h 
    	$(CC) $(CFLAGS) -Os -c timeout.c
    
    
    test1.hex : test1.out 
    	$(OBJCOPY) -R .eeprom -O ihex test1.out test1.hex 
    	avr-size test1.out
    	@echo " "
    	@echo "Expl.: data=initialized data, bss=uninitialized data, text=code"
    	@echo " "
    test1.out : test1.o enc28j60.o timeout.o ip_arp_udp.o
    	$(CC) $(CFLAGS) -DF_CPU=$(F_CPU)UL -o test1.out -Wl,-Map,test1.map test1.o enc28j60.o timeout.o ip_arp_udp.o
    test1.o : test1.c ip_arp_udp.h avr_compat.h enc28j60.h timeout.h net.h
    	$(CC) $(CFLAGS) -DF_CPU=$(F_CPU)UL -Os -c test1.c
  • #4 10600269
    Gienek
    Poziom 37  
    No, nie wiem czy samo ustawienie MCU=atmega32 i zmiana kwarcu pozwoli na konwersję kodu z Atmega88 na Atmega32. Sprawdź jaka jest konfiguracja portów w obu procesorach.
REKLAMA