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

Atmega 328P-PU - Nie mogę wgrać bootloadera przez USBasp

NIezmysl 18 Gru 2013 23:28 6045 8
  • #1 18 Gru 2013 23:28
    NIezmysl
    Poziom 7  

    Witajcie,

    mam problem z wgraniem bootloadera i co za tym idzie wgraniem do Atmegi 328p-pu programu. Wykonałem układ z poniższego projektu i teraz pozostało samo jego zaprogramowanie.

    Projekt ambient light

    Zakupiłem programator USBasp, wlutowałem jego linie bezpośrednio pod podstawkę na Atmegę w odpowiednich miejscach wg. specyfikacji atmelu.(MOSI,MISO, SCK, GND, RST).

    Próbuję wgrać cokolwiek przy podłączonym zasilaniu 12V do układu.

    Do pliku boards.txt z arduino ide dodałem

    Code:
    majsterkowo_atmega328p16.name=ATmega328P @ 16 MHz
    

    majsterkowo_atmega328p16.upload.maximum_size=30720
    majsterkowo_atmega328p16.upload.using=arduino:arduinoisp

    majsterkowo_atmega328p16.bootloader.low_fuses=0xE2
    majsterkowo_atmega328p16.bootloader.high_fuses=0xDA
    majsterkowo_atmega328p16.bootloader.extended_fuses=0x05

    majsterkowo_atmega328p16.bootloader.path=atmega
    majsterkowo_atmega328p16.bootloader.file=ATmegaBOOT_328.hex
    majsterkowo_atmega328p16.bootloader.unlock_bits=0x3F
    majsterkowo_atmega328p16.bootloader.lock_bits=0x0F

    majsterkowo_atmega328p16.build.mcu=atmega328p
    majsterkowo_atmega328p16.build.f_cpu=16000000L
    majsterkowo_atmega328p16.build.core=arduino
    majsterkowo_atmega328p16.build.variant=standard


    Wybieram w środowisku programator USBasp i po wduszeniu wypal bootloader konsola wyrzuca mi:
    Code:

    avrdude: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude: warning: cannot set sck period. please check for usbasp firmware update.


    Z tego co wiem to w układzie mam zewnętrzny kwarc 16Hz i pytanie czy w dobrym miejscu się wpiąłem programatorem? Co zrobiłem źle, że nie mogę wgrać nic na atmegę.

    Z góry dziękuję za pomoc.

    0 8
  • #2 18 Gru 2013 23:44
    mi14chal
    Poziom 28  

    Przecież jest wyraźnie napisane żeby zaktualizować firmware programatora, ewentualnie załóż zworkę SLOW_SCK.

    0
  • #3 18 Gru 2013 23:49
    Spooner
    Poziom 16  

    Jak kolega programuje przy pomocy arvdude to dodaj przełącznik "-B 8".
    Pomimo że masz wpięty kwarc, to procek chodzi na wewnętrznym 1MHz zegarze.
    Jeszcze są do przestawienia fusebity na zewnętrzny kwarc w twoim przypadku "-U lfuse:w:0xe2:m -U hfuse:w:0xda:m -U efuse:w:0x05:m"

    0
  • #4 19 Gru 2013 16:53
    NIezmysl
    Poziom 7  

    Ustawiłem fusebity komendą:

    Code:
    avrdude.exe -c usbasp -p m328p -U lfuse:w:0xe2:m -U hfuse:w:0xda:m -U efuse:w:0x05:m

    Atmega 328P-PU - Nie mogę wgrać bootloadera przez USBasp
    potem wgrałem bootloader
    Code:
    avrdude.exe -c usbasp -p m328p -B 8 -U flash:w:ATmegaBOOT_328.hex

    Atmega 328P-PU - Nie mogę wgrać bootloadera przez USBasp

    Z tego co czytałem w internecie to powinienem ustawić jakieś lock bity, tylko jak?

    I czy program wgrywam tak samo jak wyżej bootloader?

    0
  • #5 19 Gru 2013 18:40
    landy13
    Poziom 29  

    NIezmysl napisał:
    Z tego co czytałem w internecie to powinienem ustawić jakieś lock bity, tylko jak?
    Lockbity służą do zabezpieczenia programu, żeby ktoś go nie wykradł z procesora. W przypadku otwartego projektu nie ma potrzeby a nawet sensu w nich grzebać.
    NIezmysl napisał:
    I czy program wgrywam tak samo jak wyżej bootloader?
    Tak. Ale jeśli masz programator to po co Ci bootloader?

    0
  • #6 19 Gru 2013 19:41
    paavo91
    Poziom 19  

    NIezmysl napisał:
    Próbuję wgrać cokolwiek przy podłączonym zasilaniu 12V do układu.


    12V idzie przez stabilizator rozumiem?

    Faktycznie skoro masz programator to nie trzeb Ci bootloadera.

    0
  • #7 19 Gru 2013 21:21
    NIezmysl
    Poziom 7  

    Czyli bootloader był nie potrzebny. Czułem, że coś jest nie tak.

    @paavo91 12V idzie przez stabilizator - jest i na schematach i na moim układzie.

    Wgrałem program w *.hex wygenerowany przez arduino ide i tylko jeszcze to przez konwerter usb->ttl podłączyć.

    Pozostawiam temat otwarty, zamknę gdy wgrany program zadziała.

    0
  • #8 19 Gru 2013 23:41
    emarcus
    Poziom 35  

    NIezmysl napisał:
    Ustawiłem fusebity komendą:
    Code:
    avrdude.exe -c usbasp -p m328p -U lfuse:w:0xe2:m -U hfuse:w:0xda:m -U efuse:w:0x05:m


    I w efekcie źle zaprogramowałeś....
    Popatrz jeszcze raz na datasheet i przeanalizuj:

    avrdude.exe -c usbasp -p m328p -U lfuse:w:0xe2:m -U hfuse:w:0xda:m -U efuse:w:0x05:m
    lfuse = 0xE2- ustawia internal RC na 8MHz; ty potrzebujesz ustawień na external crystal 16 MHz więc ;
    lfuse = 0xFF

    hfuse = 0xDA - kieruje vector Reset do bootloadera , który nie jest ci potrzebny, a wprowadza tylko zbędne opóźnienia przy reset; zatem bardziej sensowne byłoby:
    hfuse = 0xD9 lub 0xDF

    efuse=0x05 -tu nie ma żadnej potrzeby programowania extended (lock bitów); należy je pozostawic nie zaprogramowane:
    efuse = 0xFF
    co w zasadzie nie wnosi wiele bo przy zmianie programu i tak kasujesz poprzednią versję.

    Zatem fuse programming batch file winno zawierac taki syntax:
    avrdude.exe -c usbasp -p m328p -U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

    Odnośnie wpisywania programu:
    Jeżeli masz gotowy 'wsad.hex'; to wpisujesz podobnie jak robiłeś upload ATmegaBOOT_328.hex (-bezpośrednio przez avrdude i twój programer).

    Jeżeli jednak zechcesz robic upload z poziomu Arduino IDE przez USBasp, to wymagane będą pewne zmiany w pliku preferences.txt, znajdującym sie w folderze: C:\Users\Twojfolder\AppData\Roaming\Arduino. Tam należy odszukac 'upload.using = bootloader' i zmienic na: 'upload.using = Usbasp'. Równiez w Arduino IDE/Tools/Programer, należy wybrac odpowiednio ten sam programmer. (Arduino wykorzystuje ten sam 'avrdude' do programowania).

    e marcus

    1
  • #9 20 Gru 2013 00:37
    dondu
    Moderator Mikrokontrolery Projektowanie

    Wchodzisz na stronę: http://www.engbedded.com/fusecalc
    gdzie możesz ustalić, jakie wartości powinny mieć fusebity w Twoim przypadku.

    Na samym dole możesz także postępować odwrotnie, czyli na podstawie bajtów fusebitów ustalić, co de facto ustawiają.
    Zrobiłem tak dla Twojego przypadku (-U lfuse:w:0xe2:m -U hfuse:w:0xda:m -U efuse:w:0x05:m) i otrzymałem to o czym pisze emarcus:

    Atmega 328P-PU - Nie mogę wgrać bootloadera przez USBasp

    W razie gdybyś nie pamiętał tej strony zawsze znajdziesz ją tutaj: http://mikrokontrolery.blogspot.com/p/kalkulatory-elektronika.html

    0