ATTiny85 a Arduino Uno jako USBasp programátor – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

ATTiny85 a Arduino Uno jako USBasp programátor – Mikrokontroléry – Fórum – Programujte.comATTiny85 a Arduino Uno jako USBasp programátor – Mikrokontroléry – Fórum – Programujte.com

 

Spuštěný nový filmový web Filmožrouti.cz — vše o Avengers, Pacific Rim, Thor, Star Wars…
Kevin
~ Anonymní uživatel
4 příspěvky
31. 10. 2017   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 213.226.252.–
KIIV
~ Moderátor
+43
God of flame
1. 11. 2017   #2
-
0
-

#1 Kevin
Zkousel si to naprogramovat i pres Arduino IDE a vytahnout si pouzity prikaz pro avrdude? Pokud vim, tak parametr -c arduino je temer to same jako  -c avrisp,jen s rozdilem, ze hodi pulz na DTR, coz zrestartuje UNO a pouzije se jeho bootloader misto programu v nem.

A jestli si to tam nahnal silou, tak budes muset jeste znovu nahrat ten Arduino ISP sketch (pokud sis tedy neposkodil bootloader, pak bys musel preprogramovat i ten).

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kevin
~ Anonymní uživatel
4 příspěvky
1. 11. 2017   #3
-
0
-
Nahlásit jako SPAM
IP: 213.226.252.–
Kevin
~ Anonymní uživatel
4 příspěvky
2. 11. 2017   #4
-
0
-

Našel jsem řešení, je potřeba specifikovat baudrate parametrem -b. Teď jsem bez problémů shopný nahrát program do kontroléru.

 -b baudrate

    Override the RS-232 connection baud rate specified in the respective programmer’s entry of the configuration file.

Zdroj: http://www.nongnu.org/avrdude/user-manual/avrdude_4.html#Option-Descriptions

Parametry mám: avrdude -c arduino -p t85 -P COM1 -b 19200 -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

Pokud to chápu dobře, tak má AVRDude někde předdefinovaný baudrate pro každý programátor. Moje Arduino Uno nebylo schopno s tímto předdefinovaným baudratem pracovat (asi byl moc vysoký), takže ho bylo potřeba specifikovat ručně. Hodnotu baudratu jsem vybral stejnou jako je hodnota u použitého COM portu, kde je připojeno moje Arduino Uno.

Pokud je moje úvaha špatná, tak mě prosím opravte, ať tady nejsou matoucí informace.

Díky

Nahlásit jako SPAM
IP: 213.226.252.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý