Używając Arduino Uno jako ISP robi „Yikes! Nieprawidłowy podpis urządzenia ”oznacza złe połączenie, złą konfigurację lub złą wersję avrdude?

12

Korzystam z Arduino UNO, aby zaprogramować wstępnie skompilowany obraz heksadecymalny na ATTINY45, używając avrdude w katalogu Arduino IDE w Windows 7. Uno ma szkic ISP załadowany z katalogu przykładów i działa - dioda LED pulsu ładnie pulsuje.

Po stronie sprzętowej mam tę konfigurację , z tym wyjątkiem, że ATTINY jest montowany powierzchniowo, przylutowany do deski surfingowej, a wszystkie jego styki są lutowane za pomocą woltomierza. Używam paska szpilki z nagłówkiem, trzymanego ręcznie, aby szpilki dotykały deski surfingowej, aby przekazywać sygnały z Uno do ATTINY.

Oto wiersze poleceń, które wziąłem, patrząc na wyniki debugowania IDE:

REM set the fuse for 8MHz, so the ISP programmer can work
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0xe2:m 
REM load the program
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -Uflash:w:firefly.hex:i
REM set fuse for 1MHz, as the project requires
C:\Progra~1\Arduino\hardware/tools/avr/bin/avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0x62:m 

- Próbuję uruchomić je osobno, ale zawsze pojawia się ten błąd:

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

ale czasami jest to ff0000 lub ffff00 lub ffffff

Przeczytałem, że „Arduino używa nieco zmodyfikowanej wersji avrdude do przesyłania szkiców na tablicę Arduino. Standardowa wersja pyta o podpis urządzenia tablicy w sposób niezrozumiały dla bootloadera, co powoduje ten błąd”. Czy to oznacza, że ​​użycie Arduino avrdude z nowym układem ATTINY, bez bootloadera, również spowodowałoby ten sam błąd? Innymi słowy, czy zmodyfikowany avdrude nie jest w stanie przesłać zapytania do AVR bez Arduino?

Czy ten błąd oznacza po prostu, że nie mam dobrego kontaktu między wszystkimi pinami programatora a ATTINY?

I czy ustawienia bezpiecznika są naprawdę potrzebne, czy Uno może zaprogramować lampę błyskową na attiny działającą z częstotliwością 1 MHz, a tym samym zaoszczędzić mi kilku kroków?

(Po prostu kupiłbym „prawdziwego” programistę, ale muszę go zdobyć w ciągu najbliższych dwóch dni i jestem w wiejskiej części Nowej Szkocji)

Yary
źródło
Spróbuj ustawić programator na -c avrisp. Myślę, że możesz zaprogramować go na 1 MHz bez problemów.
user2973
1
Kiedy przesyłam z arduino IDE i ustawiam programator na „Arduino jako ISP”, nie używa -carduinoon stk500. Po prostu spróbuj wgrać program flash do attiny z IDE. W ten sposób możesz zobaczyć poprawny wiersz poleceń na dole, jeśli w ustawieniach włączysz „pełne dane wyjściowe”.
Gerben,
Czy najpierw przesłałeś szkic ArduinoISP?
PhillyNJ,
Phil, załadowałem szkic ArduinoISP do Uno, zanim te kroki się powiodły, i widzę zieloną diodę LED „bicie serca” w impulsie pinu 9. Gerben / user2973, próbowałem „-carduino”, spróbuję następnie „-c avrisp”. Dzięki.
Yary
Wygląda to na problem z połączeniem docelowym <-> usługodawcy internetowego. Coś w twoim obwodzie, co mogłoby ładować linie? Czy bezpieczniki ATtiny są nadal ustawione dla zegara wewnętrznego, czy dostarczasz zewnętrzny? Czy jesteś pewien, że wszystkie cztery przewody sygnałowe i uziemienie są podłączone i we właściwej kolejności? Może powinieneś przyczepność lutu konfiguracji tylko do sprawdzenia to nie jest metoda ręczna (chociaż ja również tego)
Chris Stratton

Odpowiedzi:

12

Przylutowałem przewody do padów, aby upewnić się, że połączenie jest dobre, i użyłem tych przewodów do programowania z Uno. Następnie programista pracował bez żadnych zmian w wierszach poleceń, jak podano w pytaniu. Uruchomiłem kilka odmian i mogłem odpowiedzieć na wszystkie moje pytania, a oprócz tego kilka innych:

  1. Błąd „Yikes! Nieprawidłowy podpis urządzenia” był spowodowany złym kontaktem między programatorem (Uno) a pinami ATTINY.

  2. Nie miało to nic wspólnego z tym, że bootloader nie był na nowym mikrokontrolerze. Nowy układ ATTINY45 nie potrzebuje bootloadera do działania programatora w obwodzie.

  3. Uno może zaprogramować ATTINY45 skonfigurowany na jedną z jego prędkości, 1 MHz lub 8 MHz. Ustawienia fabryczne są w porządku i nie wymagają wymiany bezpieczników.

  4. Oba avrdude wersje pracował programming- 6,1 od strony autora i zmodyfikowany jeden z Arduino IDE.

  5. avrdude program może poprzez Uno użyciu dowolnego -c avrisp, -c arduinolub -c stk500v1, że nie ma znaczenia, który.

Jedno małe pytanie, na które nie byłem w stanie odpowiedzieć, dotyczyło prędkości programów Uno (prędkość komunikacji między pinami we / wy Arduino i mikrokontrolerem jest flashowana). Czy ma to związek z prędkością portu szeregowego? Okazało się jednak, że nie ma to związku z odpowiedzią na ten problem. Ktoś inny może zapytać, czy jest wystarczająco ciekaw.

Yary
źródło
2
ArduinoISP ustawia interfejs SPI na zegar / 128, więc dla Uno 16 MHz podłączony AVR jest zaprogramowany na 16 MHz / 128 = 125 kbit / s. Ale czynnikami ograniczającymi jest prędkość szeregowa, a gdy ustawiony jest PROG_FLICKER, dla każdego zatwierdzenia strony dodawane są opóźnienia 30 ms.
user2973,
4

Miałem dokładnie ten problem. Jeśli ATtiny jest ustawiony na zegar zewnętrzny, ArduinoISP nie będzie mógł go zaprogramować bez zewnętrznego kryształu. Podłączyłem kryształ 16 MHz i 2 kondensatory i działało idealnie.

(Byłem wtedy w stanie ustawić ATtiny na wewnętrzny zegar, usunąć kryształ, a następnie działałem idealnie bez kryształu.)

jcwh2
źródło
1

Dodaj planszę i ich opis bezpiecznika z już ustawionego i będzie działać.

Do dodania wystarczy C:\Program Files\Arduino\hardware\arduino\avr\boards.txtdodać opis tablicy.

########
############ Definitions for ATmega 8MHz 
##############################################################
atmega16-8.name=Atmega16 (internal 8MHz clock)

atmega16-8.upload.tool=avrdude

atmega16-8.upload.protocol=stk500v1

atmega16-8.upload.maximum_size=14336
atmega16-8.upload.speed=19200

atmega16-8.bootloader.low_fuses=0xE8
atmega16-8.bootloader.high_fuses=0x99

atmega16-8.build.mcu=atmega16
atmega16-8.build.f_cpu=8000000L
atmega16-8.build.core=arduino:arduino
atmega16-8.build.variant=mega16

##############################################################
############################

Użyłem tego.

Shubham
źródło