Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

arduino,atmega8 - Programowanie ISP przez Arduino jako ISPprogramer, avrdude

Sibi 24 Wrz 2016 21:55 1320 0
  • #1
    Sibi
    Poziom 11  
    Straciłem cały dzień, by do tej głupoty dojść, więc podzielę się - niech google zindeksuje rozwiązanie.

    "Arduino as isp programmer" - jasna sprawa, tysiące poradników w sieci, jak podłączyć i co kliknąć. Jednej rzeczy nie piszą - że arduino jako ISP nie programuje fusebitów.

    Potrzebowałem na szybko Atmega8 zaprogramować.
    ArduinoUno z wgranym skeczem ISP - ok działa.

    Napisałem na szybko "migaj diodą" dla Atmega8, ustawiona płytka na ArduinoNG:atmega8, programator ArduinoISP na COM3 - wgrywa się wspaniale, ale program miga diodą 16 razy za wolno! Prosty wniosek - atmega8 chodzi na fabrycznym ustawieniu 1MHz oscylator RC wewnętrznym, zamiast 16MHz zewnętrznym.

    Arduino nie ma (chyba) żadnych opcji programowania fusebitów, trzeba ręcznie zrobić przez AVRDUDE. Pytanie - jak?

    Otóż - jest mała pułapka.
    Code:
     avrdude -patmega8 -carduino -PCOM3 -B8 

    nie gada wcale z docelowym Atmega8, krzyczy o niezgodności sygnatury
    Code:
    avrdude  -patmega8 -carduino -PCOM3  -B8
    

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% -0.00s

    avrdude: Device signature = 0x1e950f (probably m328p)
    avrdude: Expected signature for ATmega8 is 1E 93 07
             Double check chip, or use -F to override this check.

    avrdude done.  Thank you.


    Wykryta sygnatura ... to Atmega328, czyli avrdude próbuje programować AVR w samym Arduino (zapewne używając jego bootloadera), a nie procesor docelowy przy pomocy arduino.

    Pełny sukces uzyskujemy dodając taki niewinny parametr jak prędkość komunikacji (!?) -b19200
    Code:
    avrdude  -patmega8 -carduino -PCOM3 -b19200 -B8
    

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e9307 (probably m8)

    avrdude: safemode: Fuses OK (E:FF, H:D9, L:E1)

    avrdude done.  Thank you.


    Tak więc działa. Zaprogramowanie fusebitów (np tutaj dla Atmega8 z zewnętrznym kwarcem 16MHz) już idzie:
    Code:
    avrdude  -patmega8 -carduino -PCOM3 -b19200 -B8 -e -u -U lfuse:w:0xBF:m -U hfuse:w:0xC9:m
    

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e9307 (probably m8)
    avrdude: erasing chip
    avrdude: reading input file "0xBF"
    avrdude: writing lfuse (1 bytes):

    Writing | ################################################## | 100% 0.02s

    avrdude: 1 bytes of lfuse written
    avrdude: verifying lfuse memory against 0xBF:
    avrdude: load data lfuse data from input file 0xBF:
    avrdude: input file 0xBF contains 1 bytes
    avrdude: reading on-chip lfuse data:

    Reading | ################################################## | 100% 0.02s

    avrdude: verifying ...
    avrdude: 1 bytes of lfuse verified
    avrdude: reading input file "0xC9"
    avrdude: writing hfuse (1 bytes):

    Writing | ################################################## | 100% 0.00s

    avrdude: 1 bytes of hfuse written
    avrdude: verifying hfuse memory against 0xC9:
    avrdude: load data hfuse data from input file 0xC9:
    avrdude: input file 0xC9 contains 1 bytes
    avrdude: reading on-chip hfuse data:

    Reading | ################################################## | 100% -0.00s

    avrdude: verifying ...
    avrdude: 1 bytes of hfuse verified

    avrdude done.  Thank you.
  • PCBway