= HF8V = / = SP8WJT = / = SP0106RZ =


THN





THN Communication Protocol technical description


THN network can be used for building networks with direct packets addressing. Physical interface is UART 8b, 1 stop, no parity. Two standard speeds are used: old standard 1200 Bd and new standard 9600 Bd. For transmission both wire and wireless medium can be used. Simple CD/CSMA (Carrier Detect/Carrier Sense Multiple Access) algorithm is used.

There are 4 versions of THN protocol:

  • THN8 - 8-bit address field
  • THN16 - 16-bit address field
  • THN24 - 24-bit address field
  • THN32 - 32-bit address field


  • Fields explanation:
    starting signal address fields command [optional data or params...]

    Starting signal together with address fields creates frame header. Command is mandatory. Data is optional, can be multiple bytes and its count depends on specific command.


    THN8 protocol

    THN8 version is currently in use for networks with 2 - 252 stations. This version is most efficient if we talking about uC cycles needed to decode starting signal and own address. Even if THN_ADRs are not unique (up to 4 same addresses in worst case) real networks build with my digital systems and microprocessor modules are not so big and congestion problem not exists yet. This problem is resolved by proper allocation of addresses (for example: HF-17599 can communicate with HF-17604 both using address 0x31 but when third station will be added to this network, there will be congestion because both HF-17599 and HF-17604 will answer for this address).

    THN8 frame
    0xFA 0xFA dest_adr src_adr command [optional data or params...]

    Addresses are 8-bit THN_ADR assigned to every UC (see table below).


    THN16 protocol

    This version is for bigger networks to 64260 stations. Currently not used but this is an option when several UC have the same 8-bit address (my collection currently counts 777 UCs and there are at worst case four the same 8-bit addresses).

    THN16 frame
    0xFB 0xFB dest_adr0 dest_adr1 src_adr0 src_adr1 command [optional data or params...]

    Addresses are adr0: THN_ADR, adr1: TYPE (see table below).


    THN24 protocol

    This version is just theoretical planning for big networks. Maximum capacity is 16 450 560 stations. As a such currently not used.

    THN24 frame
    0xFC 0xFC dest_adr0 dest_adr1 dest_adr2 src_adr0 src_adr1 src_adr2 command [optional data or params...]

    Addresses are adr0: THN_ADR, adr1: TYPE, adr2: UC low byte (see table below).


    THN32 protocol

    This version is just theoretical planning for big networks. Maximum capacity is 4 211 343 360 stations. As a such currently not used.

    THN32 frame
    0xFD 0xFD dest_adr0 dest_adr1 dest_adr2 dest_adr3 src_adr0 src_adr1 src_adr2 src_adr3 command [optional data or params...]

    Addresses are adr0: THN_ADR, adr1: TYPE, adr2: UC low byte, adr3: UC high byte (see table below).


    THN communication algorithm

    UART device can be configured both in interrupt mode (preferably) or without it. For THN8 protocol algorithm should check if first start byte is matching, if not quick return and same procedure for another start byte, and then destination address. These 3 bytes means 16 milion combinations so possibility of wrong header decoding is rather small.


    Commands

    Command sets varies from system to system. In small systems very basic standard set is used, and in bigger systems more commands can be implemented, specialized commands are used in embedded functions of given device. Most basic command implemented in all devices is GET_ID, where remote system will answer with system name 'HFxxxx', this command is used for connection test with remote system.


    Network addresses

    THN_ADR and TYPE are allocated during registration of microprocessor in UC database and both creates unique 16-bit combination.
    This table shows only active systems, but in fact many of these systems cannot be used in THN network (for example not programmable uC) but all must be part of this scheme.
    TYPE was primarily designed to mark exact type of uC, but when my collection grows over 256 types, appreared problems with lack of space for new type. Here I created special range 0x60-0x6F where uC aren't marked by type. Also TYPE strongly reduces effective 16-bit address space when I have only one type of uC (255 adresses are lost), so this lead to conclusion that TYPE must be reformed into 'uC family' or something like that...

    Four addresses are reserved: 0x00, 0x30, 0x4C, 0xFF and cannot be assigned. Few addresses are left empty for quick reassigment when needed.


    THN Addresses:
    THN ADR TYPE UC-### DESIGNATOR THN VERSION
    0x00 --- ------ reserved
    0x01 0x60 UC-225 HF-17149
    0x01 0xA3 UC-416 HF-17777
    0x02 0x60 UC-200 HF-17705
    0x03 0x06 UC-296 HF-17282
    0x03 0xA1 UC-619 HF-17512
    0x04 0x5B UC-419 HF-17609
    0x04 0x60 UC-196 HF-17341
    0x04 0x71 UC-687 TK-016
    0x04 0xA5 UC-418 HF-12264
    0x05 0x9E UC-432 HF-17646#1
    0x06 0x55 UC-305 HF-12261
    0x06 0x8F UC-715 DV-253
    0x07 0x11 UC-474 HF-17999
    0x08 0x9C UC-479 DV-244
    0x09 0x30 UC-232 HF-12217 HF-6017
    0x0A
    0x0B 0x60 UC-307 HF-17612
    0x0B 0x8B UC-429 HF-17285
    0x0C 0x8B UC-430 HF-17289#1
    0x0D 0x8B UC-431 HF-17289#2
    0x0E 0x72 UC-682 HF-17850
    0x0F 0x60 UC-314 HF-17328
    0x10 0x61 UC-750 HF-17155
    0x11 0x03 UC-301 HF-12236
    0x11 0x61 UC-751 HF-17333
    0x12 0x61 UC-752 HF-17333
    0x13 0x61 UC-753 HF-17333
    0x13 0x94 UC-410 DV-213
    0x14 0x61 UC-754 HF-17217
    0x14 0xB7 UC-533 HF-17830
    0x15 0x61 UC-755 HF-17220
    0x15 0x74 UC-700 HF-18225
    0x16 0x5C UC-322 HF-17329
    0x16 0x61 UC-762 HF-17955
    0x17 0x61 UC-763 HF-16202
    0x17 0x83 UC-331 HF-17676
    0x18 0x61 UC-764 HF-18114
    0x18 0xA8 UC-354 HF-17259
    0x19 0x79 UC-355 HF-17580
    0x1A 0x24 UC-227 HF-1768#1
    0x1A 0x60 UC-340 HF-17581
    0x1A 0x61 UC-617 HF-16195
    0x1B 0x24 UC-228 HF-1768#2
    0x1B 0x60 UC-341 HF-17964
    0x1B 0x61 UC-618 HF-16192
    0x1C 0x24 UC-229 HF-1768#3
    0x1C 0x61 UC-765 DV-320
    0x1D 0x24 UC-230 HF-1768#4
    0x1D 0x60 UC-343 HF-17352
    0x1D 0x61 UC-766 HF-16117
    0x1E 0x24 UC-231 HF-1769
    0x1E 0x60 UC-347 HF-17705
    0x1E 0x61 UC-767 HF-17704
    0x1F 0x61 UC-769 HF-17528
    0x1F 0xA9 UC-351 HF-17610
    0x20 0x60 UC-352 HF-17826
    0x20 0x61 UC-770 HF-17510
    0x20 0x90 UC-400 HF-17218
    0x21 0x60 UC-356 HF-17392
    0x21 0x61 UC-771 HF-17598
    0x21 0x76 UC-345 HF-17363
    0x22 0x61 UC-772 HF-17361#1
    0x22 0x77 UC-344 HF-17513
    0x23 0x60 UC-358 HF-17860
    0x23 0x61 UC-773 HF-17361#2
    0x23 0x89 UC-334 HF-1760#1
    0x24 0x60 UC-359 HF-17209
    0x24 0x61 UC-774 HF-17568
    0x24 0x89 UC-335 HF-1760#2
    0x25 0x60 UC-389 HF-17583
    0x25 0x7B UC-366 HF-1768#1
    0x26 0x7B UC-367 HF-1768#2
    0x27 0x7B UC-368 HF-1768#3
    0x27 0xB6 UC-392 HF-17706
    0x28 0x7B UC-369 HF-1768#4
    0x29 0x60 UC-664 HF-17609
    0x29 0x7B UC-370 HF-1769
    0x2A 0x7A UC-396 HF-17331
    0x2B 0xB6 UC-391 HF-12244
    0x2C 0xA3 UC-649 HF-17555#1
    0x2D 0x60 UC-433 DV-171
    0x2D 0xA3 UC-650 HF-17555#2
    0x2E 0x52 UC-297 HF-17256
    0x2E 0x60 UC-551 HF-17262
    0x2F 0x60 UC-408 HF-17263
    0x2F 0xAB UC-390 HF-17677
    0x30 0x00 ------ reserved for broadcast/gateway
    0x31 0x07 UC-670 HF-12265
    0x31 0x09 UC-675 HF-17599 HF-6099 THN8
    0x31 0x60 UC-304 HF-17604
    0x32 0x53 UC-298 HF-1774
    0x32 0x60 UC-674 HF-17960
    0x33 0x53 UC-299 HF-17831
    0x34 0x60 UC-399 HF-17507
    0x35 0x1B UC-128 HF-17107
    0x35 0x60 UC-423 HF-17560
    0x36 0x1B UC-129 HF-17248
    0x36 0x60 UC-424 HF-17560
    0x37 0x1B UC-130 HF-17249
    0x37 0x28 UC-291 HF-17266
    0x38 0x07 UC-131 HF-1799
    0x38 0x60 UC-425 HF-17320
    0x39 0x10 UC-132 HF-17297
    0x39 0x60 UC-426 HF-17320
    0x39 0x93 UC-404 HF-17553
    0x3A 0x07 UC-434 HF-5200
    0x3A 0x60 UC-427 HF-17627 HF-90627
    0x3B 0x60 UC-480 HF-17996
    0x3B 0xD8 UC-572 HF-17330#1
    0x3C 0x60 UC-485 HF-17673
    0x3C 0xD8 UC-573 HF-17330#2
    0x3D 0xA3 UC-666 HF-17555#3
    0x3E 0x13 UC-137 HF-12258 HF-6158 THN8
    0x3E 0x60 UC-494 HF-17812
    0x3F 0x13 UC-138 HF-12269 HF-6169 THN8
    0x3F 0x60 UC-435 HF-17565
    0x40 0x0C UC-139 HF-17246
    0x41 0x0C UC-140 HF-17385
    0x41 0x60 UC-464 DV-190
    0x42 0x0D UC-141 HF-17210
    0x42 0x60 UC-465 HF-17750
    0x43 0x60 UC-466 HF-17754
    0x44 0x09 UC-143 HF-12227#1
    0x44 0x60 UC-468 HF-17895
    0x45 0x09 UC-144 HF-12227#2
    0x45 0x60 UC-469 DV-304
    0x46 0x09 UC-145 HF-12227#3
    0x46 0x86 UC-364 HF-17551#2
    0x47 0x09 UC-146 HF-12227#4
    0x47 0x60 UC-493 HF-17700
    0x48 0x09 UC-147 HF-60105
    0x48 0x60 UC-516 HF-17241
    0x49 0x02 UC-779 HF-17390
    0x49 0x60 UC-517 HF-17241
    0x4A 0x02 UC-782 HF-18230#2
    0x4A 0x60 UC-527 HF-17239
    0x4B 0x60 UC-528 CC-021
    0x4C 0x00 ------ CONTROL TERMINAL THN8
    0x4D 0x60 UC-498 HF-17636
    0x4D 0x7F UC-428 HF-17333
    0x4E 0x5E UC-318 HF-17141
    0x4E 0x60 UC-529 DV-111
    0x4F 0x60 UC-530 HF-17306
    0x50 0x08 UC-290 HF-1784#85
    0x50 0xBC UC-715 HF-12275 HF-6075
    0x51 0xB6 UC-293 HF-17243
    0x52
    0x53 0x71 UC-323 HF-17510
    0x54 0x61 UC-325 HF-17219
    0x55 0x61 UC-326 HF-17842
    0x56
    0x57 0x78 UC-353 HF-17205
    0x58 0x95 UC-411 HF-17267
    0x59 0x96 UC-412 HF-17204
    0x5A
    0x5B
    0x5C 0x41 UC-195 HF-60104
    0x5C 0x60 UC-531 DV-202
    0x5D 0x60 UC-534 HF-17502
    0x5E 0x60 UC-535 HF-17502
    0x5F
    0x60 0x4D UC-289 HF-17700
    0x60 0xBD UC-721 HF-12276 HF-6076
    0x61 0x39 UC-172 HF-12274
    0x61 0x60 UC-536 HF-17519
    0x62 0x60 UC-540 HF-17508
    0x63 0x60 UC-541 HF-17509
    0x64 0x60 UC-542 HF-17514
    0x65 0x02 UC-176 HF-12226 HF-6045
    0x65 0x60 UC-543 HF-17517
    0x66 0x02 UC-177 HF-5240
    0x67 0x3C UC-204 HF-12211
    0x67 0x60 UC-549 HF-17548
    0x68 0x60 UC-550 HF-17549
    0x69 0x60 UC-552 HF-17556
    0x6A 0x60 UC-544 HF-17387
    0x6B 0x60 UC-555 HF-17990
    0x6C 0x60 UC-556 DV-274
    0x6D 0x11 UC-768 HF-17566
    0x6E 0x60 UC-574 HF-17229
    0x6F 0x60 UC-575 HF-17626
    0x70
    0x71 0x34 UC-742 HF-1758
    0x71 0x7E UC-382 HF-17203
    0x72 0x60 UC-588 HF-17528
    0x73 0x60 UC-591 TK-036
    0x74 0x26 UC-616 HF-16196
    0x74 0x31 UC-215 HF-12239
    0x74 0x60 UC-592 HF-17532
    0x75 0x31 UC-216 HF-12252
    0x75 0x60 UC-593 HF-17532
    0x76 0x60 UC-594 DV-216
    0x77 0x60 UC-554 DV-300
    0x77 0x97 UC-409 HF-17360
    0x78 0x40 UC-214 HF-17391
    0x78 0x60 UC-643 HF-18101
    0x79 0x60 UC-644 HF-18102
    0x79 0x61 UC-295 HF-17804
    0x7A 0x33 UC-221 HF-17270
    0x7A 0x60 UC-645 HF-18103
    0x7B 0x4F UC-294 HF-17143
    0x7B 0x60 UC-646 HF-18104
    0x7C 0x34 UC-223 HF-1759
    0x7C 0x60 UC-647 HF-18105
    0x7D 0x34 UC-224 HF-1762
    0x7D 0x60 UC-648 HF-18106
    0x7E 0x34 UC-633 HF-17909
    0x7F 0x60 UC-586 DV-119
    0x80 0x3F UC-209 HF-17280
    0x81 0x60 UC-539 HF-17501
    0x82 0x3F UC-207 HF-17250#2
    0x83 0x3F UC-208 HF-17250#3
    0x84 0x28 UC-233 HF-60104
    0x84 0x60 UC-683 HF-17319
    0x84 0x8E UC-397 HF-17511#1
    0x85 0x60 UC-684 TK-065
    0x85 0x8E UC-398 HF-17511#2
    0x86 0x60 UC-553 HF-17388
    0x87 0x23 UC-236 HF-17562
    0x87 0x60 UC-685 HF-17531
    0x88 0x22 UC-237 HF-17822#1
    0x89 0x1E UC-238 HF-17105
    0x8A 0x60 UC-545 HF-17521
    0x8B 0x60 UC-546 HF-17522
    0x8C 0x60 UC-547 HF-17523
    0x8D 0x60 UC-548 HF-17524
    0x8E 0x60 UC-576 HF-17139
    0x8F 0x60 UC-577 HF-17635
    0x90 0x42 UC-191 CC-001
    0x90 0x60 UC-661 DV-317
    0x91 0x22 UC-662 HF-17822#2
    0x91 0x60 UC-686 TK-024
    0x92 0x1F UC-246 HF-12224 HF-6050 THN8
    0x92 0xA1 UC-336 HF-17504#2
    0x92 0xA2 UC-673 HF-17611
    0x93 0x8D UC-406 HF-17602
    0x93 0xA1 UC-537 HF-17516
    0x94 0x56 UC-436 HF-17819#1
    0x94 0x60 UC-538 HF-17255 HF-17503#3
    0x94 0xA1 UC-589 HF-17520#1
    0x95 0x56 UC-437 HF-17819#2
    0x95 0x60 UC-651 DV-132
    0x95 0xA1 UC-590 HF-17520#2
    0x96 0x60 UC-652 HF-16201
    0x97 0x56 UC-778 HF-17390
    0x97 0x60 UC-653 DV-148
    0x98 0x20 UC-252 HF-12279 HF-6079
    0x98 0x60 UC-654 DV-240
    0x99 0x60 UC-688 HF-18201
    0x9A
    0x9B 0x14 UC-255 HF-12243 HF-5218 THN8
    0x9C 0x14 UC-256 HF-6030 THN8
    0x9D 0x14 UC-709 HF-12240 HF-2888 THN8
    0x9D 0x1F UC-693 HF-18212
    0x9E
    0x9F 0x60 UC-578 HF-17635
    0xA0 0x49 UC-276 HF-12256
    0xA1 0x01 UC-002 HF-12202 HF-1723 HF-12210 HF-52121 HF-6045 HF-90132 THN8
    0xA1 0x60 UC-579 HF-60104
    0xA2
    0xA3 0x60 UC-689 HF-18203
    0xA4 0x02 UC-005 HF-12204
    0xA5 0x02 UC-006 HF-12205 HF-9046
    0xA6 0x02 UC-007 HF-12203 HF-2262
    0xA7 0x60 UC-690 HF-18205
    0xA8 0x02 UC-011 HF-12214
    0xA9 0x60 UC-691 HF-18206
    0xAA 0x54 UC-300 HF-17832
    0xAB 0x3E UC-210 HF-17275
    0xAC 0x02 UC-015 HF-12213
    0xAD 0x03 UC-016 HF-12235 HF-2285
    0xAE 0x60 UC-692 HF-18208
    0xAF 0x03 UC-018 HF-12237 HF-6048 THN8
    0xB0 0x04 UC-019 HF-12230 HF-2828
    0xB1 0x04 UC-020 HF-12232 HF-5113 THN8
    0xB2 0x04 UC-021 HF-12233 THN8
    0xB3 0x04 UC-022 HF-12234 HF-1933 THN8
    0xB4 0x04 UC-023 HF-12231 HF-5033 HF-90151 THN8
    0xB5 0x04 UC-024 HF-12251 HF-5037 THN8
    0xB6
    0xB7
    0xB8
    0xB9
    0xBA 0x46 UC-743 HF-17672
    0xBA 0x56 UC-655 HF-17260
    0xBB 0x56 UC-780 HF-17277
    0xBB 0x57 UC-306 HF-17247
    0xBB 0x60 UC-656 DV-280
    0xBC 0x60 UC-726 DV-323
    0xBD 0x0A UC-032 HF-12218
    0xBD 0x60 UC-727 DV-322
    0xBD 0x9F UC-481 HF-17506
    0xBE 0x60 UC-728 HF-17790
    0xBE 0x9F UC-482 HF-17515
    0xBF 0x60 UC-729 DV-318
    0xBF 0x9F UC-483 HF-17525
    0xC0 0x15 UC-260 HF-12241
    0xC0 0x60 UC-730 HF-17389
    0xC1 0x18 UC-261 HF-12242
    0xC2 0x1F UC-422 HF-12268 HF-6128 THN8
    0xC2 0x60 UC-737 CC-049
    0xC3 0x06 UC-484 HF-17513
    0xC3 0x3A UC-193 HF-17218
    0xC3 0x60 UC-738 CC-026
    0xC4 0x60 UC-739 CC-029
    0xC5 0x43 UC-192 HF-17282
    0xC5 0x60 UC-740 CC-053
    0xC6 0x60 UC-741 CC-055
    0xC6 0xB8 UC-580 HF-12271 HF-60271
    0xC7 0x60 UC-744 HF-16102
    0xC7 0xB9 UC-583 HF-12270 HF-60270
    0xC8 0x16 UC-268 HF-6066
    0xC8 0x60 UC-745 HF-16107
    0xC9 0x17 UC-269 HF-1750
    0xC9 0x60 UC-749 HF-16206
    0xC9 0xB2 UC-507 HF-12259#1 HF-60259
    0xCA 0x46 UC-270 HF-17781#1
    0xCA 0xB2 UC-508 HF-12259#2 HF-60259
    0xCB 0x46 UC-271 HF-17781#2
    0xCC 0x60 UC-657 DV-302
    0xCD 0x60 UC-658 DV-303
    0xCE 0x60 UC-659 DV-302
    0xCF 0x60 UC-660 DV-303
    0xD0 0x05 UC-009 HF-12215 HF-6065 THN8
    0xD1 0x60 UC-706 HF-18234
    0xD1 0xD7 UC-558 HF-17165#1
    0xD2 0xD7 UC-559 HF-17165#2
    0xD3 0xD7 UC-560 HF-17165#3
    0xD4 0xD7 UC-561 HF-17165#4
    0xD5 0x12 UC-039 HF-12238 HF-1684#1
    0xD5 0x60 UC-746 HF-17503#1
    0xD5 0xD7 UC-562 HF-17165#5
    0xD6 0x60 UC-747 HF-17503#2
    0xD6 0xD7 UC-563 HF-17165#6
    0xD7 0x60 UC-748 HF-17504#2
    0xD7 0xD7 UC-564 HF-17165#7
    0xD8 0xB1 UC-502 HF-12290
    0xD8 0xD8 UC-565 HF-17166
    0xD9 0x60 UC-642 HF-17199
    0xDA 0x08 UC-044 HF-1784#1 HF-9021#1
    0xDA 0x60 UC-704 HF-18231
    0xDB 0x08 UC-045 HF-1784#2 HF-9021#2
    0xDB 0x60 UC-705 HF-18233
    0xDC 0x08 UC-046 HF-1784#3 HF-12247 HF-6014
    0xDC 0x56 UC-703 HF-18230#1
    0xDD 0x08 UC-047 HF-1784#4 HF-6015
    0xDD 0xAA UC-346 HF-17299
    0xDE 0x5F UC-566 HF-17200
    0xDE 0x60 UC-702 HF-18228
    0xDF 0x56 UC-781 HF-18230#2
    0xDF 0x60 UC-701 HF-18227
    0xE0 0x06 UC-010 HF-12216
    0xE1 0x1C UC-263 HF-12257
    0xE2 0x1C UC-264 HF-12267
    0xE3 0x60 UC-639 HF-17288
    0xE3 0x97 UC-783 HF-17775#1
    0xE4 0x60 UC-638 HF-17322
    0xE4 0x97 UC-784 HF-17775#2
    0xE5 0x60 UC-637 HF-17588
    0xE5 0x97 UC-785 HF-17776#1
    0xE6 0x60 UC-699 HF-18224
    0xE6 0x97 UC-786 HF-17776#2
    0xE6 0xA7 UC-495 HF-12295 HF-60295
    0xE7 0x60 UC-698 HF-18220
    0xE7 0x99 UC-505 HF-17666#2
    0xE8 0x60 UC-697 HF-18219
    0xE8 0x99 UC-506 HF-17870
    0xE9 0x60 UC-696 HF-18216
    0xE9 0x99 UC-438 HF-17666#1
    0xEA 0x60 UC-695 HF-18214
    0xEA 0x99 UC-490 HF-17570#1
    0xEB 0x99 UC-491 HF-17570#2
    0xEC 0x60 UC-636 HF-17915
    0xEC 0xBA UC-665 HF-17366
    0xED 0x3B UC-202 HF-17244#1
    0xEE 0x3B UC-203 HF-17244#2
    0xEF 0x3B UC-211 HF-17233
    0xEF 0x60 UC-635 HF-17915
    0xF0
    0xF1 0x60 UC-634 HF-17911
    0xF2 0x60 UC-632 HF-17601
    0xF2 0x61 UC-640 HF-17207
    0xF3 0x60 UC-631 HF-17148
    0xF3 0x61 UC-641 DV-199
    0xF4 0x60 UC-630 HF-17126
    0xF4 0x8A UC-348 HF-17271
    0xF5 0x60 UC-629 HF-17128
    0xF5 0xA4 UC-473 HF-17800
    0xF6 0x60 UC-628 HF-17645
    0xF6 0xA4 UC-475 HF-17760#1 HF-6110
    0xF7 0xA4 UC-476 HF-17760#2
    0xF8 0x60 UC-626 HF-17249
    0xF8 0xA4 UC-477 HF-17760#3
    0xF9 0xA4 UC-478 HF-17760#4
    0xFA 0xA6 UC-532 HF-17760#5
    0xFB 0x3D UC-332 HF-17591
    0xFC 0x3D UC-213 HF-17202
    0xFD
    0xFE 0x60 UC-620 HF-17151#6
    0xFF --- ------ reserved



    Sources:
    [1]


    HF Register

    Microcontrollers in my constructions

    UC Database - my CPU collection

    Electronics

    Main Page




    Generated by HF Projects Page Creator ver. 2.03