Tym razem na prośbę wielu osób, pomimo to iż sam nie przepadam za AtmelStudio 6 to postanowiłem rozszerzyć możliwości tego środowiska, udostępniając możliwość wykorzystania w nim WSZYSTKICH niestandardowych (czytaj nie-atmelowskich) programatorów ;) Wszystko to za sprawą kolejnego update'u programu MkAvrCalculator, który tym razem podobnie jak w Bascomie tak i w AtmelStudio może pełnić rolę BRIDG'a (pomostu) z uwagi na swoje specyficzne i w tych przypadku przyjemne właściwości. Owszem spotkałem się już z wieloma opisami na różnych stronach w internecie jak sobie podłączyć AVRDUDE do AtmelStudio. Ale jest JEDEN WIELKI problem .... uda się bowiem każdemu wywołać program avrdude jako External Tool, uda się każdemu przekazać jako argumenty ... (no właśnie nieszczęsne argumenty) w postaci nazwy programatora, nazwy i ścieżki wsadu HEX, ale ... ale jest ogromny kłopot z przekazaniem nazwy procesora. Tzn może wyrażę się ściślej, jeśli bowiem założyć że chcielibyśmy użyć programatora USBASP w AtmelStudio poprzez "gołe" AVRDUDE, to poza tym,
że musimy podać parametry takie jak:
-c usbasp -P usb
możemy także skorzystać z parametrów przekazujących automatycznie ścieżkę i nazwę pliku wsadu HEX
$(ProjectDir)Release\$(ItemFileName).hex
chociaż jak widać trzeba ręcznie dodać zarówno rozszerzenie .hex jak i nazwę profilu Release, gdy pracujemy w tym akurat profilu. Gdy zaś pracujemy w profilu Debug to trzeba pamiętać aby te parametry wyglądały tak:
$(ProjectDir)Debug\$(ItemFileName).hex
to NIESTETY za chiny ludowe nie uda się w automatyczny sposób przekazać nazwy procesora, którego używamy w projekcie. Więc cóż nam po tym, że można niby w AtmelStudio wywołać sobie jako External Tool, i to dodane w MENU na górze programu, skoro za każdym razem gdy będziemy zmieniali projekt i mikrokontroler (a przecież to normalna sytuacja), to wtedy BĘDZIEMY ZMUSZENI ! do tego aby za każdym razem przypominać sobie gdzie to się właziło w opcje żeby zmienić nazwę mikrokontrolera, brrrr ohyda ;) .... żadne mi to ułatwienie. Przecież chyba nikt pisząc programy nie pracuje wciąż na tym samym mikrokontrolerze.
I tu nadchodzi POMOC ;) .... czyli nasz (pomost) BRIDGE, w postaci programu MkAvrCalculator. To właśnie dzięki niemu nie tylko nie będzie trzeba za każdym razem zmieniać procesora w ustawieniach, KONIEC Z TYM ;) ...ale jeszcze nawet ! NIE BĘDZIE TRZEBA DEFINIOWAĆ PROGRAMATORA!. Czyli nie ważne z punktu widzenia AtmelStudio nawet jakiego programatora użyjemy. Może to być dowolny (i skonfigurowany) z listy w MkAvrCalculatorze. Tak tak .... to mega wygodna sprawa. Wystarczy wejść sobie raz w MkAvrCalculator i w nim wybrać (ustawić raz) swój programator, którym może być np:
- USBASP
- STK500v2
- AVR ISP MK II
- i in.
ale UWAGA !!!
mogą to być również tak proste programatory jak te pracujące na LPT, czyli np:
- STK200
a nawet
- Simple LPT programmer, oparty na 4 rezystorach podłączonych do LPT
To jeszcze nic ;) bodajże najciekawszym programatorem może być ten oparty na scalaku FT232R (nazwa w programie MkAvrCalculator) - ATB-FT232R
proponuję przeczytać w tym miejscu ten artykuł aby zobaczyć możliwości
Od tego momentu użytkownicy zestawów uruchomieniowych ATB, firmy Atnel będą mogli więc bez kłopotu programować także wprost z AtmelStudio (jeśli uznają akurat to środowisko za odpowiednie dla siebie) ;)
W takim razie jak tego dokonać? Przepis jest prosty, i podaję go poniżej. Najważniejsza rzecz to fakt iż program MkAvrCalculator może być wywołany z linii komend i można przekazać do niego parametry, w jakiej postaci ?
Parametry programu MkAvrCalculator przy wywołaniu
[PATH-FILENAME] - ten parametr to po prostu ścieżka i nazwa pliku z wsadem HEX
mkavrcalculator.exe c:\test.hex /AS /CE
w tym wypadku program się uruchomi, wgra wsad i zamknie się na koniec. Gdybyśmy nie chcieli aby się zamykał, można podać taką linię:
mkavrcalculator.exe c:\test.hex /AS
wtedy program tylko zaprogramuje automatycznie procesor wsadem i pozostanie okienko na wierzchu, trzeba będzie samemu je zamknąć. Można także pominąć parametr /AS, i wywołać program tylko z nazwą pliku
mkavrcalculator.exe c:\test.hex
w tym wypadku program wystartuje, i wczyta plik wsadu HEX, będzie przygotowany do wgrania ale musimy sami kliknąć zielony klawisz WYKONAJ, po czym ręcznie zamknąć program. Aby wykorzystać te możliwości w AtmelStudio (albo tak na prawdę dowolnym innym środowisku pozwalającym na wywołanie zewnętrznego dowolnego programu - przykład z Bascomem został już dawno opisany tutaj: LINK. Należy poczynić "kilka" kroków jak niżej:
1. uruchamiamy AtmelStudio i przygotowujemy prosty testowy program, np. do migania diodą LED.
2.wchodzimy na górze w Menu-->Tools i wybieramy opcję External Tools...
3. w okienku narzędzi zewnętrznych zmieniamy Title (tytuł) na MkAvrCalculator (Release). Dopisek Release ponieważ będzie można później dokładnie tą samą drogą utworzyć wersję dla profilu Debug jeśli ktoś go używa.
4. następnie w polu COMMAND za pomocą klawisza z trzema kropkami (browse) wskazujemy folder i program MkAvrCalculator, w zależności gdzie mamy go zainstalowanego, ja akurat mam go na: G:\MkAvrCalculator\
5. teraz przechodzimy do najważniejszego ;) pole ARGUMENTS gdzie musimy wstawić argumenty jakie mamy przekazać do MkAvrCalculatora zgodnie z opisem przedstawionym wyżej. Najpierw ma to być ścieżka gdzie leży wsad i tu możemy się na szczęście posłużyć wbudowanymi zmiennymi. W przypadku ścieżki odpowiada za to zmienna o nazwie $(ProjectDir), którą można wybrać z rozwijanego Menu po prawej stronie pola:
6. po kliknięciu wpadnie nam nazwa ścieżki, ale musimy ją jeszcze ręcznie uzupełnić o nazwę profilu z jakim pracujemy, jeśli jest to Release ( a taki teraz omawiamy ) to dodajemy właśnie Release jak niżej i kończymy go znakiem \ (BackSlash)
7. ale to nie wszystko, potrzebujemy jeszcze nazwy pliku z wsadem HEX, proszę bardzo, jeszcze raz rozwijamy pole z możliwymi argumentami i tym razem wybieramy Item File Name
8. tym razem podobnie jak wyżej ręcznie uzupełniamy nazwę pliku o jego rozszerzenie .hex ponieważ argument daje nam tylko nazwę pliku ale bez rozszerzenia.
UWAGA !!!! w najnowszych wersjach AS trzeba wybrać $(TargetName) zamiast $(ItemFileName) żeby integracja działała. Chodzi o rysunek 8 powyżej.
9. następnie jeśli uznamy to za stosowne dodajemy na końcu linii argumentów po spacji dwa opcjonalne /AS i /CE jak niżej. UWAGA! w stosunku do wielu innych opisów tej integracji ale z gołym avrdude pewnie dostrzegacie właśnie w tym miejscu ZALETĘ że nie musimy wpisywać nazwy procesora !!! bo MkAvrCalculator przy starcie sam to zrobi ;) ... super sprawa. Możesz zatem sobie pisać kod do ATmega32A a program MkAvrCalculator i tak sam wykryje po sygnaturze właściwy procek i będzie to ATmega32 (bez literki A) ale nie martw się tym bo to nie ma żadnego znaczenia jeśli chodzi o sam proces programowania wsadu.
10. OK! teraz już można byłoby za każdym razem gdy chcemy zaprogramować procka, ręcznie klikać w Menu-->Tools-->MkAvrCalculator ponieważ tam się pojawi taka opcja po zakończeniu tego co zrobiliśmy wyżej. Tyle że to byłoby uciążliwe ;) przydałoby się mieć wyraźną pozycję w Menu obrazkowym na górze - nieprawdaż? W tym celu przygotujemy to sobie w kolejnych krokach, wchodzimy zatem w Menu-->Tools-->Customize:
11. następnie w nowo otwartym okienku w jego pierwszej zakładce Toolbars, klikamy klawisz NEW... i wpisujemy naszą nazwę, która będzie później widoczna w tym obrazkowym Menu:
12. gdy to zakończymy to przełączamy się w tym samym oknie na zakładkę Commands a następnie stawiamy "ptaszka" przy środkowej pozycji Toolbars (1) i rozwijamy pole po prawej (2) aby wybrać wcześniej utworzony przez nas toolbar o nazwie MkAvrCalculator (Release)
13. kolejny krok to dodanie do naszej pozycji na toolbarze komendy zewnętrznej więc klikamy klawisz Add Command...
14. teraz w nowym okienku po lewej w ramce Categories wskazujemy na Tools, i wtedy z prawej ramki Commands podłączamy pozycję External Command 1 jak niżej:
15. klikamy OK i naszym oczom ukaże się taki widok, klikamy klawisz Close i patrzymy co się pojawiło na menu obrazkowym (tasiemkach z ikonkami prawy górny róg)
16. oczywiście można tą tasiemkę złapać za lewy brzeg i przesunąć ją w inną pozycję np tak:
17. dobrze, teraz zanim klikniemy w tę pozycję, należy chociaż RAZ uruchomić program MkAvrCalculator żeby wybrać (wskazać w nim) z jakiego programatora korzystamy. Można tu użyć pola szybkiego wyboru albo po prostu rozwijanej listy w programie. Nasz wybór zostanie zapamiętany na kolejne uruchomienia.
18. Proszę bardzo to WSZYSTKO ;) teraz życzę miłego użytkowania, klikamy w nasz nowy pasek toolbara o nazwie MkAvrCalculator i .... program się ładnie wywoła, zostaną przekazane argumenty, zaprogramowany procesor, po czym program zamknie się i możemy dalej pisać / testować kod
życzę przyjemnego użytkowania .... pomyślcie - że taka integracja otwiera na prawdę całą masę programatorów niestandardowych dla AtmelStudio i to pięknie działa ;)
Konfigurację można dużo uprościć definiując 'Initial directory' jako $(TargetDir). Dodatkowo takie coś tworzy skrót dużobardziej uniwersalnym, bo nie trzeba się przejmować czy to Debug, czy Release.
OdpowiedzUsuńPrzykład obrazkowy pod linkiem: http://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-frc1/375764_586973641336700_1728635945_n.jpg
No i super podpowiedź! Bardzo dziękuję ;) rzeczywiście to ZNACZNIE upraszcza.
Usuńoj ... ale niestety - właśnie rączo zabrałem się za przetestowanie tego i niestety w ogóle nie chce z tym ruszyć tak jak trzeba :( .... być może coś jeszcze gdzieś kolega ustawił ?
UsuńSOA#1 - wszystko tak jak na screenie i działa.
UsuńNo ja wierzę, że ci działa - ale u mnie tylko wywołuje się MkAvrCalc i nie przekazywane są do niego żadne parametry :( niestety
Usuńprzy okazji co to znaczy to
SOA#1
bo może ja czegoś nie wiem po prostu a ty za dużymi skrótami mówisz ? ;)
SOA#1 - Standardowa Odpowiedź Administratora numer 1: "U mnie działa", choć może ja tu nie admin, to skrótu trochę automatycznie użyłem (;
UsuńParametry przekazuje i można programować bez problemu...
A ja właśnie wstawiłem pułapkę w programie MkAvrCalculator żeby wyświetlił mi przy starcie parametry i okazuje się że ładnie dostaje tzn samą nazwę pliku bez ścieżki oraz /AS i /CE
Usuńale niestety nie potrafi odszukać tego pliku bez ścieżki .... hmm to wygląda jakby u ciebie ta opcja InitialDir (TargetDir) powodowała jakieś ustawienie ścieżki poszukiwania czy coś do folderu projektu - a u mnie niestety nie. Na razie testuję to na Win8 ...
ale ciekawostka
Całkiem możliwe, że wina systemu... Ja pracuję na niezawodnym XP.
UsuńNo jutro sprawdzę to na XP
Usuńale wiesz coś jest nie tak bo nawet jak dam ptaszka
"Prompt for arguments"
i się zatrzymuje przed wywołaniem to niestety ale żaden argument z $(Target xxx) nie pokazuje się mi w okienku
zastanawiam się czy w AtmelStudio nie wybrałeś wcześniej jakiejś opcji typu SetTarget czy coś w tym stylu ?
Trochę o temacie zapomniałem, ale w końcu opcje sprawdziłem i nie rzuciło mi się w oczy nic, co mógłbym wcześniej zmienić...
UsuńNic, oprócz całego AS - oglądając ostatni z Twoich filmów zwróciłem uwagę na fakt, że na pulpicie masz skrót do wersji 6.0 - ja mam zaktualizowany do 6.1.
Nie wiem, może to wina tego, może systemu, może czegoś jeszcze innego... W każdym bądź razie - u mnie wciąż działa.
A widzisz, ja tak w ogóle to nie korzystam z AS więc pewnie dlatego mam jakąś starą wersję. Ale z ciekawości oczywiście pobiorę AS 6.1 i sprawdzę - może rzeczywiście w tym leży problem że u mnie to nie śmiga wg twojego sposobu. Dam znać ;)
Usuńdziękuję w imieniu swoim i pewnie tych wielu osób, o których wspomniałeś na początku
OdpowiedzUsuńPrzeszedłem wszystkie kroki ustawień w atmel studio (6.1), skopiowałem kod do migania dioda, podłączyłem wszystkie kabelki. Gdy naciskam mkavrcalculator w atmel studio, uruchamia mi się mkavr, naciskam (gdy już jest sprawdzony avr) wykonaj (przy zapis) i...nic się nie dzieje. Dioda nie mruga :(
OdpowiedzUsuńhmmm nie mam teraz jak sprawdzić ale skontaktuj się ze mną na Skype jak będę dostępny to postaram się pomóc.
UsuńJuż nie trzeba, udało mi się wysłać program przez eclipse (który jest, swoją drogą, całkiem wygodny) :)
UsuńTo ja podpowiem, że w wersji 6.2 AtmelStudio, zamiast Relase trzeba wpisac Debug
OdpowiedzUsuńW wersji 7.0 u mnie chodzi tak: $(TargetDir)\$(ItemFileName).hex /AS /CE
OdpowiedzUsuń