M A N U Á L M O D U L Ů PROFA
Obsah:
1.Vlastnosti
1.1 Možnosti využití
1.2 Popis modulu PROFA-m
1.3 Popis modulu PROFA-t
1.4 Popis modulu rozšíření PROFA-r
1.5 Rozdělení paměti
1.6 Reálný čas
1.7 Hlášení chyb
1.8 Propojení a komunikace
1.9 Výměna dat s PC
1.10 Česká diakritika
1.11 Odstraňování poruch
1.12 Přerušení
2.Popis jazyka
2.1 Instrukce BASIC
2.2 Podrobnosti kompilátoru
2.3 Příklad programování modulu
2.4 Ladění programu
2.5 Aritmetické možnosti
2.6 Adresace modulu rozšíření PROFA-r
2.7 Inkrementální čítač polohy
2.8 Generátor pulzů a řízení krokových motorů
2.9 Nápověda
3.Podprogramy
3.1 start
3.2 startm
3.3 zámek (ochrana dat)
4.Instrukce displeje HD44780
1.1 Možnosti využití
Systém PROFA zahrnuje několik malých vzájemě komunikujících modulů.
Mohou provádět jednoduché výpočty s 2 bytovými čísly,
linearizovat průběhy, ukládat data (až 64KB),
komunikují s PC, případně i s jiným zařízením po RS232. Všechny
vícefunkční linky lze využívat jako obousměrné CMOS linky (s možností
rozšíření jejich počtu), ke komunikaci, nebo, při doplnění minimálním
počtem součástek, jako napěťový výstup nebo k měření elektrických veličin.
Snadné programování v BASIC je doplněno možností krokování v programu.
Moduly mají reálný čas a elektricky nezávislou paměť EEPROM. Díky malé
spotřebě proudu dobře poslouží i v aplikacích s bateriovým napájením.
Modul PROFA-t pracuje navíc s textovým displejem a čtyřmi tlačítky
a lze ho využít i jako inteligentní terminál, v některých případech např.
na místo komplikovaného nasazení PC.
1.2 Popis modulu PROFA-m
Obvod je na desce 30x31mm jako výměnný modul s 11-pinovým konektorem (délka
desky s konektorem je 40mm, výška 10mm).Univerzální linky zde nejsou chráněny odpory!(vstupy
jsou chráněny pouze uvnitř mikrořadiče)
Technické parametry modulu PROFA-m:
rozměry: 30x40x10mm vč.konektoru
napájení: 6 až 18V
spotřeba: 0,09 až 3mA
hardw.linky: 8 univerzálních pro měření, vstup, výstup a komunikaci
vlastnosti vstupu: hranice mezi log.0 a 1 je 1.4V; vstupní odpor min 100Mohm
vlastnosti výstupu: log.0/1=0V/Unapájecí; Imax=10mA
měřené veličiny: trvání impulsu nebo stavu,perioda,frekvence,odpor,kapacita
reálný čas: sekunda až letopočet, max.chyba 8s za den
komunikace: RS232 upravená pro 1 vodič a zem, rychlost 500 Byt/sec s eliminací chyb valstním protokolem, příp. síťovou ardesou
velikost EEPROM: 32KB
rychlost čtení EEPROM: 1Byt/0.1ms
Zapojení vývodů při pohledu na stranu součástek, konektorem dolů:
P0,...P7,out+5V,GND,+U
1.3 Popis modulu PROFA-t
Obvod je funkční obdobou PROFA-m s konstrukcí uzpůsobenou jako terminál. Má navíc čtyři tlačítka
a samostatný konektor pro textový displej! Tlačítka i displej jsou zabudovány nezávisle na univerzálních linkách
a mají vlastní instrukce pro jednoduchou obsluhu. Univerzální linky jsou přes ochranné odpory 470 ohm vyvedené
na svorkovnici. Napájení z vnějšího zdroje se připojuje též na svorkovnici. Pořadí vývodů je, při pohledu na displej
konektorem vpravo, od shora: +U(napájení), kostra, výstup +5V, PORT 7 až PORT 0. Vývody jsou také popsány
na svorkovnici.
Technické parametry modulu PROFA-t:
rozměry: 95x58x20mm
napájení: 6 až 18V z vnějšího zdroje
spotřeba: 0,15 až 2mA
hardw.linky: 8 univerzálních pro měření, vstup, výstup a komunikaci
vlastnosti vstupu: hranice mezi log.0 a 1 je 1.4V; vstupní odpor min 100Mohm
vlastnosti výstupu: log.0/1=0V/Unapájecí; Imax=5mA
měřené veličiny: trvání impulsu nebo stavu,perioda,frekvence,odpor,kapacita
reálný čas: sekunda až letopočet, max.chyba 8s za den
komunikace: RS232 upravená pro 1 vodič a zem, rychlost 500 Byt/sec s eliminací chyb vlastním protokolem, příp. síťovou adresou
velikost EEPROM: 64KB
rychlost čtení EEPROM: 1Byt/0.1ms
Zapojení vývodů odpovídá obvodu PROFA-m, jen konektor je nahrazen svorkovnicí.
1.4 Popis modulu rozšíření PROFA-r
Obvod slouží k zvětšení počtu vstupně/výstupních linek, k sledování polohy
inkrementálního snímače, k řízení krokových motorů, ke generování pulzů nastavitelné délky a mezery.
Na jednu univerzální linku modulu PROFA-t nebo PROFA-m lze připojit až 30 rozšiřujících
modulů. Každý má vlastní adresu, a komunikuje po sběrnici 1 vodič + zem.
Čtení i zápis I/O linek se provádí přímo BASIC instrukcí
z modulu PROFA-t nebo PROFA-m, viz BASIC - ROZŠIŘUJÍCÍ MODULY.
Technické parametry modulu PROFA-r:
rozměry: 30x40x10mm vč.konektoru
napájení: 9 až 18V
spotřeba: 4 mA
počet linek: 8 x vstup/výstup, 1 x datová sběrnice
mezní rychlosti
inkrementální čítač: 0až10KHz
pulzní denerátor: 11,5Hz až 7,14kHz
řízení krokových motorů: 22,98Hz až 14,28kHz
trvání zápisu/čtení: 3ms
Rozmístění vývodů (pohled na stranu součástek,konektor dolů)
P0,..,P7,COM,GND,+U
1.5 Rozdělení paměti u PROFA-t a -m
Moduly mají elektricky nezávislou paměť EEPROM a rychlejší "neopotřebitelnou" pracovní
paměť RAM. Program je umístěn v EEPROM která slouží i pro záznam
hodnot (naměřené výsledky, přenášené bloky dat atd.).Její obsah lze programem
měnit avšak její životnost je asi 1 milion zápisů.
Pro sekundy a minuty reálného času, a uživatelské proměnné slouží
paměť RAM která se při výpadku napájení "vynuluje". Paměti jsou takto rozděleny:
RAM
Adresa Obsah (ostatní bity jsou použity systémem)
#0 0.až 6.bit = časovač posouvaný po 7,8ms (1s/128)
9./13.bit = příznak posunu celé sekundy/minuty
#1 0.až 3.bit = ukazatel zásobníku (hodnota 0 až 7)
#2 0.až 7.bit = příznakový registr (pro BRANCH a KEYGOTO)
#3 a #4 využity systémem
#5 adresa právě vykonávané instrukce (2Byty)
#6 sekundy a minuty (2Byty) 14.bit zapíná přrušení sekundou na adresu 9.
#7 TRIS=nastavení vstupu/výstupu pro univerzální linky(1Byt)
#8 až #23 uživatelské proměnné BASIC. (16 x 2Byty)
#24až #31 zásobník návratů instrukce GOSUB -> RET. (8 x 2Byty)
#A,#B aritmetické registry (2 x 2Byty)
EEPROM
Adresa Význam
0 Start programu po připojení napájení
3 Přerušení při posunu celé hodiny - obsluhu ukončit "RET"!
Je provedeno jen při instrukcích GOTO,GOSUB,BRANCH a THEN
Skok bez přerušení lze provézt pomocí zápisu #5=adresa
6 Přerušení chybou(přeplnění zásobníku,neznámá instrukce, nebo adresa mimo EEPROM)
V registru #B je adresa instrukce která chybu způsobila (lze ji dohledat ve výpisu kódů: "Soubor:Výpis kódů")
9 Maskovatelné sekundové přerušení. Povolí ho #6,14=1. Návrat je pomocí RET.
Při obsluze blížící se trváním 1 sekundě je potřeba toto přerušení zakázat!.
1.6 Reálný čas
Je dostupný v proměnných "sec" (sekundy) a "min" (minuty).Hodiny
a další hodnoty kalendáře lze umístit v EEPROM, např.vložením souboru
START.PRF u PROFA-t (nebo STARTM.PRF u PROFA-m) který vše obstará.
např. INCLUDE start 'vloží soubor "start.prf"
Potom hodina=B(hod),den=B(den),měsíc=B(měsíc),den v týdnu=B(denvt),
a rok=W(rok).Posun celé sekundy je signalizován nastavením bitu #0,9 a posun
celé minuty #0,13. Tyto bity jsou systémem pouze nastavovány a lze je použít
k časování pravidelných dějů.
např. IF #0,9=1 THEN #0,9=0:GOSUB podprogram 'provedení 1 za sekundu
1.7 Hlášení chyb
Chyba při kompilaci je vyznačena kurzorem v textu a její důvod je
vypsán červeně na informačním spodním řádku. Umístění kurzoru na chybě nemusí být přesné,
proto, při nejasnostech, je třeba podrobnosti k požadovanému zápisu insrukce a parametrů
vyhledat v nápovědě (F1) nebo v tomto manuálu.
Chyby za běhu programu jsou ošetřeny skokem na adresu 6, kde je třeba
programem chybu uložit nebo zobrazit na displeji (běžně to obstarává soubor "start.prf",
vložený na začátek vašeho programu pomocí INCLUDE), případně ignorovat, a znovu
spustit program od adresy 0. V registru #B je, při přerušení chybou, adresa na
které k chybě došlo. Kód který chybu způsobil lze dohledat ve výpisu kódů -viz nabídka
editoru Soubor- Výpis kódů (výpis se obnovuje po každé kompilaci!).
KÓD PŘÍČINA CHYBY
2 Přetečení zásobníku při skoku do podprogramu pomocí GOSUB. Pro skok do podprogramu
lze využít jen 8 vložených úrovní mezi GOSUB .. RET.
43 Podčerpání zásobníku instrukcí RET. Program se tedy nemá kam "vrátit". Může vzniknout
např návratem opakovaným ve smičce.
44 Přetečení zásobníku odložením proměnné pomocí PUSH#B. Je nutno omezit skoky do podprogramu
GOSUB, nebo zamezit odložení proměnné, např jiným zápisem vzorce,např. použitím další proměnné.
46 Podčerpání zásobníku instrukcí pro vyčtení odložené hodnoty POP#A. Chyba může být také
v nesprávném opakování RET, a podobně.
63 Nepoužitá instrukce. Program pravděpodobně zkolaboval a "unikl" kontrole. Příčinu
zbloudění lze vystopovat jednině odebíráním jednotlivych, naposledy přidaných částí. Pokud
k této chybě dochází jen občas, její pravděpodobná příčina bude
skok na adresu zadanou číslem, nikoli návěštím, nebo skok na návěští před instrukcí
DATA nebo FILL. Další příčinou chybného skoku může být zápis nekontrolované hodnoty
do programového čítače #5=... Kód 63 je také použit ke krokování programem.
120,121,122,123 Použití asdesy mimo EEPROM insrukcemi ..=B(adr),..=W(adr),B(adr)=..,W(adr)=..
K tomu může dojít při osazení 32KB a pokusu o čtení nebo zápis do adresy nad 32768.
(Chyba "dělení nulou" není modulem hlášen a je nutno ji ošetčit programově.)
1.8 Propojení a komunikace
Pro komunikaci s PC lze použít COM1 nebo COM2 PC,
nastavený na 9600Bd, 2stopbity, bez paritního bitu. Oba směry jsou svedeny
do jednoho vodiče diodou 1N4148. Konektor CANON 9 pinů je zapojen takto:
CANON připojení
2.pin P7 modulu a katoda diody (katoda je značena pruhem).
Tento pin je potřeba uzemnit odporem 47Kohm na kostru.
3.pin anoda diody
5.pin V0 (kostra modulu)
(Červený vodič propojovacího kabelu na P7, černý na 0V)
Po resetu modulu je vždy na 7.pinu testován signál. Lze tak
natáhnout nový program z PC do paměti EEPROM.
Vzájemné propojení modulů je provedeno přímým spojením libovolných
linek. Na vstupech je třeba použít ochranné sériové odpory 470ohm (PROFA-t tyto
odpory má) Při více modulech na jedné lince je nutné v instrukci přenosu
rozlišit síťovou adresu přijímacího nebo cílového modulu. Společnou datovou
linku je nutno uzemnit jedním odporem 4K7 až 47Kohm!
Přenosový protokol instrukce BASIC zabezpečí rozdělení bloku
na úseky vhodné pro zápis do EEPROM, kontrolou i případné opakováním úseků
(max.16krát) a podá zprávu o kompletnosti viz PŘENOS DAT. Pro důkladné ověření
zápisu lze případně porovnat výsledek instrukce MEMSUM pořízený na vysílací a
přijímací straně a následně žádat opakování nebo hlásit chybu apod.
Případné přerušení přenosu může být způsobeno rušením linky, nebo,
při komunikaci s PC, přílišným počtem spuštěných aplikací.
Při síťové adrese 0 je čekání na každý byt (stejně jako vždy čekání na signál)
240ms. (Při síťové komunikaci je začátk přenosu odlišen min. 10ms klidem a dále je
tolerována nejvýš 5ms mezera mezi byty.)
Instrukce SERIN a SEROUT umožní přenos 1 až 32 bytu s jiným
zařízením. Zde je možné použít pro každý směr odděleně jednu linku.
Čekání klidu linky je u SERIN 1ms, a čekání na signál 240ms.Úspěch
příjmu lze také kontrolovat
např. BRANCH 0,opakuj:nula=0:SEROUT 7,nula,1 'opakuje nebo potvrdí příjem
1.9 Výměna dat s PC
K příjmu dat slouží nabídka "nÁstroje/načíst Data". K jejímu využití
je nutno vložit do hlavní smyčky modulu instrukce k odeslání, např.:
RECV 7,0:BRANCH 0,nic 'čeká po 200ms žádost o data (=např. 123)
IF #8=123 THEN SENDB 7,0,začátek,délka 'odešle data
nic: 'pokračuje smyčka
K odeslání dat lze využít běžné instrukce, např.
ORG 6000 'adresa umístění bloku dat v modulu
DATA "abc",1,2,3,10000 'data k odeslání
Spuštěním kompilace budou data nabídnuta k přenesení do modulu, ve kterém
musí být instrukce pro příjem, např.:
RECB 7,0,4000 'čeká po 200ms data na 7.pinu.(uloží od adresy 4000,
pokud by nebyla uvedena, uloží na adr.shodnou s vysílací stranou)
BRANCH /0,příjem_ok 'úspěch může být hlášen
Pro výměnu dat s jinými moduly lze navíc použít síťovou adresu>0. Pokud pak
nesouhlasí síť.adresa přijímací a vysílací strany, přenos neproběhne.
1.10Česká diakritika
Pro správnou funkci české diakritiky editoru je nutné nainstalovat
češtinu v DOSu a přepnout anglickou klávesnici DOS příkazem "keyb us".Přepínání
češtiny monitoru i klávesnice pak probíhá zároveň pomocí levého ALT+SHIFT.
Displej modulu dovoluje použít 8 uživatelských znaků, což je využito
pro omezenou část české diakritiky nabídnuté v souboru START.PRF. Přímé psatní českých
znaků do textových řetězců (na místo kódů uživatelské tabulky displeje) umožní
jejich předchozí definice v BASIC např.: "í"=2 která je ve zmíněném souboru též provedena.
Ke změně podoby znaku je potřeba vyměnit pomocí apostrofů řádky s příslušnými ("DISPL..")
ve START.PRF .
např. "á"=0:"é"=1 'definice textových konstant
tabzn1: WRDI=64 'nastaví zápis do tabulky znaků displeje od pozice 0
DISPL 2, 4,14, 1,15,17,15,0 'grafická podoba "á"
DISPL 2, 4,14,17,31,16,14,0 'grafická podoba "é"
PRINT "dlouhé á" 'výpis znaků s diakritikou na displej
Pro více než 8 českých znaků je nutno znaky vhodně měnit nebo požít diplej s anglickou
tabulkou ASCII která má v horní části (kódy > 127) i znaky použitelné pro češtinu.
1.11 Odstraňování poruch (Projev chyby - důvod a způsob nápravy)
Modul je propojen s PC a přesto nekomunikuje.
-Ve WINDOWS95(nebo vyš.) používá COM jiný program. Je nutno jej ukončit.
Jinak překontrolujte propojení, napájení modulu a nastavení pořadí COM
v nabídce "nÁstroje/Přenos po COMn".
Dochází k přerušení přenosu případně chybnému natažení dat.
-Používáte modul s verzí "g"(na mikrořadiči) a nižší, nebo kompilátor nižší
než 6.3. Problém odstraníte změnou verze nebo spuštěním PC pouze v DOS.
Program v modulu se občas zhroutí.
-Příliš velká zátěž výstupů - lze napravit snížením zátěže, pžíp.zesílením
zdroje nebo lepším vyhlazením pomocí kondenzátorů. Příčinou může být i natočení
trimru pro kontrast displeje na pravý doraz!
Další příčinou může být přepsání programového kódu,provádění kódu mimo tělo
programu, skok programu do oblasti dat, a podobné programátorské chyby. Např.
w(1)=0 'přepíše rozběhovou adresu, což způsobí zhroucení při příštím startu!
goto adr1 'skok do oblasti dat způsobí zhroucení programu!
adr1: data 1,2,3
print;"AHOJ":end 'program pokračuje mimo programový kód s nepředvídatelným chováním!
1.12 Přerušení
Modul provádí tato přerušení (viz též 1.5 Rozdělení paměti)
a)Při posunu celé hodiny na adresu 3 (určeno k posunu kalendáře). Může k němu dojít jen při skocích
(kvůli zachování aritmetických registrů). Návrat se provádí pomocí RET.
b)Při chybě za běhu na adresu 6 (viz 1.7 Hlášení chyb).
c)Při posunu celé sekundy na adresu 9(Od verze "j" -značeno na mikrořadiči). Je povoleno jen při #6,14=1.
(Vypíná se také zápisem min=...!). Návrat se provádí pomocí RET. Trvá-li jeho obsluha více než sekundu,
je třeba ho během obsluhy zakázat! Provádí se (stejně jako IRQ hodiny) jen při skocích - nikterak při pause a sleep!
2.1 Instrukce BASIC
Profa BASIC je přizpůsoben k použití začátečníkem a při tom nebrání složitějším konstukcím, tvorbě jednoduchých databází,
využití při řízení strojů a podobně.
Instrukce jsou vykonávány ve směru psaní textu. První řádek by měl obsahovat "INCLUDE start" čímž
zajistíte vložení základních funkcí modulu. Dále lze psát více instrukcí na jeden řádek a oddělovat je dvojtečkou. Každý
řádek může být pojmenován, toto "návěští" musí být na levé straně řádku a vždy ukončené dvojtečkou. Je
přehledné vkládat před první instrukci každého řádku tabelátor, a za poslední instrukci doplnit za apostrof vysvětlivku
ke smyslu celého řádku.
např:
INCLUDE start
řádek1: CLS:PRINT "psaný text" 'smaže displej, vypíše text
PAUSE 10:PRINT "jiný text" 'čeká 10s,vypíše text
řádek2: ...
K větvení programu slouží IF podmínka THEN, které vykoná instrukce následující v tomto jediném řádku.
Dalším způsobem větvení je podmíněný skok BRANCH bit,adresa,bit,adresa... který testuje výsledek předchozí operace,
viz popis této instrukce.
např:
zobrazpin: IF PORT,0=1 THEN PRINT "1":GOTO čekej 'zobrazí log.stav=1 na nejnišším vstupním pinu a skočí na "čekej"
PRINT "0" 'zobrazí log.stav=0
čekej: PAUSE 30:BRANCH 0,zobrazpin 'čeká 30s,při stisku levého tlačítka zobrazí pin
GOTO čekej 'opakuje čekání
Na konci celého programu je nutno zabránit pokračování do nepoužité oblasti paměti, např. instrukcí skoku.
Následující seznam instrukcí je rozdělen podle účelu. Nutno dodržet způsob zápisu instrukcí vč.závorek, čárek a středníku,
jen [parametr] lze vynechat -bude nahrazen implicitní hodnotou.
ŘÍZENÍ PROGRAMU
GOTO adresa Skok na zadanou adresu nebo návěští
GOSUB adresa Skok do podprogramu na zadané návěští (uloží adr.návratu)
RETURN Navrát z podprogramu (skok za instrukci GOSUB). Zápis lze zkrátit na RET.
BRANCH bit,adr1,bit,adr2,... Větvení programu dle příznaku (po PAUSE a SLEEP)
test bitů (tlačítek) lze logicky násobit i negovat
např.
adr0: PAUSE 3 'čeká na stisk tlačítka max.3sekundy
BRANCH /0123,adr0 'skok při nestisklém žádném tlačítku
BRANCH 03,adr1,/2,adr2 'tlačítko 0 i 3 stisklé zároveň: skok na adr1
'tlačítko 2 nestisklé: skok na adr2
KEYGOTO adresa Skok při nenulovém příznakovém registru (skok při stisku libovolného tlačítka)
IF podmínka THEN ... Podmíněné provedení řádku (lze testovat i jednotlivý bit, např.:x1,0=1)
např. IF x1=5 THEN x1=x1+1 'zvětšuje x1 po hodnotu 5
DISPLEJ (týká se jen modulu PROFA-t)
CLS Vymaže displej
PRINT [pozice];"text" Výpis textu od zadané pozice
PRINT [pozice],[poč.znaků],[poč.desetin];aritm.tvar Výpis čísla
WRID=aritm. tvar Zapíše instrukci displeje
(viz 4.Instrukce displeje HD44780)
DISPL=aritm. tvar Zapíše znak na displej a posune pozici kurzoru
DISPL n1,n2,... přenese znaky do displeje na předem nastavenou pozici
(Oživení displeje je provedeno v souboru "start.prf", a lze ho obnovit instrukcí
GOSUB inicd.)
TLAČÍTKA (týká se jen modulu PROFA-t)
Jsou číslovaná z leva:0123 a výsledek je uložen (do reg. #2) pro testování
instrukcí BRANCH nebo KEYGOTO.
PAUSE trváni[,filtr,stav portu] Čeká stisk tlačítka,případně změnu portu
SLEEP trváni[,filtr,stav portu] Vypne displej a čeká stisk tlačítka, případně změnu portu.
např.
adr1: PAUSE 5:BRANCH /0123,adr1 'čeká 5sekund,
'při nestisklém tl.opakuje čekání
ÚSPORNÝ REŽIM (týká se jen modulu PROFA-m)
SLEEP trváni[,filtr,stav portu] Sníží spotřebu a čeká zadanou dobu, případně kontroluje změnu portu.
MĚŘÍCÍ FUNKCE
...=FREQ(pin[,trvání]) Změří frekvenci max.20kHz.Trvání:8=2s,7=1s...
(implicitní trvání=6 -výsledek je v Hz)
...=RSIZE(pin[,maxt]) Změří vybíjecí čas seriového RC členu(R<100K)
Následující se liší u PROFA-t:krok=0,061ms PROFA-m:krok=0,01ms
...=PULSIN(stav,pin[,maxt]) Čeká požad.stav a změří jeho trvání
...=PIN(stav,pin[,maxt]) Změří trvání stavu pinu
...=ISIZE(pin[,maxt]) Vybije C a změří čas nabíjení(měření I nebo U)
...=CSIZE(pin[,maxt]) Změří vybíjecí čas paralelního RC členu(R>10k)
stav=stav pinu 0 nebo 1
pin=pořadí I/O linky 0 až 7
maxt=maximální výsledek (omezení trvání) na 256*(2^maxt)-1 kroků:
0 pro 255, 1 pro 511, 2 pro 1023,..., 8 pro 65535
implicitně maxt=0
např. x1=PULSIN(1,2,3) 'změří trvání jedničky na 2.pinu.Výsledek dá do x1
'při hodnotě 1023 měření ukončí
VSTUPY A VÝSTUPY
TRIS=... Nastaví linky portu (1=vstup, 0=výstup)
...=TRIS Přečte nastavení vstupů/výstupů
PORT=... Zápis na port (1=5V a 0=0V) (týká se jen výstupů)
...=PORT Přečte port (hranice mezi 1 a 0 je 1,4V)
např.: TRIS=%00000001 'nastaví 0. pin jako vstup, ostatní jako výstupy
IF port,0=1 THEN goto adr0 'při kladném napětí na 0.pinu skok do adr0
PWM(pin[,poč.per.])=.. Vyrobí signál 1,3KHz s požad.poměrem impulsu a mezery
(rozsah 0:256 až 255:1) z něhož lze RC filtrem vytvořit analogový
výstup (tedy řídit napětí). U=N x 5/256 kde N=hodnota pravé strany přiřazení.
Poč.per=8 až 0, implicitně 4. Počet kmitů=2^Poč.per .
např. PWM(0,5)=128 'nastaví na RC členu na P0 U/2,tedy 2,5V
SOUND pin,trvání,perioda vyrobí tón na požadovaném pinu (nebo krátkou pauzu)
t=trvání*3.9ms; frekvence(KHz)=156/perioda
perioda=0 až 255, 0 neovlivní výstup (= jen pauza)
ROZŠIŘUJÍCÍ MODULY
TRIS(pin,adrd)=0až255 Výběr logických vstupů/výstupů (1=vstup 0=výstup).
Např. TRIS(1,7)=%10000000 nastaví, u modulu s adresou 7 připojeném na PORT,1 profa-t(m),
na 7.pin vstup, na ostatní piny výstupy.
APPEND(pin,adrd)=0až255 Nastavení logických 1/0 na výstupech (= +5V/0V)
...=APPEND(pin,adrd) Přečte stavy vstupů (i výstupů). Hranice mezi 1 a 0 u vstupů je asi 1,4V.
...=POS(pin,adrd) Přečte inkrementální čítač polohy
TRIS(pin,adrd)=n Nastaví režim modulu (viz 2.8 Generátor pulzů a řízení krokových motorů)
PŘENOS DAT
RECV [pin],[síť.adr.] Příjem do proměnné určené vysílací stranou
RECB [pin],[síť.adr.],[adresa umístění] Příjem bloku dat
REC [pin],[síť.adr.] Příjem bloku dat i hodnoty
SENDV [pin],[síť.adr.],cílová proměnná Odešle proměnnou
SENDB [pin],[síť.adr.],začátek bloku,délka bloku Odešle blok dat
pin=pořadí linky 0 až 7 použité pro přenos (implicitně 7)
síť.adr.= číslo 1 až 31 k rozlišení adresy vlastního nebo cílového modulu
v síti. Adresa 0 nerozlišuje modul a je určena jen pro 1 modul a PC, nebo
pro 2 moduly. (Nikoli pro síť.) Dovoluje také přerušení komunikace až na 200ms.
SERIN pin,proměnná,poč.bytů -Přijme jeden až 32 bytů z RS232 a uloží je do RAM
od zadané proměnné. Nejprve čeká klid linky v trvání alespoň 1ms, kvůli rozlišení začátku
sekvence, pak během 200ms očekává signál. Použitý pin nastaví trvale jako vstup.
Proto je vhodné zajistit před sekvencí signálu z protější strany asi 2ms pauzu,
jinak nemusí být příjem úspěšný.
SEROUT pin,proměnná,poč.bytů -Odešle jeden až 32 bytů, začínajících
zadanou proměnnou,po RS232. Použitý pin nastaví trvale jako výstup.
Po proběhnutí instrukce přenosu (krom SEROUT) zůstanou nastaveny příznaky:
#2,0=neúspěch přenosu
#2,1=obsazená linka (detail chyby)
#2,2=přerušení započatého přenosu (detail chyby)
#2,3=přenos bloku
Ověřit kompletnost přenosu lze: "BRANCH 0,opakuj,3,blok"
pr1: SENDV 3,5,x1 'odešle hodnotu z x1 po 3.pinu do x1 desky č.5
BRANCH 0,pr1 'opakuje až do potvrzení od přijímací strany
RECV 3,8 'přijme hodnotu do proměnné určené vysílací stranou
pr2: SERIN 6,#8,3:branch 0,pr2 'čeká příjem 3 B na 6.pinu
serout 5,#8,1 'potvrdí odesláním 1. obdrženého
PRÁCE S EEPROM
B(adresa)=... Zapíše 1 byt do EEPROM na danou adresu.Trvání je 10 až 15ms
W(adresa)=... Zapíše 2 byty -||-
...=B(adresa) Přečte 1 byt z EEPROM z dané adresy. Ttrvání je asi 1ms.
...=W(adresa) Přečte 2 byt -||-
Adresa zde může být zastoupena proměnnou nebo i výpočtem.Při zápisu
mimo EEPROM dojde ke skoku na chybové hlášení (adresa 6)
DATA konstanta1,konstanta2,... Vloží tabulku konstant do EEPROM
(rozlišuje 1/2B a text dle "Kompilátor-Způsoby zápisu hodnot" !)
...=MEMSUM(zač.bloku,délka bloku) Kontrolní součet bloku EEPROM
SEARCH proměnná s adresou, délka bloku, hledaný znak/2znaky/číslo
Hledá v bloku EEPROM jeden nebo dva byty. Nastaví příznak #2,0
(ověření:BRANCH /0,ok) a proměnná s adresou je posunuta
za hledaný znak (znaky).
OSTATNÍ INSTRUKCE
HI(proměnná)=.. Zápis do vyššího bytu proměnné
LO(proměnná)=.. Zápis do nižšího bytu proměnné
...=HI(proměnná) Čtení vyššího bytu proměnné
...=LO(proměnná) Čtení nižšího bytu proměnné
...=RND Funkce vyrobí náhodné číslo 0 až 65535
NOP Prázdná instrukce (0,1ms)
2.2 Podrobnosti kompilátoru
PARAMETRY A HARDW.NÁROKY KOMPILÁTORU
Tato verze je dosovská aplikace ovládaná pouze klávesnicí!
Nepracuje v operačním systému Windows NT ! Požadavky na PC jsou velmi malé
(min.386, 1MB RAM, 300KB místa na HDD). Kompilátor umožňuje použít max.350
návěští nebo konstant. Editor pracuje jen se soubory
v současném adresáři a lze jím zpracovávat text do velikosti 45KB (větší
zdrojový kód lze rozdělit pomocí vkládání souborů - viz INCLUDE )!
PŘÍKAZY KOMPILÁTORU
ORG xx Adresa umístění následujícího kompilovaného bloku v EEPROM modulu.Další instrukce budou
ukládány od této adresy. Lze použít nejvýš 8 bloků, 1.blok od adresy 0 je umístěn automaticky (není-li
určen tímto příkazem jinam).
OffMove Vypne přenesení právě kompilovaného bloku do EEPROM. Příkaz je užitečný pokud jsou
v EEPROM data která nechcete přepsat, ale jejich pozice (návěští) program používá.
PROFA-M Zapne kontrolu odlišných instrukcí (PROFA-M má méně instrukcí než PROFA-t).
TEMPADR xx Nastaví imaginární adresu pro následující návěští. Je určeno k přemístění
programového bloku na jinou pozici v EEPROM.(Např. přenesení programu pomocí dalšího modulu)
Ukončí se novým ORG.
INCLUDE soubor.prf
Vložení souboru s programem -vložený program bude jakoby součástí zdrojového textu.
REM (=apostrof) Poznámka - zbytek řádku není kompilován
END Ukončí kompilaci a další text ponechá bez kontroly
TECHNIKA ZÁPISU ČÍSELNÝCH HODNOT
číslo 0 až 255 -dekadický zápis do 1Bytu
číslo>255 nebo 4až6 místné číslo (např.0000) -dekadický zápis do 2Bytů
%01 -binární zápis (1 až 8 míst=1Byt;9 až 16 míst=2Byty)
$0123456789ABCDEF -hexadecimální zápis(1 až 2 místa=1Byt;3 až 4místa=2Byty)
"text" / návěští -zápis ASCII znaků / 2bytové adresy
DEFINICE PROMĚNNÝCH A KONSTANT
Proměnné uchovávají hodnotu kterou lze programem měnit.Má rozsah 0 až 65535.
Jejich definice není povinná, k založení dojde i při prvním zápisu hodnoty
do proměnné (např.x1=7). Jakmile je však v programu jediná proměnné založena
následující definicí, zakládat pouhým přiřazením už nelze (zabrání se tak
obtížně odhalitelným chybám způsobeným překlepy).
@jméno=# -založí BASIC proměnnou na nejnižší volné adrese RAM
@jméno=#adresa -založí BASIC proměnnou na zadané adrese RAM
Konstanty jsou pojmenovaná čísla (usnadní změny při vícenásobném výskytu stejné
hodnoty).
"1znak"=1B "2znaky"=1B -založí textovou konstantu pro náhradu znaku v PRINT
např.pro českou diakritiku.Max.počet textových konstant je 16.
Např.: "á"=0 'definuje kód 0 pro znak "á" (K definicím lze užít i direktivu SYMBOL.)
PŘEDDEFINOVANÉ KONSTANTY
getsec Dosadí aktuální sekundy dle vnitřních hodin PC (0až59)
getmin Dosadí minuty (0až59)
gethour Dosadí hodiny (0až23)
getdw Dosadí den v týdnu (0až6 =pondělí až neděle)
getday Dosadí den v měsíci (1až31)
getyear Dosadí letopočet (např.2001)
PŘEDDEFINOVANÉ PROMĚNNÉ (="registry"-nezabírají místo v uživatelských proměnných.)
sec pro sekundy reálného času
min pro minuty reálného času
tris určuje nastavení linky jako výstup nebo vstup
port stav vstupů/výstupů
BITOVÉ OPERACE
PROFA BASIC umožňuje použít samostatné bity uživatelských proměnných jako
"přepínače". (Týká se i registrů MIN,SEC,TRIS a PORT, i u rozšíření APPEND.)
Tím zjednoduší práci a může i zkrátit velikost výsledného kódu a zvýšit jeho
rychlost. Bit se uvádí jménem proměnné a jeho pořadím odděleným čárkou.
Hodnota bitu je pouze 0 nebo 1.
např. PORT,7=1 'nastaví poslední pin portu do +5Volt
IF #0,9=1 THEN #0,9=0:GOTO adr1 'při posunu sekundy vynuluje
'její příznak a skočí na adr1
2.3. Příklad programování modulu
Program pro výpis a nastavení hodin a kalendáře je drobnou ukázkou
práce s modulem PROFA-t. Vyžaduje modul s displejem zasunutým v konektoru,
komunikační kabel propojující modul a PC, a správně nastavený COM port editoru
(alt+A,Přenos po COM..).
Otevřete soubor "kalendar.prf" (Alt+S,O), zkompilujte jej (Alt+R)
a připojte napájení k modulu. Proběhne přenos dat a na displeji se objeví
datum a čas který lze po stisku tlačítka nastavit.
Čas je dostupný v proměnných sec a min. Aktuální hodina je
v EEPROM dostupná pomocí b(hod) a datum pomocí b(den),b(měsíc),b(denvt)(=0 až 6
pro pondělí až neděli) a letopočet naleznete ve w(rok).
např. x1=b(měsíc) 'opíše aktuální měsíc do x1
2.4 Ladění programu
Po zapnutí napájení modul nejprve zkontroluje signál na 7.pinu
pro případné natažení nového programu (pokud není v programu vložen zámek).
Dále pokračuje čtením instrukcí od nulté adresy, kde musí být umístěn skok
na začátek programu (viz podprogram start.prf).
Verze 6.6 umožňuje trasování programem za provozu. Lze ho aktivovat vložením "!n:"
na začátek řádku, kde n=počet krokovaných řádků od aktuálního (pro jeden řádek lze "n" vypustit).
Zastavovacích bodů může být více, celkem lze krokovat maximálně 50 řádků. Na PC jsou
při tom zobrazeny hodnoty všech použitých proměnných a formát výpisu každé z nich (dekadicky, hexadecimálně,
binárně nebo znaky) lze zvolit pomocí šipek. V textu je pruhem označen řádek kde program
právě čeká, mezerníkem nebo klávesou ENTER ho lze posunovat. Při krokování nesmí být 7. pin použit pro jiné účely!
Po dokončení ladění programu je nutné odstranit krokovací instrukce ze zdrojového textu
a program znovu natáhnout do modulu.
2.5 Aritmetické možnosti
Modul nabízí, kromě násobení, dělení, sčítání, odčítání, logických
operací a výpisu hodnot na displej ve dvoubajtových číslech (rozsah 0až 65535),
také další možnosti:
-Rozšířené dělení
#4,var1=#4,var2/var3 'nutno zapnout pomocí #1,6=1.
kde var1=libovolná proměnná,
var2 a 3 = proměnná nebo konstanta
#4 = 2 vyšší byty dělence a podílu (před dělením vložit hodnotu, po dělení vyzvednout)
např.: x1=x2/x3 kde x1 a x2 jsou čtyřbytová čísla (proměnné s vyššími byty odlišeny přidání "h")
#4=x2h:#6,1=1 'vloží vyšší byty, zapne rozšířené dělení
x1=x2/x3 'provede dělení
x1h=#4 'vyzvedne vyšší 2 byty výsledku
Registr #4 je měněn ostatními instrukcemi, proto je nutné vepsat hodnotu těsně
před dělením a vyčíst ji hned po dělení.Bit #6,1 zůstane po dělení vypnut.
-Přetečení po násobení v #A
např.: var1=var2*var3:var4=#A 'var4=vyšší 2 byty po násobení
-Dělení desetinným číslem viz 3.Podprogramy
-Výpis desetinné tečky Provede výpis hodnoty s vložením tečky na požadovanou pozici počítanou zprava:
PRINT pozice,poč.znaků,poč.desetin;aritm.tvar
2.6 Adresace modulu rozšíření PROFA-r
Výběr adresy pro komunikaci je popsán v kapitole 2.1 Instrukce
BASIC/VSTUPY A VÝSTUPY/instrukce APPEND
Nastavení adresy na modulu rozšíření (je přednastavena dle objednávky) se provádí pomocí
odporů na vývodech 1(pa,2) a 2(pa,3)mikrořadiče takto:
adresa | R na vývodu 1 | R na vývodu 2 |
0 nepřípustná | 470R | 470R |
1 | 470R | 2K2 |
2 | 470R | 4K7 |
3 | 470R | 15K |
4 | 470R | 33K |
5 | 470R | 100K |
6 | 2K2 | 470R |
7 | 2K2 | 2K2 |
8 | 2K2 | 4K7 |
9 | 2K2 | 15K |
... | ... | ... |
2.7 Inkrementální čítač polohy
Je trvale připojen na P0 a P1 v modulu PROFA-r pokud jsu použity jako vstupy
a nijak nebrání ostatním funkcím. Použití čítače nemá vliv na ostatní piny.
Čítač má rozsah 2B(tedy 0 až 65535). Lze ho nulovat příkazem TRIS(pin,adr)=-1 a číst
..=POS(pin,adr) kde adr=adresa modulu rozšíření. Jeho mezní kmitočet je 10KHz. Jeho
hodnota není ovlivněna čtením ani jinými kroky.
Použití z BASIC:
...=POS(pin,adrd) Přečte inkrementální čítač polohy
TRIS(pin,adrd)= -1 Vynuluje inkrementální čítač polohy
!PROZOR! Inkrementální čítač nepracuje při použití generátoru pulzů nebo
krokových motorů.
2.8 Generátor pulzů a řízení krokových motorů
Generátor pulzů je vyveden u modulu PROFA-r na 2.pinu (ten zůstává přístupný i pomocí TRIS a APPEND !)
Signály pro řízení krokového motoru jsou na 7.až 4.pinu PROFA-r (tyto piny nereagují na APPEND a TRIS
až do zrušení pomocí kódu n= -4). Piny 3.až 0. zůstávají přístupné běžným způsobem.
Použití z BASIC:
TRIS(pin,adrd) = N kód N má tento význam ( je nutno dodržet znaménko +/- !):
(-1 Vynuluje inkrementální čítač polohy)
-2 Zapne generátor pulzů s nastavitelným poměrem mezera : pulz = ts : tp.
-3 Zapne generátor pulzů se střídou 1:1, T=2*tp a s možností pozvolného rozjezdu a
zastavení dle ts=0až127
-4 Zruší výstup pro krokové motory=>uvolní 7. až 4.pin pro běžné využití.
-5 Nastaví jednofázové řízení s plným krokem (postup přepínání 1000,0100,0010,0001).
-6 Nastaví dvoufázové řízení s plným krokem (1100,0110,0011,1001).
-7 Nastaví jednofázové řízení s polovičním krokem (1000,1100,0100,0110,0010,0011,0001,1001)
Pro bipolární řízení je nutné elektrickým propojením posunout spínání opačné polarity o 2 piny.
-8 Směr otáčení krokového motoru +
-9 Směr otáčení krokového motoru -
+512+tp Trvání jednoho kroku motoru nebo periody/pulzu generátoru. Rozsah tp=7 až 4351, skutečný čas pulzu=tp*0.01ms.
Při tp=0až6 modul použije tp=7. Frekvence motoru je tedy 14,28kHz až 22,98Hz a generátoru pulzů 7,14kHz až 11,5Hz.
-20-ts Pozvolný rozjezd a zastavení pro krokové motory a generátor pulzů s pevnou střídou (při -3), nebo nastavitelná mezera (při -2).
Rozsah ts je 7 až 4095 pro délku mezery, nebo 0 až 127 pro rozjezd a zastavení. Při pozvolném rozjezdu se k trvání pulzu přičítá
ts*2 (celkový t=(tp+ts*2)*0.01ms) a v každém kroku je ts zmenšován o 1 až po ts=0.
Při dojezdu je "ts" zvětšován od 0 tak, aby při posledním pulzu dosáhl původní velikosti.
OUT(pin,adrd)=0až65535 Spuštění generátoru pulzů nebo krokového motoru (po -3 nebo -2 platí pro generátor pulzů, po nastavení režimu -5,-6,-7 platí pro krokový motor).
Provede poloviční počet pulzů generátoru nebo zadaný počet kroků motoru. Není-li počet pulzů generátoru sudý, 2.pin dočasně setrvá ve stavu 1 !
POZOR při běhu generátoru nebo krokového motoru je pozastaven inkrementální čítač
i komunikace s nadřízeným modulem. Na ukončení lze čekat např. pomocí:
čekej: #4=APPEND(pin,adrd):BRANCH 0,čekej
2.8 Nápověda
Stručná nápověda je dostupná v pruhu nabídek nebo klávesou F1. Pro rychlé
nalezení instrukce lze umístit kurzor na hledané slovo a stisknout F1.
3 Nabídnuté podprogramy
Slouží pro usnadnění stavby větších celků (uživatelské nabídky,
čeština, záznam dat, atd.). Provádí se vkládáním souborů pomocí instrukce INCLUDE.
Je při něm nutné volit jména konstant a návěští tak aby nedošlo k jejich opakování
v celém programu. Pro předávání hodnot v nabídnutých podprogramech byly použity
proměnné x1,x2 a x3, definované souborem start.prf nebo startm.prf.
3.1.Start.prf
Obsahuje tyto podprogramy:
1. Česká diakritika (8 znaků použitelných pro výpis na displej)
2. Hlášení chyb vzniklých za běhu programu
3. Kalendář (sekundy až roky, jejich výpis a nastavení uživatelem)
4. Input (uživatelský zápis čísla pomocí tlačítek a displeje)
5. Aritmetické a datové doplňky:
-5.a) DĚLENÍ DESETINNÝM ČÍSLEM (pro jemné ladění hodnoty, teplotní kompenzace a pod.)
-5.b) VÝPIS DLOUHÉHO ČÍSLA (4B) NA DISPLEJ
-5.c) VÝPIS ČISLA V BINÁRNÍM TVARU
-5.d) VÝPIS ČÍSLA V HEXADECIMÁLNÍM TVARU
-5.e) 3Bytové POČITADLO (0až 16 777 215) V EEPROM SE ZVÝŠENÍM ŽIVOTNOSTI
-5.f) PŘENOS DAT DO PC
6. Převod podle grafu s rozsahem 2B (pro linearizaci průběhů)
7. Tvorba uživatelského menu (max.16 položek v každém menu a 4 úrovně vnoření do podmenu)
Soubor Start.prf musí být umístěn na začátku paměti! Definuje:
-Textové konstanty českých znaků á,č,é,ě,í,ř,ý,ž použitelné přímo
v instrukci PRINT (nutná čeština editoru).
-Návěští
diakr = pozice tabulky osmi znaků české diakitiky
ediakr =prázdná tabulka znaků(inicializace bez natažení diakritiky:"DINIC ediakr")
hod,den,denvt,měsíc,rok = umístění aktuálního času (použití: x=B(hod)...W(rok))
-Proměnné x1,x2,x3 -pro pomocné výpočty a k předávání parametrů ve všech
nabídnutých podprogramech. Mimo tyto podprogramy je lze jakkoli využívat.
Popis použití, případně příklad, naleznete u každého podprogramu přímo v souboru "start.prf".
3.2.Startm.prf
Je obdobou souboru "Start.prf" určeným pro modul PROFA-m který nemá
displej a tlačítka. Chybu za běhu řeší novým startem, a obsahuje pouze hodnoty
kalendáře hod,den,denvt,měsíc,rok a podprogram pro posun kalendáře a dělení
desetinným číslem.
3.3 Zámek
K zabránění okopírování případně poškození vašeho software lze
použít tento podprogram, který vypne čtení 7.pinu po startu. Tím zamezí
případnému natažení krátkého čtecího programu, a pod. Okopírování obsahu
po odletování obvodu lze těžko zneužít -obsah je zakódován u každého modulu
odlišně.
ZÁMEK.PRF je nutné vložit ve zdrojovém textu vždy od adresy 0, ještě
před podprogram START. Odblokování EERPROM lze provést odesláním hodnoty 155 do
první proměnné při startu modulu (nabídka: nÁstroje / načíst Data / žádost
do #8=155, -na ostatních hodnotách nezáleží).Načtení se nemusí povést na poprvé,
je proto třeba vícekrát modul resetovat, dokud se neobjeví na displeji číselná
hodnota.Ta signalizuje přepis dat EEPROM po jehož dokončení bude "čtení
po startu" povoleno (na displeji se objeví "O.K.").
4.Instrukce displeje HD44780
Instrukce se vkládají do displeje příkazem WRDI=kód instrukce. Po
zapnutí napájení nebo po instrukci SLEEP je nutné provést inicializaci
displeje viz program "start.prf".
KÓD Význam
1 vymaže displej (totéž jako CLS)
2 kurzor na začátek řádku
4 posun kurzoru po zápisu znaku vlevo
5 posun okna displeje po zápisu znaku vlevo
6 posun kurzoru po zápisu znaku vpravo
7 posun okna displeje po zápisu znaku vpravo
12 vypne jakékoli značení kurzoru
13 zapne označení kurzoru blikáním znaku
14 zapne označení kurzoru podtržením
15 zapne označení kurzoru blikáním znaku i podtržením
16 posun kurzoru vlevo
20 posun kurzoru vpravo
24 posun okna displeje vpravo
28 posun okna displeje vlevo
64+x nastavení adresy zápisu do tabulky znaků. x=0 až 63 (1znak=8Bytů)
128+x nastavení pozice kurzoru. x=0 až 127