{
    "id": 324,
    "date": "2018-03-22T21:48:07",
    "date_gmt": "2018-03-22T21:48:07",
    "guid": {
        "rendered": "http:\/\/hayperek.pl\/?p=324"
    },
    "modified": "2018-03-22T21:48:07",
    "modified_gmt": "2018-03-22T21:48:07",
    "slug": "hardware-czyli-co-w-cpu-piszczy",
    "status": "publish",
    "type": "post",
    "link": "https:\/\/hayperek.pl\/pl_pl\/2018\/03\/22\/hardware-czyli-co-w-cpu-piszczy\/",
    "title": {
        "rendered": "Hardware &#8211; czyli co w CPU piszczy"
    },
    "content": {
        "rendered": "<p>Dzi\u015b zastanowimy si\u0119, jak na podstawie za\u0142o\u017ce\u0144 opisanych w <a href=\"http:\/\/hayperek.pl\/pl_pl\/2018\/03\/21\/start\/\">poprzednim po\u015bcie<\/a> wybra\u0107 serce (a raczej m\u00f3zg) naszego projektu czyli mikrokontroler. Przyjrzymy si\u0119 kilku rodzinom, kt\u00f3re do\u015b\u0107 dobrze znam i z kt\u00f3rymi pracuj\u0119 na bie\u017c\u0105co. Oczywi\u015bcie lista nie wyczerpuje tematu i na pewno jest jeszcze wielu, wielu innych kandydat\u00f3w.<\/p>\n<h5>8-bitowy AVR:<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">niska cena,<\/li>\n<li class=\"pro_item\">trywialna konfiguracja,<\/li>\n<li class=\"pro_item\">szeroka gama dost\u0119pnych system\u00f3w ewaluacyjnych (np. Arduino),<\/li>\n<li class=\"pro_item\">logika 5V, odporna na zak\u0142\u00f3cenia<\/li>\n<li class=\"pro_item\">w pe\u0142ni darmowy toolchain, oparty o gcc<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">ograniczona wydajno\u015b\u0107,<\/li>\n<li class=\"cons_item\">niewielka ilo\u015b\u0107 wbudowanej pami\u0119ci flash (do 256kB) oraz RAM (do 16kB),<\/li>\n<li class=\"cons_item\">niskie taktowanie zegara CPU &#8211; do 20MHz w przypadku AVR,<\/li>\n<li class=\"cons_item\">ograniczony wyb\u00f3r mikrokontroler\u00f3w z wbudowanym kontrolerem CAN,<\/li>\n<li class=\"cons_item\">ma\u0142a ilo\u015b\u0107 uk\u0142ad\u00f3w peryferyjnych (UART, SPI),<\/li>\n<li class=\"cons_item\">brak elastycznej konfiguracji pin\u00f3w (port mux),<\/li>\n<li class=\"cons_item\">interfejs JTAG zajmuj\u0105cy kilka cennych pin\u00f3w,<\/li>\n<\/ul>\n<hr \/>\n<h5>AVR32:<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">wi\u0119ksza wydajno\u015b\u0107 ni\u017c w przypadku 8-bitowych kuzyn\u00f3w,<\/li>\n<li class=\"pro_item\">do 64kB RAM i 512kB flash,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 peryferi\u00f3w,<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">brak wsparcia &#8211; uk\u0142ady nie s\u0105 ju\u017c produkowane,<\/li>\n<\/ul>\n<hr \/>\n<h5>PIC32:<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">niez\u0142a wydajno\u015b\u0107,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 pami\u0119ci RAM 256kB oraz flash 512kB,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 uk\u0142ad\u00f3w peryferyjnych,<\/li>\n<li class=\"pro_item\">wbudowany kontroler magistrali CAN,<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">mniej rozwini\u0119te community ni\u017c w przypadku innych mikrokontroler\u00f3w,<\/li>\n<li class=\"cons_item\">darmowa wersja kompilatora MPLAB nie pozwala na optymalizacj\u0119 kodu,<\/li>\n<li class=\"cons_item\">ma\u0142y wyb\u00f3r zestaw\u00f3w ewaluacyjnych,<\/li>\n<\/ul>\n<hr \/>\n<h5>STM32<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">wysoka wydajno\u015b\u0107 CPU, zw\u0142aszcza w przypadku linii F4 oraz F7 (Cortex-M4),<\/li>\n<li class=\"pro_item\">sprz\u0119towe wsparcie dla operacji zmiennoprzecinkowych (FPU),<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 uk\u0142ad\u00f3w peryferyjnych,<\/li>\n<li class=\"pro_item\">wbudowany kontroler magistrali CAN,<\/li>\n<li class=\"pro_item\">konfigurowalny multiplekser pin\u00f3w,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 pami\u0119ci flash (do 1MB) oraz RAM (do 320kB),<\/li>\n<li class=\"pro_item\">wygodny, dwuprzewodowy interfejs ST-LINK do debugowania,<\/li>\n<li class=\"pro_item\">w pe\u0142ni darmowy toolchain ,<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">z\u0142o\u017cona konfiguracja peryferi\u00f3w,<\/li>\n<li class=\"cons_item\">logika 3.3V, nieco bardziej wra\u017cliwa na zak\u0142\u00f3cenia,<\/li>\n<li class=\"cons_item\">wi\u0119ksza ilo\u015b\u0107 wymaganych zewn\u0119trznych element\u00f3w dyskretnych &#8211; g\u0142\u00f3wnie kondensator\u00f3w odsprz\u0119gaj\u0105cych,<\/li>\n<\/ul>\n<hr \/>\n<h5>RaspberryPi Zero (Broadcom BCM2835):<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">niska cena,<\/li>\n<li class=\"pro_item\">ogromna ilo\u015b\u0107 pami\u0119ci (512MB),<\/li>\n<li class=\"pro_item\">kosmiczna wydajno\u015b\u0107 (jak na nasze potrzeby),<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">skromna ilo\u015b\u0107 interfejs\u00f3w zewn\u0119trznych,<\/li>\n<li class=\"cons_item\">du\u017cy pob\u00f3r pr\u0105du w stanie spoczynku,<\/li>\n<\/ul>\n<h4>Werdykt i uzasadnienie<\/h4>\n<p>Pierwszym, kt\u00f3ry odpad\u0142 z zestawienia by\u0142 oczywi\u015bcie AVR. Cho\u0107 w swojej &#8222;przypakowanej&#8221; formie (ATmega) jest na prawd\u0119 bardzo silnym i wdzi\u0119cznym prockiem, to w zderzeniu z naszymi wymaganiami musi uzna\u0107 wy\u017cszo\u015b\u0107 konkurent\u00f3w &#8211; zw\u0142aszcza pod wzgl\u0119dem wydajno\u015bci w grafice, kt\u00f3ra przecie\u017c jest jednym z kluczowych element\u00f3w. Dodatkowo niewielka ilo\u015b\u0107 peryferi\u00f3w skutecznie wy\u0142\u0105cza go z gry. Podobnie sprawa si\u0119 ma z &#8222;malink\u0105&#8221; RaspberryPi Zero, kt\u00f3ra r\u00f3wnie\u017c nie mo\u017ce pochwali\u0107 si\u0119 szerok\u0105 gam\u0105 uk\u0142ad\u00f3w I\/O. Procesory ze stajni Microchipa (AVR32 oraz PIC32) s\u0105 wydajne i dobrze wyposa\u017cone, jednak brak im wsparcia technicznego i rozbudowanej spo\u0142eczno\u015bci jak\u0105 wytworzy\u0142 AVR czy popularne ARMy r\u00f3\u017cnych producent\u00f3w. Dodatkowo odstraszaj\u0105 ograniczone mo\u017cliwo\u015bci darmowej wersji kompilatora MPLAB.<\/p>\n<p>Na koniec pozosta\u0142 on, nolens volens nasz zwyci\u0119zca &#8211; STM32. Spo\u015br\u00f3d konkurent\u00f3w wyr\u00f3\u017cnia si\u0119 przede wszystkim dobr\u0105 wydajno\u015bci\u0105, du\u017c\u0105 gam\u0105 peryferi\u00f3w, dobrym wsparciem technicznym i ogromnym community. Oczywi\u015bcie na tle innych ARM\u00f3w wypada do\u015b\u0107 przeci\u0119tnie, ot jest po prostu kolejnym przedstawicielem tej wielkiej rodziny. Dlatego zapewne wielu z Was zarzuci mi, \u017ce przecie\u017c:<\/p>\n<blockquote><p>procek XXX od YYY jest o niebo lepszy, bo ma ZZZ i \u017b\u017b\u017b i \u0179\u0179\u0179 i w og\u00f3le wymiata!<\/p><\/blockquote>\n<p>Ok, pewnie b\u0119dzie w tym odrobina racji, ale pami\u0119tajmy &#8211; ograniczy\u0142em si\u0119 celowo do uk\u0142ad\u00f3w, kt\u00f3re znam, z kt\u00f3rymi pracuj\u0119 od wielu lat. Poznawanie nowych rodzin mikrokontroler\u00f3w jest ciekawe i zajmuj\u0105ce, ale na pewno nie jest najlepszym rozwi\u0105zaniem, je\u015bli mamy ograniczony bud\u017cet czasowy \ud83d\ude42<\/p>\n<h4>P\u0142ytka prototypowa<\/h4>\n<p>Poniewa\u017c wynajdywanie ko\u0142a na nowo nie jest dobrym zwyczajem in\u017cynierskim, jako baz\u0119 dla pierwszego prototypu postanowi\u0142em wykorzysta\u0107 p\u0142ytk\u0119 prototypow\u0105 STM32F4 z rodziny Discovery. Ma ona na swoim pok\u0142adzie mikrokontroler <a href=\"http:\/\/www.st.com\/en\/microcontrollers\/stm32f407-417.html?querycriteria=productId=LN11\">STM32F407VGT6 <\/a>, wbudowany interfejs debugowy ST-LINK oraz kilka mniej lub bardziej nam przydatnych uk\u0142ad\u00f3w, pokroju akcelerometru. Wszystkie piny mikrokontrolera zosta\u0142y wyprowadzone w wygodnej formie z\u0142\u0105cza goldpin. S\u0142u\u017cy mi ju\u017c dzielnie od kilku \u0142adnych lat i nie b\u0119dzie to jej pierwszy projekt \ud83d\ude42<br \/>\n<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-334 size-medium\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-300x225.jpg 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-600x450.jpg 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-768x576.jpg 768w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-1024x768.jpg 1024w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board.jpg 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><br \/>\n<br \/>\nW ten spos\u00f3b uda\u0142o nam si\u0119 dokona\u0107 wyboru platformy sprz\u0119towej oraz bazy dla prototypu, kt\u00f3ra powinna nam wystarczy\u0107 na pierwszym etapie prac. <\/p>\n<p>Jutro zastanowimy si\u0119 nad wyborem j\u0119zyka programowania i systemu operacyjnego dla naszego urz\u0105dzenia, czyli pomy\u015blimy jak tchn\u0105\u0107 \u017cycie w kawa\u0142ek krzemu. Do zobaczenia!<\/p>",
        "protected": false
    },
    "excerpt": {
        "rendered": "<p>Dzi\u015b zastanowimy si\u0119, jak na podstawie za\u0142o\u017ce\u0144 opisanych w poprzednim po\u015bcie wybra\u0107 serce (a raczej m\u00f3zg) naszego projektu czyli mikrokontroler. Przyjrzymy si\u0119 kilku rodzinom, kt\u00f3re do\u015b\u0107 dobrze znam i z kt\u00f3rymi pracuj\u0119 na bie\u017c\u0105co. Oczywi\u015bcie lista nie wyczerpuje tematu i na pewno jest jeszcze wielu, wielu innych kandydat\u00f3w. 8-bitowy AVR: Zalety: niska cena, trywialna konfiguracja, [&hellip;]<\/p>",
        "protected": false
    },
    "author": 1,
    "featured_media": 342,
    "comment_status": "closed",
    "ping_status": "open",
    "sticky": false,
    "template": "",
    "format": "standard",
    "meta": {
        "footnotes": ""
    },
    "categories": [
        3
    ],
    "tags": [],
    "class_list": {
        "0": "post-324",
        "1": "post",
        "2": "type-post",
        "3": "status-publish",
        "4": "format-standard",
        "5": "has-post-thumbnail",
        "6": "hentry",
        "7": "category-stodni",
        "9": "post-with-thumbnail",
        "10": "post-with-thumbnail-large"
    },
    "_links": {
        "self": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/324",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts"
            }
        ],
        "about": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/types\/post"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/comments?post=324"
            }
        ],
        "version-history": [
            {
                "count": 18,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/324\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 345,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/posts\/324\/revisions\/345"
            }
        ],
        "wp:featuredmedia": [
            {
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media\/342"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/media?parent=324"
            }
        ],
        "wp:term": [
            {
                "taxonomy": "category",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/categories?post=324"
            },
            {
                "taxonomy": "post_tag",
                "embeddable": true,
                "href": "https:\/\/hayperek.pl\/pl_pl\/wp-json\/wp\/v2\/tags?post=324"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}