{"id":610,"date":"2012-02-29T11:51:07","date_gmt":"2012-02-29T10:51:07","guid":{"rendered":"http:\/\/www.designfutures.pl\/?p=610"},"modified":"2012-02-29T11:51:38","modified_gmt":"2012-02-29T10:51:38","slug":"firmware-czyli-co-w-atmega-piszczy","status":"publish","type":"post","link":"https:\/\/designfutures.jawordesign.com\/?p=610","title":{"rendered":"Firmware &#8211; czyli co w ATmega piszczy"},"content":{"rendered":"\n<!-- Facebook Like Button v1.9.6 BEGIN [http:\/\/blog.bottomlessinc.com] -->\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fdesignfutures.jawordesign.com%2F%3Fp%3D610&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" style=\"border:none; overflow:hidden; width:450px; height: 30px; align: left; margin: 2px 0px 2px 0px\"><\/iframe>\n<!-- Facebook Like Button END -->\n<p>P<a href=\"http:\/\/www.designfutures.pl\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg.jpg\"><img decoding=\"async\" class=\"alignleft size-medium wp-image-612\" title=\"Atmega644p_TQFP_lrg\" src=\"http:\/\/www.designfutures.pl\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-300x300.jpg 300w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-150x150.jpg 150w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-160x160.jpg 160w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-96x96.jpg 96w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-24x24.jpg 24w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-36x36.jpg 36w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-48x48.jpg 48w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg-64x64.jpg 64w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/Atmega644p_TQFP_lrg.jpg 640w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>ewnie niekt\u00f3rzy RepRap maniacy przekonwertowani mniej lub bardziej ze \u015bwiatka maszyn CNC zastanawiaj\u0105 si\u0119 &#8211; po co nam <strong>firmware<\/strong> ? Przecie\u017c mo\u017cna by drukark\u0105 RepRap sterowa\u0107 za pomoc\u0105 portu LPT, tak samo jak cyfrow\u0105 frezark\u0105 &#8211; wystarczy program kontrolny (Mach3 lub EMC). Dla tych, kt\u00f3rzy s\u0105 zacietrzewionymi fanami CNC jest np <a href=\"http:\/\/reprap.org\/wiki\/EMCRepRap\">EMCRepRap<\/a> oraz <a href=\"http:\/\/reprap.org\/wiki\/EMC_Arduino\">EMCArduino<\/a>, ale sprawa nie jest do ko\u0144ca taka prosta jak by si\u0119 mog\u0142o wydawa\u0107 &#8211; a przynajmniej u\u017cycie mikroprocesora i firmware&#8217;u przynosi tyle korzy\u015bci, \u017ce op\u0142aca si\u0119 to robi\u0107.<\/p>\n<p>Po pierwsze : mikrokontroler (ATmega644P w wi\u0119kszo\u015bci przypadk\u00f3w) zajmuje si\u0119 monitorowaniem temperatury i reagowaniem na jej zmiany w\u0142\u0105czaj\u0105c i wy\u0142\u0105czaj\u0105c grza\u0142k\u0119. Kontrolowane s\u0105 : grza\u0142ka na g\u0142owicy ekstrudera oraz st\u00f3\u0142 do drukowania. Mo\u017cna to te\u017c zrobi\u0107 niezale\u017cnie, dobudowanym termostatem, i nadal sterowa\u0107 maszyn\u0105 przez port LPT, ale &#8230;<\/p>\n<p>Po drugie : drukarka wyposa\u017cona w elektronik\u0119 z mikroprocesorem mo\u017ce drukowa\u0107 zupe\u0142nie samodzielnie, przy dodaniu do niej czytnika kart SD. W tej chwili bez problem\u00f3w mo\u017cna kupi\u0107 takie czytniki dla elektroniki RAMPS czy Sanguinololu, a niekt\u00f3re drukarki s\u0105 w nie wyposa\u017cone standardowo (RapMan).<\/p>\n<p>W tym artykule zajmiemy si\u0119 wi\u0119c spraw\u0105 podstawow\u0105 : jak za\u0142adowa\u0107 na ATmeg\u0119 <strong>bootloader i firmware<\/strong>.<\/p>\n<p><a href=\"http:\/\/www.designfutures.pl\/wp-content\/uploads\/2012\/02\/sanguino.jpg\"><img decoding=\"async\" class=\"alignleft size-medium wp-image-613\" title=\"sanguino\" src=\"http:\/\/www.designfutures.pl\/wp-content\/uploads\/2012\/02\/sanguino-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/sanguino-300x225.jpg 300w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/sanguino.jpg 500w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>\u00a0Ale mo\u017ce zacznijmy od pocz\u0105tku. Wszystko zacz\u0119\u0142o si\u0119 od <strong>Arduino<\/strong>, i jego klona &#8211; <strong>Sanguino<\/strong>. Na tej elektronice zbudowano model trzeciej generacji, kt\u00f3ry spopularyzowa\u0142 technologi\u0119 domowego druku 3d &#8211; przez to, \u017ce by\u0142 tani i w pe\u0142ni open source. Potem zacz\u0119\u0142y powstawa\u0107 nowe modele elektronik steruj\u0105cych, ale wszystkie mia\u0142y wsp\u00f3lne cechy &#8211; takie jak komunikacja przez Serial Port i oprogramowanie \u0142adowane ze \u015brodowiska Arduino.<\/p>\n<p>Dla niewtajemniczonych, przypomnijmy, \u017ce Arduino to pierwsza zupe\u0142nie otwarta platforma do eksperyment\u00f3w z tzw 'programowaniem namacalnym&#8217; \ud83d\ude42 (physical computing), gdzie z bardzo du\u017c\u0105 \u0142atwo\u015bci\u0105 mo\u017cemy za pomoc\u0105 komputera sterowa\u0107 silnikami, \u015bwiat\u0142ami oraz innymi kinetycznymi b\u0105d\u017a interaktywnymi instalacjami. Arduino by\u0142o z pewno\u015bci\u0105 niesamowitym katalizatorem przemian, kt\u00f3re zbli\u017cy\u0142y do siebie \u015bwiat fizyczny i wirtualny. Wi\u0119cej informacji o Arduino mo\u017cna znale\u017a\u0107 na <a href=\"http:\/\/pl.wikipedia.org\/wiki\/Arduino\">wikipedii<\/a> i <a href=\"http:\/\/www.arduino.cc\/\">oficjalnej stronie projektu<\/a>.<\/p>\n<p>Dlatego te\u017c, aby za\u0142adowa\u0107 oprogramowanie na p\u0142ytk\u0119, nale\u017cy post\u0119powa\u0107 tak samo jak w przypadku tradycyjnego Arduino &#8211; bo og\u00f3lnie rzecz bior\u0105c, elektronika typu Sanguinololu czy RAMPS to <strong>jest<\/strong> Arduino (!) &#8211; szczeg\u00f3lnie ta druga, kt\u00f3ra w\u0142a\u015bciwie oznacza <strong>R<\/strong>epRap <strong>A<\/strong>rduino <strong>M<\/strong>ega <strong>P<\/strong>ololu <strong>S<\/strong>hield.<\/p>\n<p><!--more--><\/p>\n<p>Tak wi\u0119c aby zrobi\u0107 co\u015b w kierunku za\u0142adowania oprogramowania, musimy najpierw upewni\u0107 si\u0119, czy na chipie jest tzw bootloader. Jest to specjalny program, kt\u00f3ry umo\u017cliwia \u0142adowanie na niego kodu program\u00f3w steruj\u0105cych &#8211; czyli jest to co\u015b w rodzaju mikro-systemu operacyjnego.\u00a0Je\u015bli kupili\u015bmy gotowy zestaw, i chcemy tylko zmieni\u0107 oprogramowanie, to nie ma si\u0119 czym martwi\u0107, bootloader powinien by\u0107 na miejscu. Je\u015bli jednak kupili\u015bmy czysty chip ze sklepu elektronicznego, to prawdopodobnie jest on zupe\u0142nie pusty.<\/p>\n<p>W takim wypadku musimy u\u017cy\u0107 programatora oraz avrdude lub avrstudio, \u017ceby 'wgra\u0107&#8217; bootloader. Je\u015bli nie mamy programatora, ale posiadamy np Arduino, mo\u017cemy zrobi\u0107 to u\u017cywaj\u0105c <a href=\"http:\/\/arduino.cc\/en\/Tutorial\/ArduinoISP\">tej techniki<\/a>. Ja u\u017cywam zwyk\u0142ego avrdude i wpisuj\u0119 polecenia z linii komend &#8211; takie jak ustawienie wewn\u0119trzych 'bezpiecznik\u00f3w&#8217; (fuse), oraz za\u0142adowanie pliku z bootloaderem (powinien nazywa\u0107 si\u0119 ATmegaBOOT_644P.hex &#8211; mo\u017cna go znale\u017a\u0107 w katalogu z instalacj\u0105 Sanguino).<\/p>\n<p>Je\u015bli nasz chip jest gotowy, pod\u0142\u0105czamy nasz\u0105 elektronik\u0119 do komputera kablem USB i odpalamy Arduino (kt\u00f3re mo\u017cna \u015bci\u0105gn\u0105\u0107 <a href=\"http:\/\/arduino.cc\/en\/Main\/Software\">st\u0105d<\/a>). Pami\u0119tajmy jednak, \u017ce np do Sanguinololu musimy mie\u0107 doinstalowany dodatek Sanguino, do \u015bci\u0105gni\u0119cia z\u00a0<a href=\"http:\/\/sanguino.cc\/\">http:\/\/sanguino.cc\/<\/a>\u00a0. Potem ju\u017c sprawa wygl\u0105da prosto &#8211; otwieramy katalog z oprogramowaniem, i wybieramy g\u0142\u00f3wny plik projektu (powinien nazywa\u0107 si\u0119 tak samo jak katalog w kt\u00f3rym jest &#8211; czyli np. sprinter.pde albo marlin.pde). Po otwarciu tego pliku, powinni\u015bmy zobaczy\u0107 co\u015b jak poni\u017cej :<\/p>\n<p><a href=\"http:\/\/www.designfutures.pl\/wp-content\/uploads\/2012\/02\/arduino_ide.jpg\"><img decoding=\"async\" class=\"alignnone size-large wp-image-616\" title=\"arduino_ide\" src=\"http:\/\/www.designfutures.pl\/wp-content\/uploads\/2012\/02\/arduino_ide-640x455.jpg\" alt=\"\" width=\"640\" height=\"455\" srcset=\"https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/arduino_ide-640x455.jpg 640w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/arduino_ide-300x213.jpg 300w, https:\/\/designfutures.jawordesign.com\/wp-content\/uploads\/2012\/02\/arduino_ide.jpg 946w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>W obu z powy\u017cszych typ\u00f3w firmware (Marlin i Sprinter) mamy specjaln\u0105 zak\u0142adk\u0119 'configuration.h&#8217; &#8211; to w\u0142a\u015bnie tutaj zmieniamy g\u0142\u00f3wne w\u0142a\u015bciwo\u015bci drukarki, takie jak maksymalne pr\u0119dko\u015bci, przyspieszenia czy kierunki pracy osi lub wielko\u015b\u0107 obszaru roboczego. Je\u015bli to dla nas troch\u0119 zbyt skomplikowane &#8211; to mo\u017cemy skorzysta\u0107 z opisywanego ostatnio <a href=\"http:\/\/www.designfutures.pl\/?p=526\">generatora Marlin\u00f3w<\/a>.<\/p>\n<p>Po ustawieniu drukarki wed\u0142ug w\u0142asnych \u017cycze\u0144 (szczeg\u00f3lnie wa\u017cna jest ilo\u015b\u0107 krok\u00f3w na mm) wybieramy w menu Tools&gt;Serial Port odpowiedni port COM, w menu Tools&gt;Board wybieramy nasz typ elektroniki (Sanguino lub Arduino Mega) i klikamy przycisk 'Upload&#8217;.<\/p>\n<p>Po pojawieniu si\u0119 bia\u0142ego napisu w oknie dialogowym (jak na ilustracji powy\u017cej) musimy poczeka\u0107 ok minuty lub dw\u00f3ch, po czym powinien si\u0119 nam ukaza\u0107 napis 'done uploading&#8217;. Mo\u017cemy teraz po\u0142\u0105czy\u0107 si\u0119 z drukark\u0105 za pomoc\u0105 naszego host software (Pronterface lub inny), wybieraj\u0105c ten sam port COM i odpowiedni\u0105 pr\u0119dko\u015b\u0107 po\u0142\u0105czenia (ustawiamy j\u0105 w zak\u0142adce configuration.h).<\/p>\n<p>Czasem niekt\u00f3re rzeczy nie id\u0105 jednak tak jak chcemy, i pojawia si\u0119 nam informacja jak poni\u017cej :<\/p>\n<p>avrdude: stk500_getsync(): not in sync: resp=0x15<br \/>\navrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51<\/p>\n<p>Oznacza to, \u017ce Arduino nie mo\u017ce po\u0142\u0105czy\u0107 si\u0119 z p\u0142ytk\u0105 i jej zaprogramowa\u0107. Zazwyczaj wystarczy u\u017cy\u0107 przycisku reset &#8211; nacisn\u0105\u0107 go i pu\u015bci\u0107 w momencie pojawienia si\u0119 bia\u0142ego napisu po kompilacji kodu (najlepiej spr\u00f3bowa\u0107 kilka razy). Je\u015bli to nie pomaga, to sprawdzamy :<\/p>\n<p>&#8211; czy na chipie na pewno jest bootloader (uwaga : mo\u017cna mie\u0107 chip z dzia\u0142aj\u0105cym firmware, ale bez bootloadera &#8211; jest to mo\u017cliwe, oprogramowanie \u0142aduje si\u0119 wtedy na chip programatorem &#8211; ale nie polecam tego rozwiazania)<\/p>\n<p>&#8211; czy da si\u0119 uploadowa\u0107 \u00a0kod z innego komputera ? zdarza si\u0119, \u017ce firewall blokuje komunikacj\u0119 z portem COM<\/p>\n<p>&#8211; czy chip jest dobrze umieszczony w gnie\u017adzie (je\u015bli jest wyjmowalny) albo czy nie ma 'zimnych&#8217; styk\u00f3w je\u015bli jest przylutowany do p\u0142ytki.<\/p>\n<p>Po wyeliminowaniu kt\u00f3rego\u015b z powy\u017cszych b\u0142\u0119d\u00f3w, oprogramowanie powinno si\u0119 \u0142adowa\u0107 bez problemu.<\/p>\n<p>&nbsp;<\/p>\n<p>Czy zmiany oprogramowania s\u0105 konieczne ? My\u015bl\u0119, \u017ce nie &#8211; mo\u017cemy drukowa\u0107 przez d\u0142ugi czas bez kombinowania przy firmware, ale w praktyce po jakim\u015b czasie pojawiaj\u0105 si\u0119 rzeczy, kt\u00f3re chcieliby\u015bmy 'podkr\u0119ci\u0107&#8217; &#8211; jak przyspieszenia czy maksymalne pr\u0119dko\u015bci. W oprogramowaniu Marlin mo\u017cna to co prawda zrobi\u0107 z linii komend &#8211; ale po resecie wszystko wraca do warto\u015bci wpisanych w configuration.h.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n\n<!-- Facebook Like Button v1.9.6 BEGIN [http:\/\/blog.bottomlessinc.com] -->\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fdesignfutures.jawordesign.com%2F%3Fp%3D610&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" style=\"border:none; overflow:hidden; width:450px; height: 30px; align: left; margin: 2px 0px 2px 0px\"><\/iframe>\n<!-- Facebook Like Button END -->\n","protected":false},"excerpt":{"rendered":"<p>Pewnie niekt\u00f3rzy RepRap maniacy przekonwertowani mniej lub bardziej ze \u015bwiatka maszyn CNC zastanawiaj\u0105 si\u0119 &#8211; po co nam firmware ? Przecie\u017c mo\u017cna by drukark\u0105 RepRap sterowa\u0107 za pomoc\u0105 portu LPT, tak samo jak cyfrow\u0105 frezark\u0105 &#8211; wystarczy program kontrolny (Mach3 lub EMC). Dla tych, kt\u00f3rzy s\u0105 zacietrzewionymi fanami CNC jest np EMCRepRap oraz EMCArduino, ale <a href='https:\/\/designfutures.jawordesign.com\/?p=610'>[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-610","post","type-post","status-publish","format-standard","hentry","category-praktyka-drukowania","category-38-id","post-seq-1","post-parity-odd"],"_links":{"self":[{"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=\/wp\/v2\/posts\/610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=610"}],"version-history":[{"count":6,"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=\/wp\/v2\/posts\/610\/revisions"}],"predecessor-version":[{"id":619,"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=\/wp\/v2\/posts\/610\/revisions\/619"}],"wp:attachment":[{"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/designfutures.jawordesign.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}