Pojďme programovat elektroniku | USB | C++

Programování elektroniky: Všehoschopný čip FT232HQ

  • FT232HQ je univerzální čip USB 2.0
  • Může se chovat jako sériová linka, I²C, SPI, GPIO aj.
  • Dnes jej oživíme v C na Windows

Součástí každé prototypovací desky pro začátečníky je konektor USB, s jehož pomocí nahrajeme do flashové paměti řídícího mikrokontroleru náš program. Mnohé čipy – a to i ty poměrně výkonné – ale sběrnici USB vůbec nepodporují. Je to třeba případ oblíbené rodiny Wi-Fi čipů ESP8266 a prvních generací pokročilejšího modelu ESP32.

Abychom se tedy mohli z počítače snadno spojit s jejich sériovým rozhraním UART a naprogramovat je, potřebujeme ještě jeden speciální čip, kterému říkáme USB-UART převodník. Právě ten je nedílnou součástí mnoha desek s konektorem USB. Zpravidla se jedná o čínské obvody CH340 nebo čipy z rodiny CP210x od amerického Silicon Labs. Skutečnou legendou v oboru je nicméně skotská Future Technology Devices International, kterou znáte spíše pod zkratkou FTDI.

USB 2.0 čip, který se dokáže proměnit téměř v cokoliv

V dnešním pokračování našeho seriálu o programování elektroniky si vyzkoušíme právě jeden z těchto čipů od FTDI. Nebude to ovšem žádný primitivní a jednoúčelový převodník, ale univerzální chameleon, který se na náš povel promění prakticky v cokoliv.

Řeč je o základním čipu FT232HQ s podtitulem USB Hi-Speed to Single Channel Serial UART/FIFO/JTAG/SPI/I2C IC. V tom je řečeno vlastně úplně všechno. Čip se může chovat třeba jako surový FIFO zásobník. Cože? Co to je? Inu, v tomto případě použije své I/O piny a začne na nich paralelně vyblikávat naše data rychlostí až 320 Mb/s.

bf44501a-2878-4968-bd1f-0ea9687458de
Univerzální čip FT232HQ

Stejně tak se ale může FT232HQ chovat jako obyčejný sériový port s rychlostí do 12 Mb/s. Anebo jej nakonfigurujeme jako některou z pokročilejších sériových sběrnic včetně I²C a SPI, se kterými jsme už v našem seriálu pracovali mnohokrát. Anebo… Anebo čip použijeme pro elementární zapisování a čtení digitálních stavů na jeho pinech GPIO (General Purpose Input Output) a rozblikáme s ním třeba LED nebo ještě něco sofistikovanějšího.

Stručně řečeno, s tímto čipem bychom se dokázali spojit prakticky s jakoukoliv periferií, se kterou jsme doposud v našem seriálu pracovali. Ať už to byl senzor teploměru komunikující na sběrnici I²C, anebo třeba 3“ TFT LCD displej, na který jsme si kreslili skrze rychlejší sběrnici SPI. To vše bez dalšího meziprvku – třeba destičky Arduino – a rovnou z našeho počítače s Windows.

USB teploměr

A přesně to si dnes vyzkoušíme a poprvé si napíšeme program v základním jazyku C, který nepoběží kdesi na drobném mikrokontroleru, ale rovnou na našem počítači. Náš program se skrze převodník FT232HQ spojí s digitálním kombinovaným teploměrem SHT31 od švýcarského Sensirionu. Prototypovacích modulů za necelou stokorunu je plný AliExpress.

b17b324a-030c-467c-9acc-4cf2ac162aa6
Kombinovaný digitální teploměr/vlhkoměr od Sensirionu stojí na webových tržištích pár desetikorun a komunikuje skrze sběrnici I²C

Už jsme s ním v našem seriálu pracovali několikrát, tentokrát z něj ale přečteme teplotu a vlhkost vzduchu přímo z našeho laptopu. Čip FT232HQ tedy přináší domácím kutilům možnost rychlého testování čipů bez potřeby neustále vytahovat nějaké Arduino a zdlouhavě jej flashovat.

Ačkoliv si napíšeme program pro Windows a vysvětlíme si jeho překlad do spustitelného formátu EXE, kód samotný bude dostatečně multiplatformní, aby jej zkušení čtenáři po drobných úpravách přeložili i na linuxových operačních systémech a na Applu. 

Protoypovací deska za dvě stovky z AliExpressu

Stejně jako klasické prototypovací stavebnice i náš USB čip seženete na některé z mnoha destiček pro snadné připojení k PC a periferiím. Jsou ale o něco dražší, takže počítejte s investicí v řádu nižších stokorun i při nákupu z AliExpressu. Já tu svoji nakonec pořídil od tohoto obchodníka zhruba za dvě stovky, přičemž v ceně je jak DPH, tak poštovné.

21b5d2fa-ebe3-4510-955a-9ae385fb2d20
Prototypovací deska s čipem FT232HQ, modul s teploměrem SHT3x a pole LED. To vše dnes zapojíme dohromady a naprogramujeme přímo z Windows

Deska má připájený velký konektor USB typ A, takže ji můžete rovnou zacvaknout do počítače. Na modulu jsou pak vyvedené napájecí piny jak pro 5V, tak 3,3V periferie. Především je ale destička po obou stranách vyplněná řadami GPIO AD0-AD7 a AC0-AC9 s 2,54mm roztečí pro snadné prototypování. Tyto piny se podle konfigurace čipu FT232HQ promění buď v některou z podporovaných sběrnic, anebo je budete moci použít jako běžné GPIO a zapisovat na ně digitální stavy, respektive je číst a přenášet do programu v počítači.

62232699-12f2-4641-9e00-d0e217d2c2bf
Popis napájecích a digitálních I/O pinů na prototypovací desce

Instalujeme C/C++ překladač pro Windows a potřebné knihovny

Abychom nemuseli samotné signály třeba pro sběrnici I²C generovat ručně, integrovaný obvod nabízí rozhraní MPSSE (Multi-Protocol Synchronous Serial Engine), které vše zjednoduší a inženýři FTDI pro něj připravili i multiplatformní knihovnu LibMPSSE v jazyku C včetně příkladů jak pro zmíněnou I²C, tak pro rychlejší sběrnici SPI. Pro hlubší studium vás s dovolením přesměruji přímo do dokumentace.

b806fa08-7247-4873-87e2-284297b0df78
Microsoft Build Tools for Visual Studio 2019

Jelikož náš program budeme psát a překládat do formátu EXE na Windows, budeme potřebovat ještě nějaký překladač z jazyka C/C++. Tuto práci za nás udělá balík Microsoft Build Tools for Visual Studio 2019, který je k dispozici zdarma a do Windows stáhne a doinstaluje textové nástroje a všechny potřebné knihovny a hlavičkové soubory pro úspěšný překlad jazyka C/C++ na této platformě.

Aby vše fungovalo, v instalátoru musíme zvolit balík Vývoj desktopových aplikací pomocí C++ a v podrobnostech pak přinejmenším položky MSVC v142 (nebo vyšší) a Windows 10 SDK (dle vaší verze OS).

40f3fa7c-ff04-4cfa-94ff-da3eaf34dda5
Instalujeme minimum nástrojů pro překlad na Windows v C/C++

Připravte se na to, že vám tento ohromný balík nástrojů zabere na disku několik drahocenných gigabajtů, ale není divu, Windows na platformě x86/64 už totiž holt nejsou ten drobný mikrokontroler ze světa Arduino.

32bitová a 64bitová vývojářská příkazová řádka

Instalátor výše dostane do Windows pouze samotné textové nástroje. Volbu editoru kódu nechám na vás. Buď použijete kompletní IDE – bezplatné Visual Studio Community, které ukousne dalších pár gigabajtů místa, anebo zvolíte libovolný textový editor pro kodéry. Já už před lety propadnul zjednodušenému a multiplatformnímu VS Code, takže jej budu preferovat i tentokrát.

392dadd9-ab40-4b3f-ad55-a126e5618bae
Editor kódu je na vás. Já používám multiplatformní a bezplatný Visual Studio Code

Po úspěšné instalaci překladače C/C++ od Microsoftu a SDK byste měli v nabídce Start objevil složku Visual Studio 2019 a uvnitř Developer Command Prompt for VS 2019, respektive Developer PowerShell for VS 2019. V podstatě se jedná o skripty, které otevřou textovou příkazovou řádku a nastaví všechny potřebné globální proměnné s cestami ke knihovnám a překladačům.

03516b8d-78d8-407e-ba7d-31ea003b5186
Jak spustit příkazovou řádku překladače

Ve složce byste měli narazit ještě na podadresář VC, v němž najdete spouštěcí skripty pro 32bitový překlad nebo pro 64bitový překlad.

Překlad prvního programu v C/C++ na Windows

Než se vrhneme na náš příklad, ještě drobný rychlokurz samotného překladu. Dejme tedy tomu, že otevřeme některou z výše zmíněných příkazových řádek pro vývojáře a vytvoříme adresář program. Pokud bychom už měli nainstalovaný editor VS Code, stačí nyní napsat do příkazové řádky code program a Visual Studio Code se spustí z tohoto virtuálního prostředí s předdefinovanými globálními proměnnými.

Když nyní v editoru vytvoříme soubor program.c, Code automaticky rozpozná, že se jedná o jazyk C, nabídne instalaci patřičného doplňku a s pomocí globálních proměnných nastaví cestu k SDK. Díky tomu pak dokáže doplňovat a opravovat kód C funkcí, standardních tříd jazyka C++ a tak dále.

Dejme tomu, že uložíme soubor program.c s tímto kódem:

#include <stdio.h>
int main(){
    printf("Ahoj, ctenari Zive.cz!\r\n");
    return 0;
}

V příkazové řádce pro vývojáře poté spustíme překlad instrukcí:

cl program.c /Fe:program64.exe

Za pár sekund bude hotovo, v adresáři se objeví soubor program64.exe a po jeho spuštění se v terminálu vypíše „Ahoj, ctenari Computeru!“ se zalomením řádku na konci.

9efeb1f9-53bb-407a-89be-0a1d538eeaaa
Překlad C/C++ pomocí balíku MS Build Tools for Visual Studio 2019 a spuštění hotového textového programu s názvem program64.exe 

Všechny klíčové soubory na jedné hromadě

Skvělé, už umíme programovat a překládat C/C++ programy na Windows, takže se konečně můžeme vrátit k čipu FT232HQ. Nejprve musíme stáhnout z webu FTDI potřebné hlavičkové soubory a knihovnu pro práci s multisériovým rozhraním MPSSE. S teploměrem SHT31 budeme komunikovat skrze sběrnici I²C, vše potřebné proto najdeme na stránce LibMPSSE-I2C Examples, odkud stáhneme balíček libMPSSE.zip. Obsahuje jak složku samples s příklady, tak adresáře lib a include.

Pokračování článku patří k prémiovému obsahu pro předplatitele

Chci Premium a Živě.cz bez reklam Od 41 Kč měsíčně
Diskuze (2) Další článek: Justici v Číně ovládla umělá inteligence. Soudci se s ní povinně musí „radit“

Témata článku: , , , , , , , , , , , , , , , , ,