このページはEtoJ逐語翻訳フィルタによって翻訳生成されました。

翻訳前ページへ


令状ing to an SD card in a nuelectronics datalogging 保護物,者- ar3ne1sd HOME  > >  ARDUINO MAIN PAGE > >  HINTS AND HOW-TOs > >  NuELEC DATALOG  t.o.c.     Delicious Bookmark this on Delicious   Recommend to StumbleUpon

令状ing to an SD card with the nuElectronics Datalogging 保護物,者


You can 令状 to and read from SD memory cards with the datalogging 保護物,者 for Arduinos from nuelectronics.com (&続けざまに猛撃する;11, c. $16 at 7/10).

While you do not have all the features of a generalized SD card reader/ writer, you can do useful memory card- based work. You can 令状 data, as logged by your Arduino + 保護物,者, to a card. Then you can 除去する the card, plug it into a "big computer", and read all of the data logged. Not bad! (I.e., you have a "sneakernet", if you want one.)

If you are disappointed when you learn the 制限s について言及するd below, remember that if you want the system to do more, you have to give up the 簡単 (compared to what fancier features would 要求する!) and small size of the 現在の 準備/条項s. More is not always better!

進歩 so far....

In 事柄s of 令状ing to SD cards I am very much a novice. I hope some experienced SD card 使用者s will ざっと目を通す this, 特に the "Where We're Going" stuff at the 底(に届く), and send comments. I don't need 詳細(に述べる)s of the code debugged, but comments on the general ideas here would be very welcome, 特に comments like "You're working along the 権利 lines." I'm not even sure of that, at the moment!!

This page is a work in 進歩. I may be wrong... but SO FAR I'm finding that I DO have to 問題/発行する a "の近くに とじ込み/提出する/ unmount card" 命令(する) to 避ける data loss. I'd hoped... probably too much to hope... that I could 令状 to the SD card almost as if it were a piece of paper in an old fashioned typewriter. I've also, I think, 遭遇(する)d a little, unimportant(?), discrepancy between the Petit FAT とじ込み/提出する System (PFFS) Module as 述べるd on it's web page and how it 作品 in the nuelectonics 保護物,者, if you use the low level interface/ driver とじ込み/提出するs from nuelectronics. The discrepancy: when you の近くに the とじ込み/提出する, the 未使用の bytes in the last 部門 are filled with with "A"s, not the "0"s 約束d at the PFFS page. (This is a HELP, if the PFFS page is talking about the number 0, vs the character "0".) The code 現在のd below, while rough and かもしれない imperfect, does TRY to 演説(する)/住所 the 問題/発行するs について言及するd here. It SEEMS to work, but hasn't been rigorously 実験(する)d, and is not 強健な.

Overview

First an overview. If you find any of these pages useful, by the way, I'd be 感謝する if you clicked on the "StumbleUpon" button at the 最高の,を越す of the page. Such "投票(する)s" will be part of what 決定するs which pages get その上の attention. "Vaporware"? I hope not. I hope these pages are already good for something. As good as they could be? Does anything ever become perfect?

"Normal" use of the nuelectronics SD socket will be, I think, as follows....

In a "big" computer, the SD card will be formatted, (use the "FAT" structure, not "FAT32")

Still on the "big" computer, a とじ込み/提出する 十分な of spaces (or some other "blanks") will be created and saved on the card, with a 明確な/細部 指名する.

That card will then be put into the SD card interface on the datalogging 保護物,者.

When the Arduino program runs, it will either すぐに, or in 返答 to a 命令(する), "開始する" the card, and "open" the とじ込み/提出する for 無作為の 令状.

Then, under the 支配(する)/統制する of your Arduino program, new data will be written into the とじ込み/提出する on the SD card, overwriting whatever was on that part of the とじ込み/提出する 以前. (The system in use here does not 許す you to create a new とじ込み/提出する, or 延長する an 存在するing one. Annoying, but not 手足を不自由にする/(物事を)損なうing.) You would 普通は overwrite what was there 以前 from the start of the とじ込み/提出する 今後, but you can 令状 code which lets you jump around. (In technical 条件: There is a "捜し出す" 命令(する).)

I think you can 令状 to the card one byte at a time. 詳細(に述べる)s to be 決定するd later! If that isn't 正確に/まさに 権利, the system will at least 許す something along those lines, I think.

I think that if you have a 力/強力にする 失敗, or 除去する the card from the socket at a "bad" moment, that you will lose data. I think you need to 問題/発行する a program 命令(する) to dismount the card before you 肉体的に 除去する it. (In Windows 条件: You need to 遂行する/発効させる the "安全な to 除去する" 手続き which you SHOULD be using with thumb-運動s. Floppies spoiled us!)

Now for some code.

That's the overview. First, a 詳細(に述べる)...

The "get_line" 機能(する)/行事 has been 修正するd from what is in the nuelectronics デモs because, I think, I needed to do that to get it to work with the Arduino serial 監視する. For more 詳細(に述べる)s on that, and other general 詳細(に述べる)s, see my page about my working 環境.

The に引き続いて is imperfect, but does, seem to work, at least as far as it goes. You have to 準備する an SD card on a separate computer. You need to 判型 it with a plain "FAT" とじ込み/提出する system, not "FAT32". (Windows 条件, sorry.) Also, on the big computer, save a big とじ込み/提出する on the card. That とじ込み/提出する can be 十分な of anything you like... I use a bunch of periods ("......."). Call the とじ込み/提出する "MySDfile.txt". (You can call the とじ込み/提出する what you like, but if you use something other than "MySDfile.txt", remember to use your 指名する everywhere you see me using "MySDfile.txt") You then 挿入する the card in the datalogging 保護物,者, run the program, 問題/発行する the に引き続いて 命令(する)s: m,f,s (enter each in the serial 監視する, and 圧力(をかける) enter after each one. (3 "enter"s)). You should get messages after each. If you get an error message, usually repeating the 命令(する) is 十分な. Then wait about 15 seconds, letting the Arduino "スピードを出す/記録につける data".... you should see dots appearing on the serial 監視する. (The "data", sadly, is just "123xxxx" over and over again... at this 行う/開催する/段階.) 圧力(をかける) "s" (and enter) again to stop the "datalogging" 過程. (The first "s" started it, now you are stopping it.) 圧力(をかける) "u" (and enter) to "unmount, etc", and the Arduino will 令状 衝撃を和らげるものd things to the card, の近くに the とじ込み/提出する, and unmount the card. You can then 安全に take the card out, and you should find "123xxxxx" written on it many times, followed by "!EOF!". Anything after that is "undefined". You may get a bunch of "A"s, you may get a bunch of "0"s, you may have gibberish left over from previous 実験s. (You don't have to 回復する the とじ込み/提出する all to "......"s between 実験s.) (The とじ込み/提出する has to be bigger than the 量 of data you 計画(する) to 令状). You shouldn't enter "s" to start the "datalogging" until after a successful "m" and "f". The only problem I've had is that once in a while, my first "m" is not successful (an error message arises). I just say "m" again, and I've always been successful on the second try, except the time that I had a FAT32 formatted SD card in the 保護物,者.

The code doesn't (yet) do anything useful! :-( When it is "logging data", it is 単に 令状ing "123xxxxx" to the SD card over and over again. If you want to スピードを出す/記録につける some data, you "only" have to 追加する the necessary code at "//Put ReadRTC and ReadSensor(s) here!", and then 取って代わる the "123xxxxx" after the PSTR with what the clock and sensor(s) said.

The code below is, as I said, poor... but does, I think "work". Before I do much more with the code, I need to make some 進歩 with the "Where I am Going" 問題/発行するs covered その上の 負かす/撃墜する this page.

You need to 任命する/導入する the sensor_pff library from the nuelectronics 場所/位置 to use the SD reader/ writer. I've done a tutorial on ソフトウェア libraries in 事例/患者 you don't already know about them.

/*WriteToSD
  ver 18Jly10 */

#含む <avr/pgmspace.h>
#含む <sensor_pff.h>

SENSOR_PFF sd;
byte sensor_start = 0;

char buff[128];	/* i/o 衝撃を和らげるもの */

static 無効の get_line (char *buff, byte len)
{
	byte c;
	int idx = 0;


	for (;;) {//1 Start infinite 宙返り飛行... will only 出口 経由で "break"
		if(Serial.利用できる()){//2
			c = Serial.read();
			if (((byte)c >= ' ') && (idx < len - 1)) {
				buff[idx++] = c; Serial.print(c);
			}//3
		}else break;//2 TKB ADDED "else break"
	}//1 (ends "for...")
	buff[idx] = 0;
	//Serial.print(c);
	Serial.print('\n');
}
//  === END OF GET_LINE ===

無効の 体制/機構()
{
	byte res;
        延期する(300);//let system settle
        Serial.begin(9600);
	sprintf_P(buff, PSTR("\nTKB 令状 to SD デモ\n"));
	Serial.println(buff);
	sprintf_P(buff, PSTR("Derived from nulectonics.com prgm 'datalog.pde'\n"));
	Serial.println(buff);
	sprintf_P(buff, PSTR("See http://sheepdogguides.com/ardino/ar3ne1sd.htm for 最新の 詳細(に述べる)s\n"));
	Serial.println(buff);
	Serial.print('>');
}

無効の 宙返り飛行()
{
  char *ptr;
  long p1, p2;
  byte res;
  unsigned short w;

  if(Serial.利用できる() == FALSE){//1

	if(sensor_start == TRUE){//2

	//Put ReadSensor(s) here!

/*	The に引き続いて is a 捨てる of something コンビナート/複合体 which might work...
        if 確かな  sensor and RTC 運動ing ソフトウェア were 現在の, and if calls to
        "read sensor", "read RTC" had been made!....
        sprintf_P(buff, PSTR("%u/%u/%u, %u, %02u:%02u:%02u,
                  hum= %02u.%02u, temp = %02u.%02u\n"), rtc.year,
                  rtc.month, rtc.mday, rtc.wday, rtc.hour, rtc.min,
                  rtc.sec, hum_int, hum_dec, temp_int, temp_dec);*/

          sprintf_P(buff, PSTR("123xxxxx"));//tkb デモ: Fill 衝撃を和らげるもの with "data"
	  res = pf_write(buff, strlen(buff), &w);// 令状 data to the とじ込み/提出する
	  if (res != FR_OK) Serial.println("令状 err\n");
	    else Serial.print('.');
	  延期する(500);
	  }//2
    }//1
  else
    {//no cmnds waiting

       get_line(buff, sizeof(buff));
       ptr = buff;

       switch (*ptr++) {//switch

       事例/患者 'm':   // 開始する SD card
          res = disk_initialize();
          if (!res) {//1.. the "fact" that !res true when init 後継するd not 確認するd
              res = pf_mount(&sd.fs);
	      if (res==0) {//2 開始する DOES return 0 when all 井戸/弁護士席.
                           sprintf_P(buff, PSTR("SD card 機動力のある 承認する"));
                          }
                 else {
                       sprintf_P(buff, PSTR("SD card failed to 開始する"));
                      };//2
                    }//1
          else {//1
                sprintf_P(buff, PSTR("SD Init Failed"));
               };//1
          Serial.println(buff);
          break;//end "m"

	事例/患者 'f':    // open a とじ込み/提出する. Card must be 機動力のある, first
	      Serial.print("\nOpening ssd.txt\n");
              sprintf_P(buff, PSTR(" MySDfile.txt"));//N.B. Space needed in
                 //前線 of とじ込み/提出する's 指名する. I tried 除去するing it here, and
                 //除去するing next line...
              while(*ptr == ' ') ptr++;//(see prev).... but no joy! "Broke it"
	      res = pf_open(ptr);
              if(res!=0)
                sprintf_P(buff, PSTR("Error 開始 とじ込み/提出する on SD"));
              else//opened... now put pointer at start of とじ込み/提出する... this 追加するd by TKB
               { res=pf_lseek(0);
                 if (res==0){
                     sprintf_P(buff, PSTR("とじ込み/提出する on SD opened 承認する"));}
                else sprintf_P(buff, PSTR("Error doing 初期の 捜し出す into とじ込み/提出する"));
               }//else
               Serial.println(buff);
	       break;//end "f"

	事例/患者 's':  //start/stop datalog
        //needs work... must not be 許すd until とじ込み/提出する opened.
        //Also, 供給する for messages "Logging Started" and "Stopped"
              Serial.print("Starting or Stopping Logging");
              if(sensor_start == FALSE) sensor_start = TRUE;
	      else sensor_start = FALSE;
              break;//end "s"

        事例/患者 'u':   // 完結する 令状ing (紅潮/摘発する/ の近くに) and Unmount
        //needs work!!
              Serial.print("\nClosing とじ込み/提出する.\n");
              sprintf_P(buff, PSTR("!EOF!"));//tkb
	      res = pf_write(buff, strlen(buff), &w);	/* 令状 data to the とじ込み/提出する */
	      if (res != FR_OK) { Serial.println("令状 err\n"); }
	      res=pf_write(0,0,&w);
              if (res==0){
                 sprintf_P(buff, PSTR("SD CARD unmounted 承認する"));}
                 else sprintf_P(buff, PSTR("SD CARD unmount failed"));
              Serial.println(buff);
              break;//end "u"

	}//end "switch..."
    Serial.print('>');
   }//else, no serial waiting
}//end "宙返り飛行()"

So! There's some "working" code. A visit to the Petit FAT とじ込み/提出する System Module 場所/位置 will help readers who have some とじ込み/提出する systems programming experience.

Is the code above good? No! But it's a start!


Where We're Going

In building ソフトウェア, and the hardward for it to run in, as in life, it always 支払う/賃金s to keep in mind where you are going while you are moving. You want to know you are moving 今後, に向かって your goal, after all!

Most of the work I've done so far with the nuelectronics.com datalogging 保護物,者, and the sensors and actuators (effectors) for it has been amenable to my usual practice of looking at something in a tightly 強制d 状況. For instance, for the 気温 sensor, I was やめる happy with a little program which just read the sensor every 5 seconds, and printed the result out on the serial 監視する. The fact that I've worked with many sensors over the years helped, too, of course.

The datalogging 保護物,者's ability to 令状 to, (and read from), an SD card is a wonderful thing... but using it will never be as simple as using a 気温 sensor!

While my messy ソフトウェア (above) breaks the 支援する of finding out how the pieces of the puzzle work, it is nothing like a "good answer". Before we can move に向かって that "good answer", we need a 計画(する), and my 計画(する) is: Build a "box" with the に引き続いて. Some of the things on the box could be conflated. For instance, the "開始する, etc" button could do 二塁打 義務 as a "unmount, etc" button. Maybe a second 世代 "box" might be built that used より小数の buttons and LEDs. But for getting started, I want all of the に引き続いて:

Here's how using the box should go. Besides the "messages" 暗示するd by the 明言する/公表する of the LEDs, the box should also send more verbose messages to the serial 監視する, but it should not be necessary for the 使用者 to see those messages ーするために use the box, and no input will be 経由で the serial 監視する. (There will even be times when the box will not be plugged into the big computer while the box is running. Happily, this will not 原因(となる) a problem, with our box or in general... messages sent with Serial.print do not have to be 定評のある. With Serial.print, the Arduino "speaks", but doesn't care if "no one is listening".)

Switch on box. Card can be in or not. No LEDs should be on after the Arduino boots up.

The SD card should have a とじ込み/提出する on it, bigger than the biggest you want to 令状. It should be called "MySDfile.txt". You may want to make the とじ込み/提出する be 十分な of some character or pattern, so changes are easier to see, but the system really won't care.

Put SD card into the datalogging 保護物,者. 圧力(をかける) the "開始する, Etc" button. This should 原因(となる) the Arduino to...

If everything went によれば 計画(する). At each 行う/開催する/段階, the result returned from the とじ込み/提出する system ソフトウェア should be checked, and it the 過程 failed, the 試みる/企てる to "開始する, Etc" should be 終結させるd, and the "Unable" LED turned on. I wouldn't be surprized if this happened from time to time. I would be surprized if, with a good SD card which did have the 要求するd とじ込み/提出する, it would take more that 圧力(をかける)ing the "開始する, Etc" button again to get success on the second (or maybe third) 試みる/企てる.

Once the "機動力のある and Ready" LED was on, I would 圧力(をかける) the "Start Logging" button. The "Logging Data" LED should show that data is 存在 logged. (There are variations to consider on this 主題!)

For our 目的s here, "logging data" would still consist 単に of mindlessly 令状ing "123xxxxx" to the とじ込み/提出する, over and over again... but you would do it in a way that made altering that part of the code 平易な.

The "Stop Logging" button would be more like a "pause" button than anything else. It would stop the logging, but not do much more. The "機動力のある and Ready" LED should stay on. 圧力(をかける)ing the "Start Logging" button again should 原因(となる) the logging of data to 再開する... not "start again". (Old data should not be lost).

(Any button that should not do anything at a given moment should be ignored, of course. E.g. the "Start Logging" button shouldn't do anything when the system is already logging.)

Once the logging has been stopped, the "紅潮/摘発する 衝撃を和らげるもの/ Unmount" button should 原因(となる) the box to...

Looking at those in 詳細(に述べる)....

"So- far- 単に- 衝撃を和らげるものd". At some (higher) levels, it may SEEM as if you have "written" something to the SD card when in fact you 港/避難所't 現実に done so yet. The deeper levels of the ソフトウェア may be 令状ing to the SD card in "封鎖するs".

"示す end of data". If the data you were 記録,記録的な/記録するing consisted 完全に of digits, i.e. 0,1,2...7,8,9, then you could 令状 an "E" after the last digit to say "ignore everything beyond here." The way you 示す the end of the とじ込み/提出する depends on the data you are saving, how you are encoding it, how you want to read it. For simple 実験(する)s: Stick to printable ASCII, and use a text editor to look at what you've 達成するd. I like Textpad, for all sorts of 推論する/理由s. Your とじ込み/提出する will 普通は be bigger than the part of the とじ込み/提出する 持つ/拘留するing meaningful data. The only time this will not be true will be when the とじ込み/提出する was just big enough to 持つ/拘留する what you 手配中の,お尋ね者 to save.

The "unmount" doesn't 含む 押し進めるing it 肉体的に out of the 保護物,者. It is "unmounted" only as far the ソフトウェア is 関心d.

A "frill": While the とじ込み/提出する system can't 延長する a とじ込み/提出する, it can 決定する the size of the とじ込み/提出する. You really "need" to build into "開始する, Etc" the things that are necessary to read from the SD card the size of the とじ込み/提出する, and then through everything else that happens, you need to watch that you are not trying to 令状 past the end of the とじ込み/提出する, and that you are leaving room for your "end of data" marker.

You might choose to build the に引き続いて into the "紅潮/摘発する, Etc" button: It might be 望ましい to have the 返答 to that button see if data is 現在/一般に 存在 logged, and it it was, then the 過程ing of "紅潮/摘発する, Etc" would start with whatever is done when you 圧力(をかける) "Stop Logging". Or you could just 無能にする the "紅潮/摘発する, Etc" button any time data was 存在 logged.


Someone please 令状 that program! Or advise!

So! There you have it! That's "all" we need. I hope someone will 令状 that, and 地位,任命する it at the Arduino Playground. After that "little" 仕事 is out of the way, the 残り/休憩(する) of us can get on with the "hard" part... building the 残り/休憩(する) of a datalogging 使用/適用, building the system around the "save the data" backbone. The 十分な system will have sensors and ways to input 使用者 必要物/必要条件s such as 見本ing 率.

By the way... story for another day... the system sketched above is not "力/強力にする 失敗 friendly". If the 力/強力にする to the system fails 突然に, or if a 使用者 pulls the card out without 圧力(をかける)ing the "Stop Logging" and "紅潮/摘発する, Etc" buttons first, at least some data will probably be lost. You could make it more 強健な with a "令状 at once" system, probably based on たびたび(訪れる) "紅潮/摘発するs"... but that would give rise to wear and 涙/ほころび on the SD card, and I don't want to "go there"... for now.


In の近くにing....

Just in の近くにing let me 株 some helpful, I hope, (警察などへの)密告,告訴(状) that someone from Jackson Ohio USA kindly emailled to me. He was also working with the nuelectronics datalogging 保護物,者. He said.... (edited)...

I have 首尾よく written to an SD card, a 2 GB Kingston,
FAT formatted.

I used the とじ込み/提出する and 構成要素 from Adafruit 産業s....
www.adafruit.com

They also sell a datalogging 保護物,者. They recommend the
SDFATlib by Mr. 法案 Greiman....

http://code.google.com/p/sdfatlib/

You will have to change the #define SPI_SS_PIN from 10
(normal) to 5 for the nuElectronics 保護物,者, in the SDcard.H とじ込み/提出する.

He has a lot of good examples, and (警察などへの)密告,告訴(状) in the zip とじ込み/提出する.

All of the examples that I tried worked with the nuElectronics
保護物,者....

Wrote to SD card with no とじ込み/提出する on card, created a とじ込み/提出する, appended
to it, erased it, time stamped it, copied it.

The library is for Fat16 SDs, and there is a library for Fat32
SDs, but not Fat12. He covers the differences in some of his
text とじ込み/提出するs and pdf とじ込み/提出する.

So! I hope you have enough ideas to "play" with, for the moment?



-------------------

See Also: The Arduino programming course from Sheepdog Guides:

その上の to the Arduino ideas the page you are reading now will take you to, I have 地位,任命するd a 一連の essays which try to help you become a better Arduino programmer and engineer... but, for the best result, you will have to buckle 負かす/撃墜する and work your way through them in sequence. The "How To's" here can be 接近d in whatever order you like.


Feel 解放する/自由な to use this (警察などへの)密告,告訴(状) in programming courses, etc, but a credit of the source would be 高く評価する/(相場などが)上がるd. If you 簡単に copy the pages to other web pages you will do your readers a disservice: Your copies won't stay 現在の. Far better to link to these pages, and then your readers see up-to-date 見解/翻訳/版s. For those who care- thank you- I have 地位,任命するd a page with more (警察などへの)密告,告訴(状) on what copyright 権利放棄s I 延長する, and suggestions for those who wish to put this 構成要素 on CDs, etc.





編集(者)の Philosophy

See the discussion 近づく the 底(に届く) of the "最高の,を越す level" page covering the 本体,大部分/ばら積みの of my Arduino 出資/貢献s. There is (警察などへの)密告,告訴(状) there, too, about things like "May I copy your 構成要素?", and the system of とじ込み/提出する 指名するs I am trying to work to.


   Search this 場所/位置 or the web        力/強力にするd by FreeFind
 
  場所/位置 search Web search
場所/位置 地図/計画する    What's New    Search

The search engine is not intelligent. It 単に 捜し出すs the words you 明示する. It will not do anything sensible with "What does the 'could not 収集する' error mean?" It will just return 言及/関連s to pages with "what", "does", "could", "not".... etc.
In 新規加入 to the (警察などへの)密告,告訴(状) about the nuelectronics data 保護物,者 of which this page is part, I have other 場所/位置s with 構成要素 you might find useful.....

Tutorials about the 解放する/自由な database which is part of the 解放する/自由な Open Office.
Sequenced 始める,決める of tutorials on Pascal programming and electronics interfacing.
Some pages for programmers.
Using the 平行の port of a Windows computer.

If you visit 1&1's 場所/位置 from here, it helps me. They host my website, and I wouldn't put this link up for them if I wasn't happy with their service... although I was いっそう少なく than pleased the other day to have what I was doing interrupted by a telephone call from their sales team, trying to get me to 延長する my 関与. Sigh. Hardly a rare event, but I'd thought 1&1 were a bit classier that some of the people who have my telephone number.



広告 from page's editor: Yes.. I do enjoy 収集するing these things for you... hope they are helpful. However.. this doesn't 支払う/賃金 my 法案s!!! If you find this stuff useful, (and you run an MS-DOS or Windows PC) please visit my freeware and shareware page, download something, and 循環させる it for me? Links on your page to this page would also be 高く評価する/(相場などが)上がるd!

Click here to visit editor's Sheepdog ソフトウェア (tm) freeware, shareware pages.


And if you liked that, or want different things, here are some more pages from the editor of these tutorials....

Click here to visit the homepage of my biggest 場所/位置.

Click here to visit the homepage of Sheepdogsoftware.co.uk. 陳謝s if the "?Frmar3ne1sd" I 追加するd to that link 原因(となる)s your browser problems. Please let me know, if so?

Click here to visit editor's pages about using computers in Sensing and 支配(する)/統制する, e.g. 天候 logging.



To email this page's editor, Tom Boyd.... Editor's email 演説(する)/住所. Suggestions welcomed!


Valid HTML 4.01 Transitional Page 実験(する)d for 同意/服従 with INDUSTRY (not MS-only) 基準s, using the 解放する/自由な, 公然と accessible validator at validator.w3.org


Why does this page 原因(となる) a script to run? Because of the Google パネル盤s, and the code for the search button. Why do I について言及する the script? Be sure you know all you need to about spyware.

....... P a g e . . . E n d s .....