AMiNi Kompaktní řídicí systém
Programátorská příručka
Verze 1.1
Aplikace Mikroprocesorové Techniky
7.03
AMiT, spol. s r. o. nepřejímá žádné záruky, pokud se týče obsahu této publikace a vyhrazuje si právo měnit obsah dokumentace bez závazku tyto změny oznámit jakékoli osobě či organizaci. Tento dokument může být kopírován a rozšiřován za následujících podmínek: 1. Celý text musí být kopírován bez úprav a se zahrnutím všech stránek. 2. Všechny kopie musí obsahovat označení autorského práva společnosti AMiT, spol. s r. o. a veškerá další upozornění v dokumentu uvedená. 3. Tento dokument nesmí být distribuován za účelem dosažení zisku. V publikaci použité názvy produktů, firem apod. mohou být ochrannými známkami nebo registrovanými ochrannými známkami příslušných vlastníků. AMiT je registrovaná ochranná známka. AMiNi je registrovaná ochranná známka. DB-Net je registrovaná ochranná známka. AMAP je registrovaná ochranná známka.
®
Copyright (c)2003 AMiT, spol. s r. o. AMiT, spol. s r. o. Chlumova 17, 130 00 Praha 3, Česká republika tel./fax: 222 780 100, 222 781 516, 222 782 297 Kollárova 6a, 612 00 Brno, Česká republika tel./fax: 541 217 220, 549 210 403 Starobělská 13, 700 30 Ostrava, Česká republika tel./fax: 596 708 300, 596 708 301
File:, mAMiNi_11.doc Created: 11.6.02 Autor: Stanislav Podolák Rev.: 9.02, Doc.ver.:1.10
Programátorská příručka AMiNi
2
Obsah Obsah
3
1.
Úvod
5
2.
Technické parametry
6
2.1.
Rozměry Mechanické rozměry AMiNi Umístění konektorů a svorek Konfigurace a indikace Umístění přepínačů a indikačních LED HW konfigurace Typické volby SW konfigurace LED Napájení Komunikační linky RS232 RS485 ETHERNET Technické parametry
7 7 7 8 8 8 8 9 9 9 9 9 10 10 10
Paměť a I/O prostor
11
FLASH, RAM a ladění UART Obvod reálného času Řadič Ethernetu Signál PWGOOD Obvod WATCHDOG Režim Bootstrap Paměť EEPROM
11 12 12 13 13 15 15 16
2.2.
2.3.
3.
4. 4.1.
Programování systému AMiNi
17
Zavádění programu do systému DN166 Nastavení DN166 Vstupní formát Komunikační kanál Bázová adresa Výpis činnosti Terminálový režim Bootstrap mód Externí zavaděč Příklady použití DN166 Programování paměti FLASH HW přepínače Nová HW konfigurace Nahrávání programu do RAM HW přepínače Příkazový řádek Nahrávání programu do RAM (možnost startu aplikace z RAM) HW přepínače Příkazový řádek Nová HW konfigurace Poznámka
17 17 17 17 18 18 18 18 18 19 19 19 19 19 19 19 19 19 20 20 20 20
Programátorská příručka AMiNi
3
Nahrávání programu do RAM v režimu Bootstrap HW přepínače Příkazový řádek Nová HW konfigurace SODOB166 Ladění v RAM, monitor ve FLASH HW přepínače Definice Použití AC166 Rozložení paměťových oblastí Model SMALL Upozornění Model LARGE Zápis do FLASH za běhu programu
20 20 20 20 21 21 21 21 21 22 22 23 24 24
5.
Obsluha V/V
27
5.1.
Číslicové vstupy Čítačové vstupy Číslicové výstupy Analogové vstupy Schéma zapojení Programovatelné LED Konfigurační DIP přepínač
27 27 28 29 29 30 31
4.2.
4.3. 4.4.
5.2. 5.3. 5.4. 5.5.
Programátorská příručka AMiNi
4
1.
Úvod AMiNi je malý kompaktní řídicí systém v plastové krabičce s možností montáže na DIN lištu 35 mm. Základní verze systému AMiNi má 8 galvanicky oddělených číslicových vstupů, 8 galvanicky oddělených číslicových výstupů 24 V/0,3 A, 4 analogové vstupy (0-5V, 0-10V, 0-20 mA, Ni1000). Sériová rozhraní RS232 a RS485 bez galvanického oddělení. Rozhraní RS232 umožňuje přímé připojení modemu nebo terminálu se sériovým rozhraním. Verze systému AMiNi-E obsahuje navíc rozhraní Ethernet s přenosovou rychlostí 10 Mbps. V této příručce se budeme zabývat pouze programováním systému AMiNi v jazyce C. Problematice programování systému s nástrojem PSE jsou věnovány samostatné příručky. Nejsou zde také popsány svorky všech konektorů. Tomu je věnován samostatný dokument – Technická příručka. Standardní osazení AMiNi i AMiNi-E je 512 KB RAM a 512 KB FLASH, verze označené AMiNi/1M a AMiNi-E/1M jsou osazeny 1 MB RAM a 512 KB FLASH. K pochopení následujícího textu předpokládáme základní znalosti rodiny procesorů SAB80C166 a SAB-C167.
Programátorská příručka AMiNi
5
2.
Technické parametry CPU FLASH RAM EEPROM Zálohování RAM
SAB C167CR-LM 512 KB 512 KB / 1024 KB 2 KB 5 let bez napájení
Číslicové vstupy
8× Logická 0 min. 0 V, max. 5 V Logická 1 min. 16 V, max. 30 V 24 V ss / 24 V st Ano 300 V st /300 V ss / 2500 V 1 minuta*
Typ vstupu Galvanické oddělení Pevnost galvanického oddělení Číslicové výstupy Galvanické oddělení Pevnost galvanického oddělení Ochrana číslicových výstupů
8× Tranzistorové výstupy 24V ss/0,3A Ano 300 V st /300 V ss / 2500 V 1 minuta* Elektronika spínače
Analogové vstupy Typ vstupu Galvanické oddělení Ochrana analogových vstupů Sériový komunikační kanál
4× 0..5V/ 0..10V/ 0..20mA/ Ni1000 Ne Diody + odpor 10KΩ
Rozhraní Ethernet Konektor RS232 Konektor RS485 Konektor Ethernet
RS232 - bez galv. oddělení RS485 - bez galv. oddělení 10 Mbps RJ 45 dle EIA-561 Pružinové svorky WAGO RJ45, dle IEEE802.3
Mechanické provedení Montáž Krytí Připojení signálů Napájení Maximální odběr 24V Pracovní teplota Skladovací teplota Maximální vlhkost okolí Váha Rozměry (š × v × h)
Plastová krabička Na DIN lištu 35 mm IP20 Pružinové konektory WAGO 24V ss ±20% 250 mA 0 ÷ 70 °C -20 ÷ 70 °C 95 % nekondenzující 180 g 106 × 95 × 74 mm
*
Platí pro stupeň znečištění 2, kategorie přepětí v instalaci II.
Programátorská příručka AMiNi
6
2.1.
Rozměry
Mechanické rozměry AMiNi AI.0 AI.1 AI.2 AI.3 AGND
1 2 3 4 5
IGND DI.0 DI.1 DI.2 DI.3 DI.4 DI.5 DI.6 DI.7 IGND
AI CONFIGURATION
6 7 8 9 10 11 12 13 14 15
Rx232
ADR0 ADR1 ADR2 ADR3 ADR4 BAUD0 BAUD1 SCOM APPLIC USER
LNK ACT
+24V GND
5
6
7
6
7
DIGITAL OUTPUTS 0
1
2
3
4
5
25 24 23 22 21 20 19 18 17 16
RS232
E+24V DO.0 DO.1 DO.2 DO.3 DO.4 DO.5 DO.6 DO.7 EGND
105,6
73,2
Analogové vstupy AI0.0 .. AI0.3
Číslicové vstupy DI0.0 .. DI0.7
5
AI CONFIGURATION
SW
ON
ON
1 2 3 4
1 2 3 4 5 6 7 8 9 10 ADR0 ADR1 ADR2 ADR3 ADR4 BAUD0 BAUD1 SCOM APPLIC USER
HW
AMiNi A
B
GND
27 26
+24V GND
6
Rx232 Tx232 Rx485 Tx485 LNK ACT
7 8 9 10 11 12 13 14 15
0
1
2
3
4
5
6
7
6
7
DIGITAL INPUTS RUN ERR S0 S1 S2
DIGITAL OUTPUTS ETHERNET
30 29 28
IGND DI.0 DI.1 DI.2 DI.3 DI.4 DI.5 DI.6 DI.7 IGND
SYST EM L EDS
1 2 3 4
SYST EM LE DS
AI.0 AI.1 AI.2 AI.3 AGND
CONFIG FLSH WR BOOTSTR RTS RST
Umístění konektorů a svorek
GND
4
RUN
S2
27 26
3
ERR S0
ETHERNET
B
2
S1
AMiNi A
1
DIGITAL INPUTS
94,4
1 2 3 4 5 6 7 8 9 10
Tx485
90,1
1 2 3 4
30 29 28
0
SYSTE M LED S
Tx232 Rx485
SYST EM L EDS
SW ON
CONFIG FLSH WR BOOTSTR RTS RST
HW ON
RS232
Linka RS485 Napájení systému
0
1
2
3
4
5
25 24 23 22 21 20 19 18 17 16 E+24V DO.0 DO.1 DO.2 DO.3 DO.4 DO.5 DO.6 DO.7 EGND
Číslicové výstupy DO0.0 .. DO0.7 Rozhraní Ethernet
Linka RS232
Programátorská příručka AMiNi
7
Konfigurace a indikace SW konfigurace
AI.0 AI.1 AI.2 AI.3 AGND
1 2 3 4
5
Linkové LED
IGND DI.0 DI.1 DI.2 DI.3 DI.4 DI.5 DI.6 DI.7 IGND
AI CONFIGURATION
ON
ON
1 2 3 4
1 2 3 4 5 6 7 8 9 10 ADR0 ADR1 ADR2 ADR3 ADR4 BAUD0 BAUD1 SCOM APPLIC USER
SW
CONFIG FLSH WR BOOTSTR RTS RST
HW
6
Rx232 Tx232 Rx485 Tx485 LNK ACT
B GND
27 26
+24V GND
1
2
3
4
5
6
7
Stav číslicových vstupů
DIGITAL INPUTS RUN ERR S0
Uživatelské LED
DIGITAL OUTPUTS 0
ETHERNET
A
0
S1 S2
AMiNi 30 29 28
7 8 9 10 11 12 13 14 15
SYST EM L EDS
Umístění přepínačů a indikačních LED
SYST EM LE DS
2.2.
RS232
1
2
3
4
5
6
7
25 24 23 22 21 20 19 18 17 16
E+24V DO.0 DO.1 DO.2 DO.3 DO.4 DO.5 DO.6 DO.7 EGND
Stav číslicových výstupů
HW konfigurace Systémové LED
HW konfigurace
♦ DIP 1
Konfigurace
Využití tohoto přepínače je závislé na programovém vybavení, stav přepínače je možno číst PINem P6.5 procesoru. Monitor C167W_MS.ABS dokáže využívat tento přepínač, a umožňuje spustit aplikaci v RAM ihned po resetu.
Typické volby
♦ DIP 2 ON OFF
Programování FLASH Zápis do FLASH povolen Zápis do FLASH zakázán
♦ DIP 3 ON OFF
Režim Bootstrap Zvolen režim Bootstrap Standardní režim
♦ DIP 4 ON OFF
Reset po lince RS232 Povolen reset po lince RS232 Reset po lince RS232 zablokován
♦ Programování FLASH programem DN166 HW DIP 1..4 x ON ON ON ♦ Nahrávání programu do RAM - ve FLASH je Monitor C167W_M.ABS HW DIP 1..4 x OFF OFF ON
Programátorská příručka AMiNi
8
♦ Start programu z FLASH + RESET z linky HW DIP 1..4 x OFF OFF ON SW konfigurace
2.3.
DIP1..10
určeno softwarem
LED
Pomocí LED je indikována aktivita linek RS232, RS485 a rozhraní Ethernet. Dále je k dispozici celkem 9 LED, které je možno programovat dle požadavků uživatele.
Napájení
Napájecí napětí systému je 24 V ss ±20 %. K připojení napájení slouží bezšroubový konektor WAGO 734-202. Systém AMiNi má sériová rozhraní RS232 a RS485 bez galvanického oddělení.
Komunikační linky RS232
Poznámka
Připojení PC
Rozhraní RS232 využívá konektor RJ45 zapojený dle EIA-561.Toto rozhraní je možné využít pro přímé připojení modemu, protože linka obsahuje i signály pro řízení linky. Stav komunikační linky je indikován LED diodami. Pro toto rozhraní je využíván UART0 procesoru.
CANON 9 PC
Význam
TYP
RJ45 AMiNi
PIN CPU
PIN 1 PIN 2 PIN 3 PIN 4 PIN 5 PIN 6 PIN 7 PIN 8 PIN 9
Neobsazeno Rx Data Tx Data DTR GND DSR RTS CTS RI
Vstup Výstup Výstup Vstup Výstup Vstup Vstup
PIN 6 PIN 5 PIN 2 PIN 4 PIN 3 PIN 7 PIN 8 PIN 1
P3.11 P3.10 P2.1
Položka VÝZNAM odpovídá signálům na systému AMiNi, připojuje se křížem. Položka TYP je typ signálu na systému AMiNi. Pro snadné připojení systému k osobnímu počítači jsou k dispozici redukce mezi kabely s konektory RJ45 a CANON DB9. K připojení osobního počítače použijeme KABEL232RP z produkce AMiT. PC
Připojení modemu
P2.2 P2.0 P7.6
1 6 2 7 3 8 4 9 5
AMiNi
1 2 3 4 5 6 7 8
K připojení modemu použijeme KABEL232R9 z produkce AMiT
Modem
1 6 2 7 3 8 4 9 5
Programátorská příručka AMiNi
1 2 3 4 5 6 7 8
AMiNi
9
Stav komunikační linky je indikován na LED na panelu. Pro správnou činnost RS232 je nutno nastavit PINy P2.2, P2.3, P3.11 a P7.6 CPU C167 jako vstupní, a PINy P2.0, P2.11 a P3.10 jako výstupní. RS485
Rozhraní RS485 je k dispozici bez galvanického oddělení. Na komunikační linku může být přímo připojen pouze jeden řídicí systém AMiNi. V tomto jediném místě je komunikační linka přímo uzemněna. Ostatní systémy AMiNi můžou být do sítě zapojeny jen přes opakovač, například AREP45D z produkce firmy AMiT. Vedení musí být provedeno krouceným párem a zakončeno na obou koncích charakteristickou impedancí 120 Ω. Maximální délka jednoho segmentu činí 1.2 km/19200 Bd. Při nutnosti komunikace na větší vzdálenost je nutné vřazovat do vedení opakovač (AREP485D z produkce firmy AMiT). Linkové obvody rozhraní RS485 obsahují obvody měkkých ochran proti přepětí. Více viz technická příručka systému AMiNi a příručka Projekční podklady. Pro toto rozhraní je využíván samostatný UART. Pro jeho obsluhu jsou připraveny v knihovně AMINI_x.LIB obslužné funkce, viz následující popis.
Technické parametry
Přípojná místa Připojovací vodiče Ochrana proti přepětí Galvanické oddělení Zakončovací odpor Maximální délka vodiče Maximální počet stanic Indikace funkce
Konektory WAGO 734 0,08 .. 1,5 mm2 Transil 600 W Ne Externí 1200 m / 19200 Bd 32 LED na panelu
Toto rozhraní je vyvedeno na WAGO konektor, stav komunikační linky je indikován LED na panelu. Směr vysílání linky RS485 je řízen PINem P3.15. ETHERNET
Rozhraní Ethernet je k dispozici pouze u verzí AMiNi-E a AMiNi-E/1M. Obvody rozhraní Ethernet jsou galvanicky odděleny od ostatní elektroniky systému AMiNi.
Technické parametry
Přípojná místa Konektor RJ45 dle IEEE802.3 Použitý řadič RTL8019AS Galvanické oddělení Ano Pevnost galvanického oddělení 300 V ss / 300 V st Přenosová rychlost 10 Mbit/s
Programátorská příručka AMiNi
10
3.
Paměť a I/O prostor V systémech s procesorem 80C166 bylo dáno rozložení paměťových prostorů pouze hardwarovým řešením. V systému AMiNi, je rozložení dáno především programem. Z důvodu maximálního výpočetního výkonu byla zvolena šestnáctibitová nemultiplexovaná konfigurace sběrnice. Pro přístup k paměti RAM je třeba nastavit jeden wait stav, pro FLASH není nutno zpomalovat přístup (lze použít 0 wait stavů), a jeden instrukční cyklus trvá 100 ns. Oblast, kde je namapován UART vyžaduje dva wait stavy a oblasti kde jsou připojeny obvody reálného času a řadič Ethrnetu vyžadují tři wait stavy. Správné nastavení zajišťuje funkce CopyROM2RAM z knihovny AMINI_x.LIB. Procesor startuje v módu, kdy na adresové sběrnici je platných pouze 20 bitů, zbytek je adresován signály CS0 .. CS4, dle nastavení registrů BUSCON0..BUSCON4 a ADDRSEL1..ADDRSEL4. Signály CS1..CS4 jsou aktivní v oblastech daných nastavením registrů ADDRSEL1..ADDRSEL4 s parametry závislými na nastavení registrů BUSCON1..BUSCON4. Všude mimo tyto oblasti je aktivní CS0 s parametry dle nastavení registru BUSCON0. Doporučujeme používat následující nastavení registrů – tak je to i nastaveno během vykonání sekce STARTUP při volání funkce CopyROM2RAM v knihovně AMINI_x.LIB:
FLASH, RAM a ladění
Signál
Oblast
Adresová oblast
Sběrnice
CS0
FLASH
0 WAIT
CS1 CS2 CS3 CS4
RAM UART RTC LAN
1 MB od adresy 0x00 0000 od 0x22 1000 do 0xFF FFFF 1 MB od adresy 0x10 0000 4 KB od adresy 0x20 0000 4 KB od adresy 0x21 0000 4 KB od adresy 0x22 0000
1 WAIT 2 WAIT 3 WAIT 3 WAIT
Pro normální aplikaci budeme předpokládat, že paměť FLASH se nachází v oblasti od 0x00 0000 do 0x07 FFFF a paměť RAM v oblasti od 0x18 0000 do 0x1F FFFF. Pokud pro ladění této aplikace použijeme modul AMiNi/1M nebo AMiNi-E/1M s 1 MB RAM, můžeme ponechat shodné nastavení oblastí. Pro ladění nastavuje monitor oblast RAM na rozmezí 0x00 0000 až 0x1F FFFF. Část paměti RAM z oblasti 0x10 0000 až 0x17 FFFF se totiž zrcadlí i do oblasti 0x00 0000 až 0x07 FFFF, kde se standardně nachází paměť FLASH. Ve standardním systému AMiNi můžeme ladit aplikace, pokud vystačíme s prostorem 512 KB pro program, konstanty i proměnné. Potom budeme přistupovat například do oblasti 0x00 0000 až 0x03 FFFF jako k paměti FLASH – sem umístíme program a konstanty, v oblasti 0x1C 0000 až 0x1F FFFF potom proměnné. Další podrobnosti o adresování AMiNi jsou v části věnované použití AC166.
Programátorská příručka AMiNi
11
UART
Protože samotný procesor má pouze jedno rozhraní UART, je na desce osazen další UART TLC16C550. Jeho bázová adresa je na adrese 0x20 0000, signál interrupt je připojen na PIN P7.4 procesoru. Pro přístup k registrům UARTu je sběrnice nastavena do osmibitového nemultiplexovaného módu se 2 WAIT stavy. Správné nastavení sběrnice zajišťuje funkce CopyROM2RAM z knihovny. Pro obsluhu UARTu je v knihovně AMINI_x.LIB připravena skupina funkcí. void write_uart_reg(byte reg, byte data); /* zapis do registru UARTu
*/
byte read_uart_reg(byte reg); /* cteni z registru UARTu
*/
void uart_init(word baudrate, word parity, word databit, word stopbit); /* inicializace UARTu
*/
/* vyslani znaku
*/
/* priznak prijateho znaku
*/
/* prijem znaku
*/
/* povoleni vysilani na RS485
*/
/* zakaz vysilani na RS485
*/
char uart_send(char znak); word uart_data_ready(void); char uart_receive(void); void enable_tx485(void); void disable_tx485(void);
Uvedené funkce pracují s UARTem v poolingu a bez využití FIFO registrů. Pro jejich obsluhu je třeba nastudovat podklady výrobce I/O firmy Texas Instruments. Stav signálu INTERRUPT můžeme sledovat na PINu P7.4, a ten můžeme naprogramovat tak, že bude generovat přerušení procesoru. Obvod reálného času
Bázová adresa obvodu RTC je nastavena na hodnotu 0x21 0000. Významné jsou pouze spodní čtyři bity. Pro přístup k registrům RTC je sběrnice nastavena do osmibitového nemultiplexovaného módu se 3 WAIT stavy. Platných je tedy 16 následujících adres, včetně bázové adresy. Není třeba přistupovat na každou sudou adresu, jako tomu bylo u šestnáctibitových systémů s 80C166. Správné nastavení sběrnice zajišťuje funkce CopyROM2RAM z knihovny. Obvod reálného času použitý v systému je typ RTC 72423 od firmy EPSON. Počáteční adresa je 0x21 0000, významné jsou pouze čtyři bity. Podrobnosti o obsluze tohoto obvodu jsou uvedeny v katalogu výrobce, knihovna AMINI_x.LIB obsahuje následující funkce: void get_time(tTIME *time); void set_time(tTIME *time); void get_date(tDATE *date); void set_date(tDATE *date);
Programátorská příručka AMiNi
12
Datum a čas je předáván ve strukturách, které jsou definovány následujícím způsobem: typedef struct { byte sec; byte min; byte hour; } tTIME; typedef struct { byte day; byte month; byte year; byte weekday;
/* 0-Sun, 1-Mon, .. */
} tDATE;
Řadič Ethernetu
Bázová adresa obvodu RTL8019AS je nastavena na hodnotu 0x22 0000. Významných je pouze spodních pět bitů. Pro přístup k registrům řadiče je sběrnice nastavena do osmibitového nemultiplexovaného módu se 3 WAIT stavy. Platných je tedy 32 následujících adres, včetně bázové adresy. Správné nastavení sběrnice zajišťuje funkce CopyROM2RAM z knihovny. Stav signálu INTERRUPT od obvodu můžeme sledovat na PINu P7.5, a ten můžeme naprogramovat tak, že bude generovat přerušení procesoru. Obvod řadiče Ethernetu vyrábí firma Realtek. Podrobnosti o obsluze tohoto obvodu jsou uvedeny v katalogu výrobce, knihovna AMINI_x.LIB neobsahuje funkce s příklady obsluhy. Ty jsou k dispozici po dohodě na obchodním oddělení firmy AMiT.
Signál PWGOOD
Pokud při běhu systému poklesne napájecí napětí pod 15V, je generováno nemaskovatelné přerušení NMI. Protože toto přerušení je generováno pouze při poklesu, nemá procesor žádné informace o stavu, kdy se napětí zvýší. Proto je signál, který vede na PIN NMI souběžně veden i na PIN procesoru P5.11
Příklad
Pro lepší vysvětlení vezmeme následující příklad: Při jmenovitém napájecím napětí systému, tedy 24 V, bude na PINu PWGOOD napětí 2,14 V. Signál NMI je generován při napětí 1,3 V na PWGOOD, tedy při 14,8 V napájecího napětí. Systém bude pracovat ještě během poklesu napájecího napětí až na úroveň 12,5 V. Na PINu PWGOOD v tu chvíli bude 1,09 V. Průběh napětí na PINu PWGOOD pro danou situaci je na následujícím obrázku: Průběh napájecího napětí Úroveň napájení při NMI Úroveň napájení při RST
15 V Vx (dáno konstrukcí) t Interval pro ukončení práce
Programátorská příručka AMiNi
13
Během časového intervalu, který máme k dispozici je vhodné například dokončit ukládání údajů do sériové EEPROM. Nejjednodušší obsloužení NMI
♦ Dokončit provádění kritických částí programu ♦ Skočit do nekonečné smyčky, ze které se systém dostane až po průchodu resetem. V případě, že se jedná pouze o krátkodobý výpadek, máme při tomto řešení prostě smůlu, a zařízení začne správně pracovat až po úplném výpadku, a novém připojení napájení (nebo po aktivaci watch dogu, pokud běží, a v nekonečné smyčce není obsluhován).
Běžná obsluha NMI
Uvedenou situaci dokáže řešit tento postup: ♦ Dokončit provádění kritických částí programu ♦ Skočit do časové smyčky ♦ Pokud proběhne celá časová smyčka, a procesor pořád běží zavoláme instrukci SRST. Ta je dostupné i pro programátory v jazyce C prostřednictvím intrinstických funkcí (jejich definice se nalézá v souboru INTRINST.H)
SRST
Průběh uvedené situace je na následujícím obrázku:
Průběh napájecího napětí Úroveň napájení při NMI Úroveň napájení při RST
t Kritická obsluha Časová smyčka
Volba délky časové smyčky je otázkou kompromisu. Příliš krátká smyčka zresetuje procesor těsně před úplným vypadnutím systému, dlouhá smyčka znamená příliš dlouhý výpadek systému i při krátkém poklesu napájení.
Programátorská příručka AMiNi
14
SRST
Při tomto řešení obsluhy NMI ale nikdy nemůžeme zcela vyloučit následující situaci:
RST
Průběh napájecího napětí Úroveň napájení při NMI Úroveň napájení při RST
t Kritická obsluha Časová smyčka
V tomto případě po proběhnutí časové smyčky začne procesor vykonávat inicializaci a rozbíhat aplikaci, která bude ukončena již bez jakéhokoliv upozornění. Proto je třeba po NMI a kritické obsluze vložit testování úrovně na PINu P5.11 a dle jeho stavu se potom zachovat. Obvod WATCHDOG
Procesor C167 obsahuje watch dog časovač, který je možno spustit během startu procesoru – více viz manuál procesoru. Mimo to systém AMiNi obsahuje externí časovač watch dog realizovaný obvodem ADM691. Tento časovač obsluhujeme změnou stavu na PINu P3.9. Po resetu je PIN P3.9 nastaven jako vstupní, a watch dog časovač je neaktivní. Jakmile PIN P3.9 nastavíme jako výstupní, musíme jeho stav měnit minimálně každých 850 ms, jinak je generován reset procesoru.
Režim Bootstrap
V režimu Bootstrap je možné do interní paměti RAM procesoru zavést servisní program, který umožňuje testovat komponenty systému, obsluhovat periférie na sběrnici I2C, programovat paměť FLASH, nebo pouze zavést libovolný program do paměti RAM. Režim Bootstrap podporuje program DN166 (zavádění programu i programování FLASH), remote debuger SODOB166 (zavádění programu, ladění) i další testovací nástroje. Do režimu Bootstrap přivedeme procesor nastavením HW přepínače číslo 3 do polohy ON. V tomto modu nevykonává procesor program ani z externí paměti RAM, ani z FLASH, ale z interní paměti ROM. Po resetu nadřízený systém vyšle na rozhraní UART0 datový bajt 0x00. Procesor rozpozná použitou přenosovou rychlost, správně inicializuje rozhraní UART0, a nadřazenému systému odpoví bajtem 0xC5. Nyní příjme 32 bajtů, a přijatá data ukládá do interní paměti RAM od adresy 0xFA40. Po přijetí posledního bajtu začne vykonávat program od adresy 0xFA40. V našem případě zmíněných 32 bytů obsahuje zavaděč, který ukládá další data do interní paměti RAM od adresy 0xFA60. Takto je do interní paměti zaveden monitor, který umožňuje zápis i čtení v celém adresovém prostoru procesoru, i programovat paměť FLASH. Tato skutečnost je využívána při zavádění programu do paměti pomocí programu DN166, v případě
Programátorská příručka AMiNi
15
programu SODOB166 je takto do externí paměti RAM zaveden standardní ladicí monitor, který přebírá řízení celé komunikace. Paměť EEPROM
Na procesorovém modulu se nachází mimo pamětí FLASH a RAM ještě paměť EEPROM (24C16, 2 KB) komunikující po sběrnici I2C. Jako signál CLK slouží PIN P3.0, jako signál DATA slouží PIN P3.1. Popis komunikace po sběrnici I2C je popsán v katalogu výrobců integrovaných obvodů. V knihovně AMINI_x.LIB jsou funkce pro obsluhu této paměti. Po zapsání hodnoty do EEPROM se spouští vnitřní časování, a po dobu 10 ms je obvod nepřístupný. Z tohoto důvodu musíme vždy testovat úspěšnost přístupu (u zápisu i čtení), a v případě neúspěchu akci zopakovat. /*zápis/čtení bajtu v EEPROM
*/
word read_eeprom(word adr); /* Čtení EEPROM I2C
*/
/* vrací 0..0xFF - hodnotu z paměti*/ /*
0x100 - pamět nepřístupná*/
bool write_eeprom(word adr, byte val); /* Zápis EEPROM I2C
*/
/* vrací 0 - zápis uspěšný
*/
/*
1 - zápis neuspěšný
Programátorská příručka AMiNi
*/
16
4.
Programování systému AMiNi
Zavádění programu do systému Aplikaci, která vznikla spojením několika modulů a knihovny AMINI_x.LIB můžeme buď přímo zavést do paměti systému pomocí programu DN166, nebo ladit s pomocí remote debugeru SODOB166.
4.1.
DN166 Program DN166 slouží k nahrávání programů do pamětí RAM i FLASH. Při zavedení do RAM je program ihned spuštěn, a je též možné na obrazovce PC sledovat ladicí výpisy. DN166 je schopen spolupracovat se všemi výrobky firmy AMiT, které obsahují procesory SAB80C166 nebo SAB C167. Proto obsahuje velké množství přepínačů, které nemusíme nutně vždy využívat.
Nastavení DN166 Základní informace o přepínačích program vypíše při spuštění bez parametrů. DN166 Download pro zarizeni s 80C166, verze 3.40 (c) AMiT 1994/2001 Pouziti: DN166 [parametry] vstupni_soubor -h *-o
...... vstupni soubor v Intel hex formatu ...... vstupni soubor ve formatu OMF166
*-1,2 ..... kanal COM1 [COM2] -ab ...... bazova adresa 20000H *-ap ...... bazova adresa 00000H -ac ...... bazova adresa 100000H -a[adr] .. specifikace jine bazove adresy (hexadecimalne) -v
...... vypis cinnosti
-t
...... terminalovy rezim (57100 Bd, bez parity, stop bit)
baud,[-,E,O],[1,2]
baud rate, parita a počet stop bitu
(muze byt spusten bez urceni vstupniho souboru) -bp ...... Bootstrap & Programovani FLASH pameti -bs ...... Bootstrap & Stop -br ...... Bootstrap & Run -f[FILE] . jmeno externiho zavadece, bez uvedeni jmena je implicitne jmeno zavadece EXT_LOAD.HEX v aktivnim adresari -n[hex]
boot acknowledge byte in hexadecimal form
Jednotlivé parametry nyní popíšeme podrobněji: Vstupní formát
Do systému je možné nahrávat programy ve formátu Intel Hex nebo OMF166 (specifikace SIEMENS). Soubor ve formátu OMF166 vzniká jako
Programátorská příručka AMiNi
17
produkt linkeru RL166 (obvyklá přípona *.ABS). Ze souboru *.ABS vznikne soubor ve formátu Intel Hex za použití utility OBJ2HEX. Soubor ve formátu OMF166 může obsahovat i ladicí odkazy na zdrojové soubory, ale ty je možno využívat pouze při ladění programem SODOB166. ♦ -O ♦ -H Komunikační kanál
Program DN166 může komunikovat po rozhraní COM1 i COM2. ♦ -1 ♦ -2
Bázová adresa
-ap -ab -ac -a[adr]
bázová adresa 0 (implicitní) bázová adresa 20000h bázová adresa 100000h obecná bázová adresa, zadáváme hexadec.
Při zavádění programu do paměti je možno volit jeden ze dvou režimů zobrazování informací o průběhu činnosti. Záznamy jsou buď přepisovány přes sebe, nebo postupně rolují po obrazovce. ♦ -V
Terminálový režim
rozhraní COM1 (implicitní) rozhraní COM2
DN166 dovoluje zavádět program přímo na zadané adresy, nebo s posunem, který je dán architekturou používaného zařízení. Při programování paměti FLASH bázová adresa 0. Při nahrávání programu do RAM, kdy ve FLASH je monitor, je posun 10 0000h, tedy parametr –ac. Parametr –ac byl do programu DN166 doplněn až od verze 2.90. ♦ ♦ ♦ ♦
Výpis činnosti
formát OMF166 (implicitní) formát Intel Hex
záznamy rolují po obrazovce
Pro ladění některých aplikací je možno využít terminálový režim. Sériová linka je nastavena na zvolenou konfiguraci – (rychlost dle parametru baud, parita a počet stop bitů). Znak '^' slouží k přemístění kursoru do levého horního rohu na obrazovce, pro výpisy z aplikace je možno použít standardní funkci printf, s přesměrováním výstupu na UART0 prostřednictvím funkce putchar. Některé příklady v knihovně na firemním CD používají pro své výstupy program DN166 s terminálem nakonfigurovaným na 1200Bd nebo 9600Bd, bez parity, jeden stopbit. Je možné spustit program v terminálovém režimu bez zadávání vstupního souboru a bez resetování aplikace. ♦ -T
Bootstrap mód
terminálový režim
V tomto režimu je využívána vlastnost procesoru, kdy se spouští program z ROM na čipu, který automaticky nastaví správnou přenosovou rychlost na UARTu 0 a zavede do interní paměti RAM na čipu krátký úsek programu, který je již schopný plnit standardní interní příkazy DN166. Tak je možné programovat paměť FLASH, nebo zavést program do paměti RAM. ♦ -BP ♦ -BS ♦ -BR
programování paměti FLASH a zastavení zavedení programu do RAM a zastavení zavedení programu do RAM a spuštění
Programátorská příručka AMiNi
18
Externí zavaděč
Program, který je v Bootstrap módu zaváděn do interní paměti CPU je specifikován v příkazovém řádku. Pro AMiNi to je AMINI_BM.HEX. ♦ -F[file]
jméno externího zavaděče (implicitní jméno je EXT_LOAD.HEX)
Příklady použití DN166 Nyní následuje několik příkladů typického použití programu DN166. Budeme nahrávat soubory PGM.ABS (ve formátu OMF166) a PGM.HEX (ve formátu Intel Hex).
Programování paměti FLASH HW přepínače
1..4
x ON
ON
ON
2 ON 3 ON 4 OFF
znamená povolení programování paměti FLASH znamená Bootstrap mód procesoru znamená reset po lince RS232
Příkazový řádek DN166 -1 -o -ap -bp –fAMINI_BM.HEX PGM.ABS
nebo DN166 -1 -h -ap -bp –fAMINI_BM.HEX PGM.HEX
Zavedený program se nespustí! Musíme systém vypnout, změnit HW konfiguraci, a opětovně zapnout. Potom bude program spouštěn z FLASH i po přerušení napájení. Nová HW konfigurace
1..4
x OFF OFF OFF
1 2 OFF 3 OFF 4 OFF
nastavíme dle požadavků aplikace znamená zablokování zápisu do FLASH znamená standardní režim procesoru znamená zákaz resetu po lince RS232
Nahrávání programu do RAM Pro tento mód musí být ve FLASH paměti monitor – soubor C167W_M.ABS, který nahráváme pomocí dávky DM.BAT (adresář FLASH na disketě s knihovnami). HW přepínače Příkazový řádek
1..4
x OFF OFF ON
DN166 -1 -o -ac PGM.ABS
nebo DN166 -1 -h -ac PGM.HEX
Po výpadku napájení startuje monitor, ne aplikace!
Nahrávání programu do RAM (možnost startu aplikace z RAM) Pro tento mód musí být ve FLASH paměti monitor – soubor C167W_MS.ABS, který nahráváme pomocí dávky DM.BAT (adresář FLASH v knihovně na firemním CD).
Programátorská příručka AMiNi
19
HW přepínače Příkazový řádek
1..4
ON OFF OFF ON
DN166 -1 -o -ac PGM.ABS
nebo DN166 -1 -h -ac PGM.HEX
Takto zavedenou aplikaci můžeme opětovně spustit i po přerušení napájení, jestliže změníme nastavení HW konfigurace takto: Nová HW konfigurace
Poznámka
1..4
OFF OFF OFF OFF
1 OFF 2 OFF 3 OFF 4 OFF
znamená start z RAM znamená zablokování zápisu do FLASH znamená standardní režim procesoru znamená zákaz resetu po lince RS232
I při tomto nastavení startuje po zapnutí monitor opět z FLASH, ale po zjištění stavu přepínače nastavuje monitor okénko RAM již od adresy 0 a spouští aplikaci uloženou v RAM
Nahrávání programu do RAM v režimu Bootstrap HW přepínače
Příkazový řádek
1..4
x OFF ON
OFF
3 ON
znamená Bootstrap mod procesoru
DN166 -1 -o -ac -br –fAMINI_BM.HEX PGM.ABS
nebo DN166 -1 -h -ac -br –fAMINI_BM.HEX PGM.HEX
Zavedený program se ihned spustí. Jestliže potřebujeme aby program byl spuštěn i po přerušení napájení, musí být ve FLASH monitor C167W_MS.ABS a změníme nastavení HW konfigurace. Nová HW konfigurace
1..4
OFF OFF OFF OFF
1 OFF 2 OFF 3 OFF 4 OFF
znamená start z RAM znamená zablokování zápisu do FLASH znamená standardní režim procesoru znamená zákaz resetu po lince RS232
Programátorská příručka AMiNi
20
4.2.
SODOB166 Program SODOB166 slouží k ladění aplikačních programů v systému, pro sledování proměnných slouží Watche. Procesor C167 je v prostředí SODOB166 podporován od verze 2.21.
Ladění v RAM, monitor ve FLASH HW přepínače
1..4
ON OFF OFF ON
1 ON 2 OFF 3 OFF 4 ON
znamená start z FLASH pro monitor C167W_MS.ABS, jinak x znamená zablokování zápisu do FLASH znamená standardní režim procesoru znamená reset po lince RS232
V menu Options zvolíme položku Hardware Z nabídek si vybereme řádek: AMINI, RS232
Definice hardwaru pro program SODOB166 se nachází v souboru HARDWARE.DEF. Definice
[Hardware] Name=AMINI, RS232 HWLayer=MON166_1 BaudDLAB=2 SwitchAdr=100000 Link=Asynchronous Access=Any XLoader= BootACK=C5 Monitor=LOADSMC0.HEX Reset=RTS Target=C167
Tímto je konfigurace týkající se hardware ukončena. Jestliže k počítači máte připojen přes zvolený komunikační port systém AMiNi, navážete spojení současným stiskem kláves
. Další podrobnosti naleznete v popisu programu SODOB166.
4.3.
Použití AC166 Pro usnadnění programování v jazyce C je připravena knihovna AMINI_x.LIB. Tato knihovna se včetně zdrojových textů nachází na firemním CD. Existuje celkem ve čtyřech modifikacích (AMINI_S.LIB,
Programátorská příručka AMiNi
21
AMINI_C.LIB, AMINI_M.LIB a AMINI_L.LIB) pro paměťové modely small, compact, medium a large. V hlavičkových souborech AMINI.H jsou uloženy definice funkcí, které jsou obsaženy v knihovně AMINI_x.LIB. Dále se zde nacházejí další užitečné definice. V každém projektu není nutno explicitně uvádět modul START167.A66, přilinkování správného modulu zajistí direktiva LIB167 pro linker.
4.4.
Rozložení paměťových oblastí Pro spolehlivou funkci aplikace je třeba předložit linkeru RL166 vhodné rozložení paměťových prostor. Protože s procesorem C167 je možné programově volit i rozložení paměti, musí linkovací mapa souhlasit s inicializací systému během sekce STARTUP, funkce CopyROM2RAM. Pro začátek si připomeneme, že každý program má tři základní oblasti. Jsou to CODE - oblast kde se nachází výkonný program, CONST - konstanty a DATA, kde jsou uložena veškerá data. Oblasti CODE a CONST jsou po celou dobu běhu programu neměnné, a proto je umísťujeme do paměti FLASH. Oblast DATA umísťujeme do paměti RAM. Paměťový model SMALL, ve kterém budou uvedeny následující příklady dovoluje maximální oblast NCODE 64 KB a oblast NDATA 16 KB. I v něm můžeme dle potřeby zadefinovat rozsáhlé paměťové objekty typu FAR nebo HUGE.
Model SMALL
Po vykonání funkce CopyROM2RAM při startu z FLASH (tato funkce nic nekopíruje, její jméno je dáno historicky) je okénko pro FLASH k dispozici v oblasti 0x00 0000 až 0x0F FFFF (paměť o kapacitě 512KB zde tedy vidíme dvakrát). Pro paměť RAM je k dispozici oblast 0x10 0000 až 0x1F FFFF. U verzí AMiNi/1M a AMiNi-E/1M je zde jedna souvislá oblast, u standardních AMiNi a AMiNi-E s 512 KB RAM tedy v oblasti vidíme celkem dvakrát shodnou část o velikosti 512KB. Rozložení paměťových prostor potom může vypadat následovně: LIB167($LIB_DIR) XRAM RESERVE(4-800H) CLASES(ICODE(800H,8FFH), NCODE(900H,0DFFFH), NCONST(10000H,013FFFH), NDATA(194000H,0197FFFH), NDATA0(194000H,0197FFFH))
S tímto nastavením je možno ladit v RAM menší projekty i ve standardní verzi AMiNi. Direktiva RESERVE zajišťuje, že linker ponechá tuto oblast volnou, pouze jsou zde umístěny vstupní body funkcí pro obsluhu přerušení. V této oblasti se nachází monitor, který je nutný pro ladění s programem SODOB166. V oblasti ICODE se nachází inicializační část programu - nulování globálních proměnných a jejich případná inicializace. V oblasti NCODE je umístěn vlastní výkonný program v modelu SMALL. NCONST obsahuje konstanty programu, tedy jak hodnoty inicializovaných proměnných, tak i texty vypisovaných Programátorská příručka AMiNi
22
zpráv, které v programu používáme. V oblasti NDATA se nachází neinicializovaná data, tedy i uživatelský zásobník. V oblasti NDATA0 jsou umístěny všechny globální proměnné. NDATA a NDATA0 se musí nacházet v jedné 16 KB stránce. Do oblasti 0x198000 - 0x1FFFFF můžeme umísťovat větší datové objekty typu FAR a HUGE. Pokud aplikace vyžaduje pro běh celých 512 KB RAM, je možné její ladění pouze se systémy AMiNi/1M nebo AMiNi-E/1M.
RAM, 1. zrcadlo
20 0000h
1C 0000h
18 0000h
RAM 14 0000h
10 0000h
0C 0000h
08 0000h
04 0000h
00 0000h
FLASH
FLASH, 1. zrcadlo
Následující obrázek ukazuje rozložení paměti uvedené aplikace při běhu programu z paměti FLASH ve standardním systému AMiNi při použití inicializace z knihovny AMINI_x.LIB.
FDATA + HDATA
NDATA
20 0000h
1C 0000h
18 0000h
14 0000h
10 0000h
0C 0000h
08 0000h
04 0000h
00 0000h
NCODE + NCONST
Umístění paměťových sekcí při ladění v RAM na standardním systému AMiNi:
Programátorská příručka AMiNi
20 0000h
FDATA + HDATA 1C 0000h
18 0000h
14 0000h
10 0000h
0C 0000h
08 0000h
04 0000h
NCODE + NCONST
NDATA
Rozložení v paměti shodné aplikace při použití ladicího systému AMiNi/1M:
00 0000h
Upozornění
23
Model LARGE
Pro model LARGE je nastavení paměťových oblastí shodné s modelem SMALL. Vše opět zajišťuje funkce CopyROM2RAM. Rozložení paměťových prostor pro linker potom může vypadat následovně: LIB167($LIB_DIR) XRAM RESERVE(4-800h,0E000H-0FA00H,0FC00H-0FDFAH,0FE00H-10000H) CLASSES( ICODE(800H,0A00H), FCODE(1000H,3BFFFH), FCONST(3C000H,3FFFFH), NCONST(3C000H,3FFFFH), NDATA(180000H,183FFFH), NDATA0(180000H,183FFFH), FDATA(184000H,1FFFFFH), FDATA0(184000H,1FFFFFH))
FDATA + HDATA 20 0000h
1C 0000h
18 0000h
14 0000h
10 0000h
0C 0000h
08 0000h
04 0000h
00 0000h
FCODE + NCONST + FCONST
NDATA
Rozložení LARGE aplikace v paměti při použití ladicího systému AMiNi/1M:
S touto konfigurací můžeme ladit LARGE aplikaci i ve standardním systému. Zápis do FLASH za běhu programu
Systém AMiNi má poměrně velkou paměť FLASH, kterou můžeme využívat například pro zápis konfiguračních dat. Zápis je možný při splnění dvou podmínek: ♦ Je povolen zápis do FLASH - HW přepínač číslo 2 je zapnut. ♦ Kód, který zajišťuje zápis do FLASH nesmí běžet z FLASH Buď můžeme kód příslušných funkcí zkopírovat do RAM a ten zde spouštět. Je však poměrně náročné zajistit překopírování právě jen nutných funkcí do RAM a jejich správné volání. Druhá možnost je zajistit, aby se program i konstanty nacházel shodně ve FLASH i v RAM.
Programátorská příručka AMiNi
24
Definice adres a konstant důležitých pro obsluhu paměti FLASH: #define REG_FLASH_CMD1 0x00AAA #define REG_FLASH_CMD2 0x00554 #define FLASH_CMD1
0xAA
#define FLASH_CMD2
0x55
#define FLASH_PROG
0xA0
#define FLASH_VERASE
0x10
#define FLASH_ERASE
0x80
#define FLASH_SERASE
0x30
Funkce pro zápis jednoho slova do FLASH může vypadat takto: /* vrací hodnotu, která zůstane ve FLASH
*/
word Flash_write (long int f_adr, word f_data){ outmem(REG_FLASH_CMD1, FLASH_CMD1); outmem(REG_FLASH_CMD2, FLASH_CMD2); outmem(REG_FLASH_CMD1, FLASH_PROG); outmem(f_adr,f_data); return(data_pool(f_adr, f_data)); } word data_pool(long int f_adr, word f_data){ word w; w = inmem(f_adr); while( (w & 0x80) != (f_data & 0x80)) { if !(w & 0x20) { w = inmem(f_adr); if(w & 0x80) == (f_data & 0x80) return(f_data); else return(~f_data); } else { w = inmem(f_adr); } } return (f_data); }
Programátorská příručka AMiNi
25
Paměť FLASH můžeme mazat celou (nedoporučujeme při běhu aplikace!) nebo po sektorech. Použitá paměť FLASH má sektory rozložené následujícím způsobem:
Sektor 0 1 2 3 4 5 6 7 8 9 10
Velikost
Stránky
16 KB 8 KB 8 KB 32 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB 64 KB
0 1, 1/2 1, 1/2 2a3 4..7 8..11 12..15 16..19 20..23 24..27 28..31
Poč. adresa 0x00000 0x04000 0x06000 0x08000 0x10000 0x20000 0x30000 0x40000 0x50000 0x60000 0x70000
Nedoporučujeme za běhu programu mazat sektory, kde se nachází oblasti CODE a CONST. Toto pole konstant obsahuje začátky všech sektorů ve FLASH paměti: const long FLASH_SECTOR[] = {0x00000, 0x04000, 0x06000, 0x08000, 0x10000, 0x20000, 0x30000, 0x40000, 0x50000, 0x60000, 0x70000};
Mazání jednoho sektoru paměti FLASH může vypadat takto – mažeme sektor dle čísla z předcházející tabulky. word Flash_sec_erase(word sector){ long int adr; adr = FLASH_SECTOR[sector]; outmem(REG_FLASH_CMD1, FLASH_CMD1); outmem(REG_FLASH_CMD2, FLASH_CMD2); outmem(REG_FLASH_CMD1, FLASH_ERASE); outmem(REG_FLASH_CMD1, FLASH_CMD1); outmem(REG_FLASH_CMD2, FLASH_CMD2); outmem(adr, FLASH_SERASE); return(data_pool(adr,0xFFFF)); }
Programátorská příručka AMiNi
26
5. 5.1.
Obsluha V/V Číslicové vstupy Číslicové vstupy jsou u systému AMiNi připojeny na porty P2. Pro čtení všech vstupů je v knihovně připravena funkce word GetIn(void); /* Čtení vstupu
*/
Stav vstupu můžeme také číst přímo z portů. Všechny vstupy mohou při změně úrovně generovat přerušení (CC8 .. CC15).
Čítačové vstupy
Vstup
PIN
Capture Compare
PIN – 2
Čítačové vstupy
DI0.0 DI0.1 DI0.2 DI0.3 DI0.4 DI0.5 DI0.6 DI0.7
P2.8 P2.9 P2.10 P2.11 P2.12 P2.13 P2.14 P2.15
CC8 CC9 CC10 CC11 CC12 CC13 CC14 CC15
P3.7 P5.15 P3.6 P3.4 P3.5 P5.14 -
T2IN T2EU T3IN T3EUD T4IN T4EU -
Vstupy DI0.0 a DI0.1 mohou mimo to ovládat čítač T2, vstupy DI0.2 a DI0.3 čítač T3 a vstupy DI0.4 a DI0.5 čítač T4 Způsob využití čítačových vstupů je dán způsobem naprogramováním – režimem činnosti jednotlivých čítačů. Díky schopnostem procesoru je možné k těmto vstupům přímo připojit IRC čidla – více viz uživatelský manuál procesoru. Čítače musíme připravit zápisem do registrů T2CON, T3CON aT4CON – viz TEST9.C, který je součástí knihovny AMINI_x.LIB. V tomto případě je zvolen IRC mód.Čítač čítá při náběžné i spádové hraně.
Vstup 0
Vstup 1
Stav čítače
0 1 2 3 4 5 6 7 8 7 6 5 4 3 2
Příklad, IRC mód
Podrobnosti o programování čítačů jsou uvedeny v popisu procesoru od výrobce.
Programátorská příručka AMiNi
27
5.2.
Číslicové výstupy Systém AMiNi má jeden osmibitové kanály číslicových výstupů osazené tranzistorovými spínači 24 V / 0,3 A. Číslicové výstupy jsou připojeny na porty P8. Pro nastavení výstupů je v knihovně připravena funkce void SetOut(word wData); /* Nastavení výstupu
*/
Pro ovládání jednotlivých výstupů můžeme použít i bitový přístup. Výstupy je možné řídit i prostřednictvím registrů CC16 .. CC23.
Výstup
PIN
Capture Compare
DO0.0 DO0.1 DO0.2 DO0.3 DO0.4 DO0.5 DO0.6 DO0.7
P8.0 P8.1 P8.2 P8.3 P8.4 P8.5 P8.6 P8.7
CC16 CC17 CC18 CC19 CC20 CC21 CC22 CC23
Programátorská příručka AMiNi
28
5.3.
Analogové vstupy Systém AMiNi využívá pro analogové vstupy A/D převodníku v procesoru. Z tohoto důvodu jsou analogové vstupy bez galvanického oddělení. Programová obsluha A/D převodníku je popsána v popisu procesoru od výrobce.
Vstup
PIN
AI0 AI1 AI2 AI3
P5.0 P5.1 P5.2 P5.3
Vstupy je možné nastavit na rozsahy 0 .. 5 V, 0 .. 10 V, 0 .. 20 mA nebo pro přímé připojení čidla Ni1000. Rozsahy se nastavují propojkami, které jsou dostupné po demontáži krytu. Jejich přesný popis a význam je uveden v Technické příručce k systému. Schéma zapojení
Schéma zapojení jednoho kanálu analogových vstupů
Hodnota změřená A/D převodníkem je v rozmezí 0 .. 0x3FF. Chceme-li znát přesnou hodnotu měřeného signálu na vstupu modulu v závislosti na zvolené konfiguraci, musíme výsledek přepočítat: u_5V = (5.00 * read_adc(0))/0x3FF; u_10V = (10.00 * read_adc(1))/0x3FF; i_20mA = (5.00/249 * read_adc(2))/0x3FF;
V tomto příkladu předpokládáme, že vstup 0 je nastaven na rozsah 0 .. 5V, vstup 1 na rozsah 0 .. 10V a vstup 2 na rozsah 0 .. 20mA (viz schéma zapojení jednoho vstupu). Pro přímé připojení čidla Ni1000 platí následující vztahy: Pro hodnotu napětí na vstupu opět platí vztah: u_5V = (5.00 * read_adc(i))/0x3FF;
Pro hodnotu odporu potom platí vztah: R_ni = 3920 * u_5V/(15 – u_5V);
Pro teplotu měřenou čidlem Ni1000/6180 potom platí vztah: Programátorská příručka AMiNi
29
T_ni = (R_ni – 1000)/6.18;
Pro přesnější určení teploty je třeba brát v úvahu, že závislost odporu na teplotě není lineární, ale lze ji aproximovat vztahem: Rt = 1000 × (1 + A × t + B × t2 + C × t4) Kde Rt je hodnota odporu Ni1000/6180 při teplotě t a jednotlivé koeficienty jsou: A
5,49 × 10-3
B
6,65 × 10-6
C
2,81 × 10-11
Pokud by při použití čidel Ni1000 byl zdroj +15V připojen k čidlu trvale, mohlo by dojít k ohřevu čidla, a tím i ke zkreslení měřeného údaje. Z tohoto důvodu je možné tento zdroj odpínat. K řízení slouží PIN procesoru P3.8.
Stav
Význam
0 1
+15 V vypnuto +15 V zapnuto
Po 10 ms po zapnutí je údaj již dostatečně ustálen, doporučená střída je 1:10. Pro ovládání zdroje +15 V je v knihovně připravena funkce void SetNiPwr(word wStat);
5.4.
Programovatelné LED Na systému AMiNi je celkem k dispozici 9 LED, které jsou volně programovatelné. Pět jich je v systémové skupině s označením RUN, ERR, S0, S1 a S2. Jedna je umístěna v logu AMiT a tři je možné i uživatelsky popsat. Led S0, S1 a S2 je možné ovládat přímo PINy procesoru, ostatní LED jsou připojeny přes posuvný registr 74HC4094. Tento obvod je opět ovládán PINy procesoru. Pro ovládání LED slouží následující funkce z knihovny: void set_led(word wLed);
Zápis hodnoty 1 LED rozsvítí, 0 zhasne. V knihovně jsou definovány i následující symbolické konstanty: #define LED_RUN
0x0001
#define LED_ERR
0x0002
#define LED_S0
0x0004
#define LED_S1
0x0008
#define LED_S2
0x0010
Programátorská příručka AMiNi
30
#define LED_LOGO
0x0020
#define LED_USR0
0x0040
#define LED_USR1
0x0080
#define LED_USR2
0x0100
sbit sbLEDS0
= P6^7;
sbit sbLEDS1
= P6^6;
sbit sbLEDS2
= P2^6;
Pokud bude třeba část LED vládat přímo PINy procesoru, například pro indikaci obsluhy přerušení, bude třeba upravit knihovní funkci set_led(), aby nedocházelo k ovlivňování těchto LED při volání funkce.
5.5.
Konfigurační DIP přepínač DIP přepínač je připojen přes paralelně sériový převodník 74HCT165. Pro vyčtení stavu konfiguračního přepínače slouží funkce word get_dipsw(void);
Funkce vrací příslušný bit nastavený na hodnotu 1, jestliže je přepínač v poloze ON.
Programátorská příručka AMiNi
31