Ahoj,
potřeboval bych radu ohledně programování mikrokontroléru ATTiny85-20PU (https://www.tme.eu/cz/details/attiny85-20pu/8-bit-avr-family/microchip-atmel/) s pomocí Arduina Uno jako USBasp programátoru.
Popis situace:
Používám vývojové prostředí Atmel studio 7. Ve studiu přidaná poslední verze AVRDude jako externí tool. V Arduinu je nahraný příklad "ArduinoISP". Desku Arduina mám standardně (MISO,MOSI, SCK, RST, Vcc, GND) propojenou s ATTiny85-20PU (nový, nepoužitý kontrolér).
Připojen obrázekobrázek zapůjčen z:
https://create.arduino.cc/projecthub/arjun/programming-attiny85-with-arduino-uno-afb829
V Atmel studiu jsem si založil nový projekt a vytvořil jednoduchý program (níže), kde se po sekundě střídá na portu PB3 logická 1 a 0. Hodiny mám nastavené na 1MHz. Kompilace proběhla úspěšně.
#ifndef F_CPU
#define F_CPU 1000000UL // 1 MHz clock speed
#endif
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0b00001000; // SET PB3 as output
while (1)
{
PORTB = 0b00001000; // Log 1 on PB3
_delay_ms(1000); // 1000 milisecond delay
PORTB = 0b00000000; // Log 1 on PB3
_delay_ms(1000); // 1000 milisecond delay
}
}
AVRDude spouštím s následujícími parametry: avrdude -c arduino -p t85 -P COM1 -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
Fuse bity mám nastavené podle http://www.engbedded.com/fusecalc/ . Je nastaveno, že se bude využívat vnitřní 8MHz oscilátor a použije se vnitřní dělička osmi. Výsledek 1MHz.
Teď k problému, když spustím AVRDude s parametry uvedenými výše, tak mi vypíše následující:
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e950f (probably m328p)
avrdude.exe: Expected signature for ATtiny85 is 1E 93 0B
Double check chip, or use -F to override this check.
avrdude.exe done. Thank you.
Z toho jsem trochu zmatený, protože pokud to chápu dobře, tak na Arduino desce je nějaký USB převodník propojený (Rx a Tx) s ATMegou na Arduinu a dále je ATMega na Arduinu propojená pomocí SPI s mojí ATTiny85. To znamená, že AVRDude by měl vidět pouze mojí ATTiny85. Je to tak? Nebo to celé špatně chápu? Nevim proč to vidí signature pro m328p.
V případě, že přidám parametr -F, výsledek je následovný:
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e950f (probably m328p)
avrdude.exe: Expected signature for ATtiny85 is 1E 93 0B
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "S:\test atiny85_20pu\Debug\test atiny85_20pu.hex"
avrdude.exe: writing flash (98 bytes):
Writing | ################################################## | 100% 0.03s
avrdude.exe: 98 bytes of flash written
avrdude.exe: verifying flash memory against S:\test atiny85_20pu\Debug\test atiny85_20pu.hex:
avrdude.exe: load data flash data from input file S:\test atiny85_20pu\Debug\test atiny85_20pu.hex:
avrdude.exe: input file S:\test atiny85_20pu\Debug\test atiny85_20pu.hex contains 98 bytes
avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 0.02s
avrdude.exe: verifying ...
avrdude.exe: verification error, first mismatch at byte 0x0000
0xb1 != 0x0e
avrdude.exe: verification error; content mismatch
avrdude.exe: safemode: Fuses OK (E:00, H:00, L:00)
avrdude.exe done. Thank you.
Výše vidíme, že při kontrole zapsaných dat nastane chyba. Otázka je proč? Moje ATTiny85-20PU je potom stále mrtvá a na portu PB3 se nic neděje. Něco je špatně, ale nemůžu přijít na to co. Prosím, pokud uvidíte v tom co jsem Vám výše popsal nějakou chybu apod., tak reagujte. Budu rád za každou věcnou reakci.
Děkuji Kevin.