Velikost firmware vs. velikost paměti

Dobrý den milí čtenáři, vítám vás u dalšího zajímavého článku z dílny malé továrny na velké věci. Dnes se zkusíme podívat na jedno důležité úskalí alternativního firmware Marlin, se kterým se můžeme setkat při nahrávání. Mnozí již jistě tušíte, jde o velikost kompilace s mnohými zapnutými funkcemi. Programová paměť atmega kontroleru, který ovládá samotnou tiskárnu není nevyčerpatelná, naopak docela nám svazuje ruce. Pojďme se tedy společně podívat jak se věci mají.

Atmega

Tiskárna Anet A8 pro svou práci využívá vysoce výkonný, nízkoenergetický, osmibitový mikrokontrolér ATmega1284P. Datasheet, tedy příručka, popisující všechny vlastnosti a funkce má 380 stránek čili je asi zbytečné se všemi podrobně zabývat. Pro tento článek nám postačí zjistit velikost programové paměti. To je místo kam se ukládá program, který je po přivedení napájecího napětí spuštěn.

Abych vám to trochu přiblížil, bootloader, který do tiskárny zavádíme je zástupce BIOS systému v klasickém počítači. Jeho úkolem je poukázat na to, kde má počítač paměť, kde má počítač operační systém, zkontroluje všechny potřebné komponenty potřebné pro spuštění počítače. Zatímco firmware marlin je v podstatě operační systém jako je v počítači například windows.

Velikost paměti

Když už víme co je co, můžeme se podívat na ty velikosti. ATmega1284P má svou vnitřní paměť rozdělenou do tří částí – datová paměť / programová paměť / EEPROM paměť. Paměti se ještě dále složitě dělí ale nám stačí informace o 128kB paměti pro program (náš “windows”). Do tohoto prostoru ukládáme firmware Marlin se všemi jeho funkcemi. S tímto prostorem již nemáme možnost cokoliv udělat a nějak jej zvětšit. Budeme tedy muset “omezit” velikost nahrávaného programu.

Velikost firmware

Pro úplnost ještě zmíním, že firmware využívá paměť pevnou (jednotlivé řádky programu) a dynamickou (dočasně uložené výsledky, výpočty atd.). Rozdíl pro nás není důležitý protože Arduino IDE kterým program nahráváme do ATmega kontroléru tyto paměti sčítá a zobrazuje výslednou celkovou velikost.

Čistá instalace Marlin verze 1.1.9 bez jakýchkoliv úprav zabírá 104,08kB paměti. To je krásných 81% celkové velikosti. Jak jej ale dokážeme zmenšit? Začneme od základů, bootloaderu / zavaděče “bios systému”

Již jste si mohli přečíst o zmenšené verzi bootloaderu, která s sebou nese přízvisko “optiboot“. Jde o zmenšenou, ořezanou, nicméně plně funkční verzi, která dokáže ušetřit až 4kB pro program. Ty se nám později budou určitě hodit. Postup nahrávání tohoto bootloaderu je popsán v článku, který se jím zabývá, s názvem Více funkcí, více místa to je optiboot.

Proč potřebujeme další místo?

Odpověď na tuto otázku je vcelku snadná. Každá povolená funkce firmware si ukousne trošku paměti a výsledkem pak může být překročení maximální povolené velikosti a tedy nezdařená kompilace / nahrávání. Množství funkcí, které marlin nabízí je opravdu velké, já budu dále v článku ověřovat jen ty “základní”.

  1. Jazyková mutace – základním nastaveným jazykem je angličtina. Máte samozřejmě možnost zvolit si jazyk ze široké škály nabízených. Nejsem toho příliš zastáncem, vysvětlím: angličtina v podobě menu tiskárny je relativně snadná a lépe se hledá odpověď na otázky po internetu. Příklad: thermal runaway (česky – teplotní skok), anglický výraz v Google vyhledávači nabízí desítky videonávodů, teplotní skok ani jeden. +0,262kB
  2. PID – tedy systém inteligentní regulace teplot, jak podložky tak trysky. Část která hlídá teplotu trysky je v základní konfiguraci zapnuta. Zapneme-li si také řízení teploty podložky, kompilovaný firmware se pochopitelně zvětší, + 1,508kB
  3. Linear advance – hezká jednoduchá věcička, která dávkuje materiál nelineárně. Vlastně počítá s tím, že se motory z místa nerozeběhnou na plnou rychlost okamžitě a umí toto vykompenzovat množstvím podávaného materiálu. Tedy, pokud motor na začátku své dráhy jede pomaleji než nabere správnou rychlost, linear advance zmenší aktuální přísun plastu do trysky. +3,432kB
  4. Autolevel – bezesporu velmi užitečná pomůcka. Nastavení je sice trošku zdlouhavé, odmění se však perfektní první vrstvou i na křivé podložce. Existuje několik variant ale považujme pouze základní “lineární” případně pokročilejší “bilineární”. +18,672kB při měření na 9 bodech.
  5. Funkce M600 – tedy vícebarevný tisk nebo automatická výměna filamentu. Také velmi užitečná věc, která zareaguje na příkaz M600 umístěného někde v gcode a spustí automatický proces vysunutí filamentu. Zároveň hlídá teplotu tiskárny a následně vás přes display provede zavedením nového filamentu. +8,624kB.

Závěrem

Pokud tedy plánujete nějaké rozšíření svého stávajícího firmware, zvažte, kterou z funkcí opravdu využijete a která bude jen povolená a ukousne kus paměti. Máte-li nějakou svou další oblíbenou funkci bez které si tiskárnu nedokážete představit, napište nám ji do komentáře a přidáme ji na seznam.

Prozatím vám tedy přeji mnoho úspěšných tisků a budu se těšit u dalších článků, případně při osobním setkání.

8 thoughts on “Velikost firmware vs. velikost paměti

  1. Zdravím,
    články jsou naprosto super pro začátečníky – třeba pro mně.
    Potřeboval by jsem radu. Nemůžu se nikam pohnout.
    Při tisku se mně tiskne WALL dvojitě – dvě tenké stěny vedle sebe. trysku mám 0,35mm.
    Nevím si s tím rady…

    1. Problém může být s nastavením při slícování. Pokud si třeba v Cura nastavíte stěnu 0,8mm silnou tak s tryskou 0,35 vytisknete 2 perimetry mezi kterými zbyde kousek místa který není jak vyplnit. Nebo to může být způsobeno průtokem materiálu. Máte-li vše nastaveno správně a přesto vzniká mezera, příčinou může být malý průtok materiálu, případně i příliš vysoká výška vrstvy.

  2. Děkuji za odpověď.
    Výšku vrstvy mám 0,2mm.
    Vložil by jsem curaprofile + model na který je to aplikované, ale nevím jak.
    Každopádně je divné, že tři svislé stěny (rovné) jsou v pohodě a čtvrtá stěna (s obloukem), je vytištěna dvojitě.
    Napadá mě snad jen, že to dělá tiskárna díky špatné konstrukci – mám anet A8.
    Ale mám ji dovybavenou o různé zpevnění, octoprint, polymerová ložiska na ose Y (pojezd tiskové desky) atd.
    Tak nevím…

    1. Dobrý den, já tedy slicer Cura příliš nepoužívám, né že by nebyl dobrý ale nevyhovuje mi to “příliš” grafické prostředí novějších verzí. Zkuste tedy použít původní Cura verzi 14 kterou jste dostal na SD kartě s tiskárnou, tam najdete i docela dobře vyladěný profil pro tiskárnu. Případně mi můžete poslat váš model na mail info@3dfactory.cz a já se zkusím podívat kde je zakopaný pes. Případně to zkusím rozjet na některé tiskárně abych viděl jak se to chová.

  3. Jen mám doplnění pro ty, kdo se snaží hledat poslední volné byty, aby mohli zapnout další funkci v Marlinovi, a přesto se jim nedaří do limitu vejít. Hodně se dá ušetřit vypnutím podpory SD karty. Pokud člověk používá Octoprint, tak podporu SD nepotřebuje a ta přitom zabírá asi 20kB.

    1. Čtečka SD karty mi nefunguje prvního dne, jedu přes USB a Octoprint zatím nemám (v budoucnu ho ale asi pořídím), čerstvě se mi porařilo do Anet A8 Marlin. Takže… jak se zbavím podpory SD karty? 🙂

      1. Dobrý den, podporu SD karty můžete vypnout v souboru Configuration.h kde cca na řádku č.1429 najdete instrukci #define SDSUPPORT. Pro vypnutí stačí před tuto instrukci přidat dvě lomítka // a poté celý marlin nahrát do řídící desky tiskárny.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *