1

Téma: Verzia s LCD

Dobry den,
dal som si prerobit SDS Macro na verziu s LCD.
Otazka je, ako dostanem na LCD nejake udaje?
Nepripravujete firmware specialne pre SDS-Macro s LCD, kde by sa dalo vo web rozhrani konfigurovat, co sa ma zobrazovat na LCD?

SDS Macro LCD 485 hw SoC-ARM REV1 100Mbit DF5

2

Re: Verzia s LCD

CITACE Z Wiki.MereniEnergie.cz - pro aktuální verzi se podívejte na WiKi:

Máte-li SDS MACRO vybavené doplňkovým modulem (interním) s displayem (LCD), můžete na tento display psát libovolné texty, pomocí funkce lcd_echo.

Display je provozován v režimu čtyři řádky po 22 znaků.

 lcd_echo(POZICE_NA_ŘÁDKU, ŘÁDEK, BARVA, ...text...);

Funkce se používá shodně jako echo, ovšem je zde potřeba určit, na který ze dvou řádků se má daný výstup zapsat - a proto je potřeba hned první parametr při volání této funkce použít pro určení řádku. Druhý parametr je vyhrazen pro určení barvy, pro aktuální použitý display můžete zvolit:

    neinvertovaná barva - číslo 0
    invertovaná barva - číslo 1

určení pozice na řádku:

    číslo 1 až 22

a pro určení řádku:

    první řádek (a bude nejprve smazán) - číslo 1
    druhý řádek (a bude nejprve smazán) - číslo 2
    třetí řádek (a bude nejprve smazán) - číslo 3
    čtvrtý řádek (a bude nejprve smazán) - číslo 4
    první řádek (nebude smazán) - číslo 100
    druhý řádek (nebude smazán) - číslo 200
    třetí řádek (nebude smazán) - číslo 300
    čtvrtý řádek (nebude smazán) - číslo 400

Pokud chcete zapsat více než 16 znaků, budou nadbytečné znaky zahozeny (nedojde k přepsání dalšího řádku). Zápis probíhá vždy od levého kraje řádku. Také si můžete vybrat, zda-li chcete celý řádek před novým zápisem smazat nebo ne.

Příklad zápisu do prvního řádku na první pozici z kraje, včetné předcházejícího smazání, neinvertované barvy:

 lcd_echo(1, 1, 0, 'text', 'a dalsi');

Příklad zápisu do třetího řádku bez předchozího smazání řádku, od desáté pozice zleva, invertované barvy:

 lcd_echo(10, 300, 1, 'Teplota je ',sys[310]);

Pozor! Při jakékoliv změně obsahu LCD (byť zápis jediného znaku) je celý display aktualizován - nedojde ke ztrátě předchozích zápisů, ale je potřeba zvážit případné zdržení (příklad: např. při zápisu po jednotlivých znacích (mnoho volání lcd_echo) bude mnohem déle trvat celá akce, než jediné zavolání lcd_echo s celým textem).


    lcd_clear - smazání LCD (pro zařízení SDS MACRO)

Funkce má jediný parametr, a to určení řádku. Po zavolání se celý daný řádek vymaže. Nedojde ke změně na ostatních řádcích.

    celý LCD - číslo 0
    první řádek - číslo 1
    druhý řádek - číslo 2
    třetí řádek - číslo 3
    čtvrtý řádek - číslo 4

Příklad smazání celého prvního řádku:

 lcd_clear(1);

    lcd_newline - posune text na LCD o jeden řádek nahoru

Funkce nemá parametr. Vhodné pro emulaci vzhledu konzolového výpisu.

Po zavolání funkce je text každého řádku přesunut o jeden řádek výše. Původní obsah nejvyššího řádku se ztrácí.

Příklad použití:

 lcd_newline(0);

Paramtery: vždy uveďte číslo 0. V budoucí verzi se význam může změnit.


případně si omrknout jednoduchý program, který je v macru s lcd jako výchozí a zobrazuje teploty čidel..

// priklad - vypis stavu teploty,  na LCD

//pamatuju si posledni stav
var stav_teplota_1, stav_teplota_2, stav_teplota_3,

//pomocne promenny
var teplota_cele_cislo;
var teplota_desetiny;

//pro zprehledeni zapisu programu pouzijeme define
#define TEPLOTA_1 sys[310]
#define TEPLOTA_2 sys[311]
#define TEPLOTA_3 sys[312]



//
kresli_zaklad
{
 //smazu cely display
 lcd_clear(0);

 //prvni radek
 lcd_echo(1, 1, 1, 'SDS');
 lcd_echo(7,100,0,'MereniEnergie.cz');

 //druhy
 lcd_echo(1,2,1,'TEPLOTA:');

 //treti
  lcd_echo(1,3,1,'TEPLOTA:');

 //ctvrty
  lcd_echo(1,4,1,'TEPLOTA:');



}

kresli_stav_teplota_1
{
 //vypocitej celou a desetinnou cast
 teplota_cele_cislo = TEPLOTA_1 / 100;
 teplota_desetiny = TEPLOTA_1 % 100;
 //
 if (teplota_desetiny >= 0) goto kresliuz;
 //musime otocit znamenko
 teplota_desetiny = 0 - teplota_desetiny;

kresliuz:

 //druhy
 lcd_echo(11,200,0,teplota_cele_cislo, '.', teplota_desetiny , ' stC');
}


kresli_stav_teplota_2
{
 //vypocitej celou a desetinnou cast
 teplota_cele_cislo = TEPLOTA_2 / 100;
 teplota_desetiny = TEPLOTA_2 % 100;
 //
 if (teplota_desetiny >= 0) goto kreslited;
 //musime otocit znamenko
 teplota_desetiny = 0 - teplota_desetiny;

kreslited:

 //treti
 lcd_echo(11,300,0,teplota_cele_cislo, '.', teplota_desetiny , ' stC');
}

kresli_stav_teplota_3
{
 //vypocitej celou a desetinnou cast
 teplota_cele_cislo = TEPLOTA_3 / 100;
 teplota_desetiny = TEPLOTA_3 % 100;
 //
 if (teplota_desetiny >= 0) goto kreslinow;
 //musime otocit znamenko
 teplota_desetiny = 0 - teplota_desetiny;

kreslinow:

 //treti
 lcd_echo(11,400,0,teplota_cele_cislo, '.', teplota_desetiny , ' stC');
}






zmena_teplota_1
{
 //doslo ke zmene teploty
 kresli_stav_teplota_1();

 //zapamatuj si novou hodnotu, at pozname dalsi zmenu
 stav_teplota_1 = TEPLOTA_1;
}

zmena_teplota_2
{
 //doslo ke zmene teploty
 kresli_stav_teplota_2();

 //zapamatuj si novou hodnotu, at pozname dalsi zmenu
 stav_teplota_2 = TEPLOTA_2;
}

zmena_teplota_3
{
 //doslo ke zmene teploty
 kresli_stav_teplota_3();

 //zapamatuj si novou hodnotu, at pozname dalsi zmenu
 stav_teplota_3 = TEPLOTA_3;
}


main
{

 // 1. nejprve nakreslime pevnou stavbu (to co se nebude menit) na LCD

 kresli_zaklad();

 // 2. zjistime si vychozi stav (zapamatuje pro pozdejsi zjisteni zmeny)

 stav_teplota_1 = TEPLOTA_1;
 stav_teplota_2 = TEPLOTA_2;
 stav_teplota_3 = TEPLOTA_3;


 // 3. poprve nakreslime promenne data na display, at tam neco je !

 kresli_stav_teplota_1();
 kresli_stav_teplota_2();
 kresli_stav_teplota_3();


 // 4. ted budeme hlidat, kdy dojde ke zmene,
 //    a pri zmene

smycka:

 //je aktualni stav (ted) jiny nez posledni co si pamatuju?
 //pokud ano, spusti se funkce zmena_teplota_1()
 if (TEPLOTA_1 != stav_teplota_1) zmena_teplota_1();

 //je aktualni stav (ted) jiny nez posledni co si pamatuju?
 //pokud ano, spusti se funkce zmena_teplota_1()
 if (TEPLOTA_2 != stav_teplota_2) zmena_teplota_2();


 //je aktualni stav (ted) jiny nez posledni co si pamatuju?
 //pokud ano, spusti se funkce zmena_teplota_3()
 if (TEPLOTA_3 != stav_teplota_3) zmena_teplota_3();



 //a znovu
 goto smycka;

}

no a nakonec veškeré lcd simulace podporuje oblíbený sds-c simulátor.. takže ladit ladit a ladit

3

Re: Verzia s LCD

velka vdaka, super prispevok, takto sa mi to paci.
este sa chcem spytat, ci existuje nejaka character map - ake znaky sa daju zobrazit na LCD?
a tiez ma zaujima, ci sa da pristupovat na LCD aj po pixeloch? (verim ze ano, ved aj vase logo je urcite bitmapa).

SDS Macro LCD 485 hw SoC-ARM REV1 100Mbit DF5

4

Re: Verzia s LCD

Aktualne mam problem s LCD podsvietenim (svieti len prava strana LCD), ale napriek tomu sa chcem spytat, ci neuvazujete do buducnosti aj o moznosti vlastneho nastavenia jasu a podsvietenia. Softverovo to asi nepojde, ale 2 male trimre by to snad vedeli poriesit?

SDS Macro LCD 485 hw SoC-ARM REV1 100Mbit DF5

5

Re: Verzia s LCD

Podsvícení LCD je napevno z napájecí větve přes pevné rezistory. Pokud si je vyměníte za trimry, dosáhnete svého požadovaného výsledku.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !