Skocz do zawartości

Arduino as ISP - problem z ogarnięciem czystej 328P-U


Kucharskov

Pomocna odpowiedź

Dobry wieczór!

Dostałem ostatnio oryginalny czip Atmela - Atmega 328P-U, na którego próbuję wgrać bootloader za pomocą Arduino UNO (klon z CH340). Postępuję zgodnie z instrukcją dostępną chociażby na stronie Arduinona tym filmie czy w tym poradniku na YT. Definicję płytek której używam znalazłem tutaj: MiniCore - polecana w ostatnim poradniku. Ważne jest, że próbuję wgrać bootloader, który nie wymaga zewnętrznego oscylatora ponieważ go po prostu w domu nie posiadam, a elektroniczny mi nie po drodze.

Zgodnie z wszystkimi poradnikami:

  • Wgrywam na UNO szkic Arduino ISP zgodnie ze sztuką wgrywania szkiców
  • Łączę poprawnie scalak - UNO:
    • Pin 7 i 20 - 5V
    • Pin 8 i 22 - GND
    • Pin 1 - Pin 10
    • Pin 17 - Pin 11
    • Pin 18 - Pin 12
    • Pin 19 - Pin 13
  • Przestawiam ustawienia Arduino IDE na ustawienia Atmegi 328P bez kryształu której chcę wgrać:
    • Variant: 328P / 328PA
    • Clock: 8 MHz internal
    • BOD: 2.7v
    • Compiler LTO: LTO enabled
    • Bootloader: Yes (UART0)
    • Port: port pod którym jest Arduino UNO
  • Wybieram programator: Arduino as ISP
  • Naduszam "Burn Bootloader"

I niestety otrzymuję błąd sygnatury, cały log wygląda następująco:

avrdude: Version 6.3-20171130
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "E:\Moje dokumenty\Arduino\hardware\MiniCore-master\avr/avrdude.conf"

         Using Port                    : COM4
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         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        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         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.01s

avrdude: Device signature = 0x000000 (retrying)
  
Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000 (retrying)

Error while burning bootloader.
Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.

Próbowałem już wielu podłączeń, pull-up rezystora na reset, innych szkiców ArduinoISP. Niestety efekt ciągle ten sam. Nie mam jednak dużego doświadczenia z samymi bootloaderami (co innego z pisaniem szkiców) i czystym scalakiem. Co robię źle? Czy pierwszy raz jednak muszę użyć oscylatora, czy może gdzieś te całe "fusebity" są popieprzone i coś się ze sobą gryzie?

Z góry dzięki za pomoc, starałem się opisać dokładnie problem, żeby uniknąć notorycznie pojawiających się na zagranicznych forach porad typu "sprawdź kable".

Edytowano przez Kucharskov
Link do komentarza
Share on other sites

Masz kondensator na resecie w Arduino? Cytując https://www.arduino.cc/en/Tutorial/ArduinoISP:

The 10µF electrolytic capacitor connected to RESET and GND of the programming board is needed only for the boards that have an interface between the microcontroller and the computer's USB, like Mega, Uno, Mini, Nano.

 

  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)
17 minut temu, ethanak napisał:

Masz kondensator na resecie w Arduino? Cytując https://www.arduino.cc/en/Tutorial/ArduinoISP:

Pomijając fakt, że na żadnym z poradników (łącznie z tym na stronie Arduino pt "Minimal Circuit (Eliminating the External Clock)") nie ma wzmianki o takim kondensatorze, to nawet po jego dodaniu wciąż ten sam błąd.

Edytowano przez Kucharskov
Link do komentarza
Share on other sites

Ściągnij sobie program AVR LAB++ 2.4 https://rctruck.pl/forum/download/file.php?id=35515 wybierz programator AVRISP, port COM, baud rate 19200 i spróbuj odczytać.  W tym programie jednak lepiej skompilować sobie szkic na nowo z prędkością 115200 i takiej używać, wystarczy przenieść komentarze, są już wpisy w szkicu. Nic nie jest doskonałe, 19200 w AVR LAB działa tylko do identyfikacji na pierwszej zakładce (ostatnia strona tamtego wątku, opisałem problem, ale autor ma inne zajęcia na razie). PIN reset Arduino (nie ten do resetowania programowanego procka) podpina się pod duży kondensator by się programator nie resetował podczas otwierania portu COM (co Arduino zwykle robi), ale mi działało bez tego. AVR ISP i USBASP często źle działają w Arduino IDE coś tam jest z wersjami AVR DUDE vs sterowniki. Ale używasz wersji z MiniCORE, może powiela AVRDUDE?  Jak zadziała w AVR LAB to odznacz sobie ptaszka przy  fuse CKDIV8 i zapisz do AVR (tu już musi być szkic na 115200). To drugi problem z Arduino, nie ogarnia procków z zegarem 1MHz, do USBASP jest osobny programator do tego - USB ASP (SLOW), w sumie do Arduino ISP też jest taka wersja (slow). No a po wgraniu bootloadera z 8MHz od razu trzeba przełączyć na normalny typ programatora.  Jeśli zauważysz, że AVR LAB działa, a w Arduino ciągle lipa to podmień sobie AVRDUDE i jego config na ten z AVR LAB (tylko na czas wgrywania coś programatorem). Mam nadzieję, że nie spinasz resetów procków, taki przypadek też widziałem.

Można też sobie zrobić programator typu klon MKII z klona Arduino MICRO, koszt MICRO z Ali ~3$,  nie ma takich bóli w Arduino  i działa też z AS7, oprócz ISP obsługuje TPI (attiny10) i PDI (XMega), jak coś to mogę wrzucić prosty opis i wsad.

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@kaczakat wielkie dzięki za spory opis i wiele cennych informacji. Co do resetów to pod pin 1 scalaka mam podpięty pin 10 UNO. W samym UNO na się rozumieć powinienem wpiąć kondensator pomiędzy piny opisane. GND i RST?

Jeżeli byś mógł to proszę o wypunktowaną listę kroków (co po kolei z jaką prędkością na UNO i scalaku) do AVR LAB++ ponieważ pomiędzy krokami opisujesz normalny proces wgrywania i w połowie się zgubiłem co do czego. A aktualnie chce wgrać tylko bootloader. Później już zwykłym FTDI konwerterem wgrywać szkice.

Arduino micro do mnie leci więc chętnie przeczytam również o tworzeniu takiego programatora. Ale jaka jest różnica między micro a uno?

Link do komentarza
Share on other sites

1 godzinę temu, Kucharskov napisał:

W samym UNO na się rozumieć powinienem wpiąć kondensator pomiędzy piny opisane. GND i RST?

Ciekawe, przecież pisałeś że to zrobiłeś...

14 godzin temu, Kucharskov napisał:

Pomijając fakt, że na żadnym z poradników (łącznie z tym na stronie Arduino pt "Minimal Circuit (Eliminating the External Clock)") nie ma wzmianki o takim kondensatorze, to nawet po jego dodaniu wciąż ten sam błąd.

To ja tak z ciekawości - co właściwie wtedy zrobiłeś?

Link do komentarza
Share on other sites

@ethanak owszem, zrobiłem to - wpiałem kondensator tak jak mówiłeś. Tu dopytuję żeby wpiąć go w dobry układ bo raz kondensator jest pod reset w scalaku a raz w układzie który służy jako programator. 

Link do komentarza
Share on other sites

Problem został rozwiązany w najprostszy możliwy sposób - za kilka groszy dokupiłem rezonator kwarcowy 16MHz i 2 kondensatory ceramiczne 22 uF. Wtedy od razu Arduino IDE wykryło Atmegę tak samo jak polecany wyżej program. Gdy wgrałem bootloader z MiniCore udało się później (po zdemontowaniu kwarcu i kondensatorów) wgrania bootloadera z zegarem wewnętrznym. Pokusiłem się nawet o zegar 20MHz żeby zobaczyć czy jest jakaś różnica w działaniu. Wszystko pięknie śmiga.

Ostatecznie zostawiłem 16MHz i wgrałem przez AVR Lab++ czysty bootloader Uno na scalaka aby zachować kompatybilność z bibliotekami używającymi zegara.

Link do komentarza
Share on other sites

OK, przetestowałem to ale na NANO z 328P i 16MHz, nowy bootloader. Jako pacjent jest Atmega328P z fabrycznymi ustawieniami, 1MHz. Nie dodaję kondensatora do RST.

Otwieram szkic, Arduino ISP, w linii 142 zmieniam komentarzami:
//#define BAUDRATE    19200
 #define BAUDRATE    115200

Wgrywam przez bootloader do NANO.

Przechodzę do AVR LAB, wybieram AVRISP, port COM, u mnie 40, baud 115200, klikam odczytaj.

image.thumb.png.ef75c6b794c8714c1dac6c874332803f.png

I działa. 

Ale przyznam, że dostawałem już na głowę, bo przecież kiedyś to robiłem a nie działało. Wziąłem pierwszy z brzegu NANO z prockiem M168 i na nim nie działało

Byłem w trakcie pisania, jak pojawił się Twój post z sukcesem, czyli udało Ci się wgrać bootloader, po prostu wgrałeś ten do zewnętrznego kwarcu.

 

A i jeszcze dodam, że po zmianie baudrate na 115200 w Arduino też działa OK ale jako AVR ISP.

 

Edytowano przez kaczakat
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.