Elektronika, ukázky pro STM8S103F3, plus programování v assembleru. |
|
Displej 1602A-1 (16x2 LCD a 20x4 LCD s řadičem HD44780) lze velmi pohodlně připojit přes I2C expandér PCF8574, protože ten mapuje osm bitů na
datové/vlastní řídicí piny LCD. Na STM8 se to dělá buď v C (pomocí knihovny SPL/STDPeriph, či Arduino-SDuino), nebo jako zde, přímo v assembleru. Fukce LCD dostupné s programu níže (jako Arduino knihovna LiquidCrystal_I2C)
U begin_lcd begin() se nezadává, jestli jde o 16x2, nebo 20x4. Důležité je tam nastavení na čtyřbitový přenos dat a font 5x8.
parametr v A pro pos_lcd 7 6 5 4 3 2 1 0
(0) r r sl sl sl sl sl
Ostatní procedury nemají žádné parametry.
Zdrojový kód ukázky: Modul pro LCD 16x2 a 20x4LCD displej je poměrně často používané zařízení (alespoň u mne), takže jsem pro něj napsal samostatný modul, který se dá připojit do projektu. Na začátku jsou deklarovány funkce displeje v části public:
U funkce pos_lcd bity v akumulátoru 7-5 určují řádek (r) a bity 4-0 sloupec (sl):
parametr v A pro pos_lcd 7 6 5 4 3 2 1 0
(0) r r sl sl sl sl sl
V prostředí ST visual develop, v okně workspace ve stromu projektů, do větve Source files, se pak musí přidat soubor s modulem LCD níže.
V hlavním souboru projektu je pak nutno deklarovat volané funkce displeje jako externály (extern).
Zdrojový kód samostatného modulu:
Příklad volání modulu LCD z hlavního souboru (na začátku nezapomenout inicializovat sběrnici I2C):
...
; externaly pro pripojeny modul LCD - 16x2, nebo LCD 20x4
extern begin_lcd, char_lcd, string_lcd, clear_lcd, home_lcd
extern pos_lcd, cur_lcd, nocur_lcd, blink_lcd, noblink_lcd
extern light_lcd, nolight_lcd
...
;-- init i2c a displeje --------------------------------------------
clr I2C_CR1 ; init i2c
ld a, #16
ld I2C_FREQR, a
ld a, #80 ; CCR = 80 - 100 kHz
ld I2C_CCRL, a
clr I2C_CCRH
ld a, #17 ; TRISE = 16+1
ld I2C_TRISER, a
bset I2C_CR1, #0 ; PE=1
call begin_lcd ; inciaklizace LCD
;-- hlavni smycka LOOP -----------------------------------------------
infinite_loop.l
call clear_lcd ; vymaz obrazovku
call light_lcd ; rozsvit
ldw x, #text1a ; prvni radek
call string_lcd
ld a, #$21 ; 2.radek 2.pos 0010 0001
call pos_lcd ; rrp pppp
ldw x, #text2a ; druhy radek
call string_lcd
...
všeobecné informaceU modulů, které jsem v rámci svých možností odladil a otestoval, jsem vytvořil prográmek, který lze formou copy-paste vytáhnout (buď celý, nebo pouze potřebné kusy kódu) a použít jej v nějaké Vaší aplikaci. Zkopírovat se musí potřebný kód, proměnné v paměti a deklarace konstant (equ).
Na stránkách výrobce ST Microelectronics je ke stažení vývojové prostředí ST Visual develop
a dále jsou zde velmí podrobné manuály v PDF (v angličtině) odledně popisu mikrokontroléru a jeho instrukčního souboru.
Každý zde uváděný zdroják má stejnou strukturu. Na začátku jsou deklarace adres použitých systémových registrů (UART, I2C, GPIO...), což je klíčové. Tyto adresy jsou popsány
jednak v datasheetu STM8, a také jsou k dispozici ve zdrojovém kódu, který je nainstalován spolu s prostředím ST Visual develop ve složce
[Program Files]\ STMicroelectronics\ st_toolset\ asm\ include\ STM8S103F.asm). Asi je možné ji deklarovat jako include, ale zde jsou ve zdrojáku
definovány pouze ty, které jsou použity. Rychlý návod jak vytvořit nový projekt v prostředí ST Visual Dvelop:
Tím se vytvoří projekt. Na levé straně se objeví strom Workspace, kde ve větvi source files otevřete main.asm, které je hlavní zdroják
projektu. Je předvyplněn o počáteční definici segmentů a tabulku přerušení. Můžete jej vyčistit a pak do něj přes copy-paste (CTRL+A - CTRL+C -> CTRL+V) vložit některé s
zde uváděných mých (nebo Vašich) zdrojáků. Soubory mapping.asm a mapping.inc systém vytvořil automaticky a není doporučeno do nich zasahovat, protože systém je interně
přepisuje. Do téhož workspace můžete vkládat více projektů, každý však musí mít svou složku. Nahrání (vypálení) programu do modulu:
Dúležité upozornění: Zde presentovaný modul mikrokontroléru má výstupy 5V, 3V3 a GND. Na výstupu 5V ve skutečnosti není 5 voltů, ale vstupní napětí, kterým celý tento modul napájíte, buď přes piny +/-, nebo přes konektor mikroUSB, což může být 4.5 - 15V. Buďte opatrní, co k tomu pinu (5V) připojíte, připojovaný modul můžete tímto zničit. Doporučuji modul napájet výhradně z 5V zdroje. |
|
Elektronika, ukázky pro Arduino a STM8, plus programování v Delphi (Lazarusu).
Všechna zapojení modulů v ukázkách (viz elektrická schémata) pracují s velmi malým napětím 3.3V až 12V a neobsahují návod na napájecí zdroj. Pokud se rozhodnete některé z těchto
zařízení postavit, důrazně doporučuji používat zdroje s výstupním napětím maximálně 12V, podle schválených norem platných v ČR. Autor návodů za případné škody nepřebírá žádnou odpovědnost.
(c) 2026 iisivak.xf.cz |