SSブログ
ATmarquino Arduino ブログトップ
前の10件 | 次の10件

「オープンソースハードウェアセミナーVol1」レポート Arduino Ethernet Shield チップワンストップさんで売り切れ [ATmarquino Arduino]

Img_1380.jpg今のところこのblogでは全然よい事を書けていないArduino+Ethernet Shieldですが、世間の目はこんなマイナーblogには向いておらず、現在国内で最安の3990円でEthernet Shieldを提供していたチップワンストップさんでは早々に入荷分を売り切ったそうです。

以下のリンクからこの企画のサイトに入ると、ページの上の方にArduino製品の購入バナーが貼られています。
以前はここをクリックすると購入ページに進み、そこにチップワンストップさんで取り扱いのArduino製品の一覧が有りましたが、現在このリストにはEthernet Shieldの姿は消えております。
※お勧めの機能拡張ボードのところにEthernet Shieldが、値段と納期が空欄で表示されています。
http://www.chip1stop.com/UE051_M10.cfm?PID=ARDU-0000001&DID=21&FROM=UE018

Ethernet Shieldは、なんでも近日中に再入荷の予定だとか。

一応、この企画に参加させてもらっている立場からも、Ethernet Shield売れているのか!良かった、良かった!
と言う話でした。
※再入荷の詳しい予定は、見積もりを取って確認してみて下さいね。

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ



※ちょっと心配しちゃったよ!。

Arduinoをはじめよう

Arduinoをはじめよう

  • 作者: Massimo Banzi
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 単行本(ソフトカバー)



Making Things Talk -Arduinoで作る「会話」するモノたち

Making Things Talk -Arduinoで作る「会話」するモノたち

  • 作者: Tom Igoe
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/11/17
  • メディア: 大型本



「オープンソースハードウェアセミナーVol1」レポート Arduino Ethernet Shield I'm stack!. Help. [ATmarquino Arduino]

インターネット経由でArduino WEBサーバー(改)にF5アタックを掛けたら、落ちてしまった!と言う話。
Img_1427.jpg
ether_shield_009.png
本当は先にH8ネタをやるつもりでしたが、こっちの検証の方が緊急性が高いので、先にArduino Ethernet Shield情報をやります。

インターネット経由、つまり会社から自宅のArduino WEBサーバー(改)にアクセスして安定具合を見ていたのですが、ポツポツとリクエストを送るだけでは試験にならないので、F5アタックを掛けた訳ですよ。すると程なく応答が無くなってしまいました。もう会社にいる間は接続できません。

さて、家に帰って来てまず外観から見てみます。パワーオン時に見られるようなRX LEDが点きっ放しとはなっていません。これは少なくともW5100 プロトコルスタックICは大丈夫なんではないかな?。しかし外観だけでは判断出来かねるのでパケットモニタ(PacMon)を仕掛けたPCからPINGを打ってみます。
ちゃんと応答を返して来ますのでW5100は無事?。

いやまだ判らないのでブラウザからアクセスしてみた結果が2枚目の図です。PCからのSYNに対してEthernet Shield側はRSTを返して接続を拒否しています。

これは、、、理由は判らないのですがW5100側の4個のソケット全てが使用中で応答できない状態ではないのかな?。※または全てのソケットがアクセプトバインドされていないのか?。

と、煮え切らない結果です。色々手段を変えてやってみて、具体的な原因を探るしか無いようですね。
※しかし、これデバッカー無いから最悪だな。

追記!
http://hamayan.ddo.jp:8888/
やはりインターネット経由でF5アタックをやると落ちますね。
家の中からはいくらやっても落ちなかったのですけれど。
原因は何でしょう?、インターネット特有の遅延やパケットの再構築とかか?。それともブラウザが外(Firefox2)、家(Opera9.6)だからか?。

理由が判らないのですが、運用面で行けばハングを検出したら、ハングしっぱなしではなく何らかの回復手段を持たせる必要がありますね。まあエンベでは当然の事なのですが。

さらに追記!
やっぱり家に帰ってFirefox2でF5アタック掛けると簡単に落ちる。
Opera9.6は勿論IEの6も1000回F5アタックを行っても落ちる気配全然無し。まあFirefoxはメインのブラウザではないから良いか!。
F5アタックにはFirefoxがお勧めです。

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ



以下のTCP/IPの本はお勧めです。平易な言葉と判り易い挿絵で、誰が読んでも読み進める事が可能でしょう。内容も勿論申し分無いです。

マスタリングTCP/IP 入門編 第4版

マスタリングTCP/IP 入門編 第4版

  • 作者: 竹下 隆史
  • 出版社/メーカー: オーム社
  • 発売日: 2007/02/24
  • メディア: 大型本



Making Things Talk -Arduinoで作る「会話」するモノたち

Making Things Talk -Arduinoで作る「会話」するモノたち

  • 作者: Tom Igoe
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/11/17
  • メディア: 大型本



Arduinoをはじめよう

Arduinoをはじめよう

  • 作者: Massimo Banzi
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 単行本(ソフトカバー)



「オープンソースハードウェアセミナーVol1」レポート Arduino Ethernet Libraryの問題。まだあるヨン [ATmarquino Arduino]

※デモサーバー http://hamayan.ddo.jp:8888/ ですが、調子に乗ってF5攻撃をしたら落ちましたね。
現在接続できません(笑)。ルーターが落ちた訳ではないです。

Img_1427.jpgええっと、もうこのお方のblogを読んでみて下さい。
記事へのリンク
http://todotani.cocolog-nifty.com/blog/2009/05/arduino-674f.html

または「PS3とLinux、電子工作も」さんのblogのトップ
http://todotani.cocolog-nifty.com/blog/

ここで指摘した問題以外に、ソケットクローズの時にもバグがあったようです。
問題なのはClient.cppのstop Methodで、
void Client::stop() {
  close(_sock);
  disconnect(_sock);
  EthernetClass::_server_port[_sock] = 0;
}

つまりソケットを強制的に閉じてからディスコネクトしていると言う話。トホホ、普通逆だろう。

これ以外にもEphemeral portを使っているつもりが、いつの間にかWell known portを使っているとかのバグ。Client::connectの中
  _srcport++;
  socket(_sock, Sn_MR_TCP, 1024 + _srcport, 0);

あんたこれ、全然動作検証していないでしょう。
Arduinoのフォーラムには修正版が上がっているようなので、宜しければ差し替えた方が良さそうですね。
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238640832/2

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ




詳解TCP/IP〈Vol.1〉プロトコル

詳解TCP/IP〈Vol.1〉プロトコル

  • 作者: W.リチャード スティーヴンス
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本



マスタリングTCP/IP 入門編 第4版

マスタリングTCP/IP 入門編 第4版

  • 作者: 竹下 隆史
  • 出版社/メーカー: オーム社
  • 発売日: 2007/02/24
  • メディア: 大型本



TCP/IPソケットプログラミング C言語編

TCP/IPソケットプログラミング C言語編

  • 作者: Michael J. Donahoo
  • 出版社/メーカー: オーム社
  • 発売日: 2003/05
  • メディア: 単行本



「オープンソースハードウェアセミナーVol1」レポート Arduino Ether Shield de Web Server 改 [ATmarquino Arduino]

chip1 Stopからいらした方、Arduino関連カテゴリをお試しください。http://hamayan.blog.so-net.ne.jp/archive/c2300498101-1

※サンプルwebサーバーはhttp://hamayan.ddo.jp:8888/でアクセスできると思います。
※ああ勿論地球温暖化防止の為(笑)、電源電圧3.3V仕様で運用中です。

Img_1427.jpgまあオリジナルのサンプルWEBサーバーのスケッチがかなーり微妙なので、せめてRequest Methodの解析とURLの判定位はした方が今後の為にも良いでしょうと言う話です。
※オリジナルは、どんなURLのりクエストでも全部同じ内容を表示してしまう。解析は空行の検出のみの機能なので、「WEBサーバー動いた!Arduinoってすごーい!、、、」と言った後が続かない。だって利用できるところが殆ど無いからね。

それの前段階としてまたまたEthernetライブラリをちょっといじって、プログラムメモリ上の静的コンテンツを送信できるようにしました。
これが出来るとプログラムメモリ上に埋め込んだ画像とかも、このサーバーから送れるようになります。
例えばfaviconとかね。

まずはClient.cppに関数を追加します。今度はオーバーライドできませんでした。

まあ見て判る様に、一旦プログラムメモリ上のコンテンツを256byteのSRAM上のバッファに転送して、それからTCPで送信します。コンテンツのサイズが256byteより大きい時は分割します。
※多分もう少し大き目にHEAPから領域を取得できると思うんだけれど、今後のSRAMの使い方が不明なので程々にしています。

うーん、AVRはプログラムメモリの空間とワーク用のSRAM空間が一致しておらず、その為こう言ったところが物凄く面倒なんだよね。こう言ったアーキテクチャに強烈に依存するところが有るので、決してArduino=簡単とは言えないと思うんだけれど。
※またはsocketライブラリ自体もいじって、プログラムメモリ上のコンテンツも直接送信できるようにするとか。
#define  TEMP_HEAP_SIZE  256
void Client::write_P( PGM_VOID_P buf, int size )
{
  uint8_t *temp = (uint8_t *)malloc( TEMP_HEAP_SIZE );
  int sz;
  PGM_P ptr = (PGM_P)buf;

  for( ; size > 0; )
  {
    sz = ( size < TEMP_HEAP_SIZE ) ? size : TEMP_HEAP_SIZE;
    memcpy_P( temp, ptr, sz );
    send( _sock, (const uint8_t *)temp, sz );
    size -= sz;
    ptr += sz;
  }

  free( temp );
}


Client.hには先の関数のプロトタイプ宣言を追加しておきます。ここは割愛。
あと、Ethernet.hに以下の記述を追加して置いて下さい。
#include <avr/pgmspace.h>


改造後のWEBサーバーのスケッチは以下の様になります。

prog_char PROGMEMで型指定されたところがプログラムメモリに埋め込まれます。先にも書いたようにSRAMとは別の空間にありますので、それ専用のアクセス方法が必要となります。

PROGMEMを付けないで書くと恐ろしい事が起きます(笑)。いくらconstを付けてもSRAM上に展開されてしまいますので、気が付かない内にメモリ不足に陥っています。まあ、確かにconst修飾子は値を変更しない事を(コンパイラに)宣言しているだけですから、決してこれを「定数領域に入れろ!」とは言っていない、、、のかもね。
/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

#include <Ethernet.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define  LINE_STRING_SIZE  128

char *line;
char meth[10],url[30],ver[20];
long access_count;

const byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const byte ip[] = { 192, 168, 1, 177 };
const byte gateway[] = { 192, 168, 1, 1 };

/*contents*/
prog_char PROGMEM http_head[] =
  "HTTP/1.0 200 OK\r\n" \
  "Server: Arduino with Ether Shield/ ver.0.1\r\n" \
  "Content-Type: text/html; charset=UTF-8\r\n\r\n" \
  "<html lang=\"ja\"><head>\r\n" \
  "<meta HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=UTF-8\">\r\n" \
  "<title>Arduino WEB Server 0.1</title></head>\r\n" \
  "<body bgcolor=\"#ccffcc\">\r\n" \
  "<h3>designed by hamayan</h3>\r\n";

prog_char PROGMEM http_foot[] =
  "</body></html>\r\n\r\n";

prog_char PROGMEM thanks[] =
  "アクセス有難うございます。このページはArduino+Ether Shieldで表示しています。<br>\r\n" \
  "現在はリクエストのパーサーを作成しています。<br>\r\n";

prog_char PROGMEM links[] =
  "hamayan blog <a href=\"http://hamayan.blog.so-net.ne.jp/\">http://hamayan.blog.so-net.ne.jp/</a><br>\r\n" \
  "chip 1 stop <a href=\"http://www.chip1stop.com/\">http://www.chip1stop.com/</a><br>\r\n" \
  "オープンソースハードウェアセミナーのページ <a href=\"http://www.chip1stop.com/knowledge/Arduino/\">http://www.chip1stop.com/knowledge/Arduino/</a><br>\r\n" \
  "Make:Japan <a href=\"http://jp.makezine.com/blog/\">http://jp.makezine.com/blog/</a><br><br>\r\n";

prog_char PROGMEM banner_01[] =
  "<p><a href=\"http://www.chip1stop.com/knowledge/Arduino/\">" \
  "<img src=\"http://www.chip1stop.com/img/link_Arduino.gif\" width=\"468\" height=\"60\" alt=\"Arduinoモニタープログラム参加中\" /></a><br>" \
  "<a href=\"http://www.chip1stop.com/\" title=\"電子部品・半導体の通販サイト - チップワンストップ\">電子部品・半導体の通販サイト - チップワンストップ</a></p><br><br>\r\n";

prog_char PROGMEM img_src[] =
  "<p><img src=\"./image2.jpg\" width=\"200\" height=\"140\" align=\"center\"></p><br><br>\r\n";

prog_char PROGMEM jpeg_head[] =
  "HTTP/1.0 200 OK\r\n" \
  "Server: Arduino with Ether Shield/ ver.0.1\r\n" \
  "Content-Type: image/JPEG\r\n\r\n";

Server server = Server( 8888 );

void setup()
{
  Ethernet.begin( (uint8_t *)mac, (uint8_t *)ip, (uint8_t *)gateway );
  server.begin();
  line = (char *)malloc( LINE_STRING_SIZE );
}

void loop()
{
  Client client = server.available();

  if( client )
  {
    while( client.connected() )
    {
      char *dst = HTTPGets( &client, line, LINE_STRING_SIZE );
      char *argv[ 10 ];
      int div_num = split( dst, argv, sizeof(argv) / sizeof(argv[0]) );  /*文字列分割*/
      strcpy( meth, argv[ 0 ] );
      strcpy( url, argv[ 1 ] );
      strcpy( ver, argv[ 2 ] );
      break;
    }

    while( client.connected() )
    {
      char *dst = HTTPGets( &client, line, LINE_STRING_SIZE );
      if( dst != NULL && *dst == '\0' )  /*改行のみの行を検出*/
      {
        index_html( &client );
        break;
      }
    }

    delay( 1 );
    client.stop();
  }
}

void index_html( Client *client )
{
  //httpヘッダーの返信
  client->write_P( http_head, sizeof( http_head ) - 1 );

  //サンキューメッセージ
  client->write_P( thanks, sizeof( thanks ) - 1 );

  //リンク
  client->write_P( (const uint8_t *)links, sizeof( links ) - 1 );

  //アクセスカウント
  sprintf( line, "COUNT=%d <br>\r\n", ++access_count );
  client->write( (const uint8_t *)line, strlen( line ) );

  //バナー
  client->write_P( (const uint8_t *)banner_01, sizeof( banner_01 ) - 1 );

  //Footer
  client->write_P( (const uint8_t *)http_foot, sizeof( http_foot ) - 1 );
}

/*
HTTPプロトコルでは行末はCR、LFであると言う前提がある
*/
static char *HTTPGets( Client *client, char *dst, int size )
{
  int loop;
  char c,*ptr,*limit;

  ptr = dst;
  limit = dst + size;

  for( loop = 10; loop > 0; loop-- )
  {
    if( ptr == limit ) return (char *)0;  /*上限の確認*/

    if( client->available() )
    {
      loop = 10;  /*タイムアウト延長*/

      c = client->read();  /*一文字取得*/

      if( c == '\r' )  /*CRはNULLに変換*/
      {
        *ptr++ = '\0';
      }
      else if( c == '\n' )  /*LFは終端文字*/
      {
        *ptr = '\0';
        return dst;
      }
      else  /*文字の取得*/
      {
        *ptr++ = c;
      }
    }
    else
    {
      delay( 100 );  /*残りのデータが遅れて来る可能性があるので、ここで待ちを入れる*/
    }
  }

  return (char *)0;
}

/*
文字列分割
*/
static int split( char *str , char *argv[], int sz )
{
  int argc = 0;

  while( *str != '\0' && argc < sz )
  {
    if( isgraph( *str ) != 0 )
    {
      argv[ argc++ ] = str;
      while( *str != '\0' && isgraph( *str ) != 0 ) str++;
    }
    else *str++ = '\0';
  }

  return argc;
}


Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ




Arduinoをはじめよう

Arduinoをはじめよう

  • 作者: Massimo Banzi
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 単行本(ソフトカバー)



マスタリングTCP/IP 入門編 第4版

マスタリングTCP/IP 入門編 第4版

  • 作者: 竹下 隆史
  • 出版社/メーカー: オーム社
  • 発売日: 2007/02/24
  • メディア: 大型本



詳解TCP/IP〈Vol.1〉プロトコル

詳解TCP/IP〈Vol.1〉プロトコル

  • 作者: W.リチャード スティーヴンス
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本



「オープンソースハードウェアセミナーVol1」レポート ArduinoとEther Shieldの3.3V化計画 [ATmarquino Arduino]

chip1 Stopからいらした方、Arduino関連カテゴリをお試しください。http://hamayan.blog.so-net.ne.jp/archive/c2300498101-1

まあArduino Duemilanoveデュ、デュラムセモリナ(読めん)ボードには色々換えたい所が有るのだけれど、まずは最も基本となる「電源電圧を3.3Vに変更してみた!」です。
なお、ここから書いてある事はまったくもって人にお勧めできません。同じ事をやって、とんでもない事になってしまっても私は関知しませんです。

作業の流れとしては、Arduino Duemilanove上に搭載されているFETと5Vレギュレーターを外します。
同様にEthernet Shield上の3.3Vレギュレーターを外します。この外したレギュレーターはArduino Duemilanove上に乗せ換えます。
元FETのパッドと乗せ換えたレギュレーターの入力の間にダイオードを挿入し、USBからの電源をバイパスさせます。
Ethernet Shield上の3.3Vレギュレーターのパッド間をショートしてこの作業は完了です。
Img_1419.jpg 半田鏝は2本用意します。2本用意できない場合は、もう一本買ってからチャレンジして下さい。
Img_1420.jpg FETやレギュレーターのタブとリードを2本の鏝で同時に暖め、半田が緩んだところで横にずらすようにしてこれら部品を外してしまいます。 この時タブやリードにたっぷり半田を上乗せすると半田が冷え難くなり、作業が容易になります。 ※最後は吸い取り線でパッドを綺麗にして置きます。
Img_1422.jpg Arduino Duemilanove上にEthernet Shieldから外したレギュレーターを実装します。
Img_1423.jpg FETの真中のリードパッドとレギュレーターの3pinの間にダイオードを挿入します。カソード側がレギュレーターになります。
Img_1424.jpg Ethernet Shield側も写真の様に処理をして置きます。



一応電源電圧等をテスターで確認、また適当なサンプルスケッチを動かして無事動いている事を確認できればこの作業は完了です。
お疲れ様でした。

なんでわざわざ5Vで動く物を3.3Vにするかと言えば、最近は動かしたい物がすっかり3.3Vデバイスで集められており、「今更5Vなんて、、、」って感じなのですよね。
まあW5100は5Vトレラントなので5Vでも動くのですが、XBeeは3.3V厳守、パスワールドのグラフィックLCDも3.3V、あと手持ちのNaPiOnがやはり3V動作品だったり。

今回の改造であの訳の判らない電源切り替え回路は無効となっているので、USBではなく外部電源を使用する場合は5V位から選べる事になります。

従来は外部電源として適正かつ実際的な電源電圧は9V程度必要でした。
それでEthernet Shieldと合体した場合、Arduino Duemilanove側の5Vレギュレーターがアッちんちんになっていましたが、今回は電力を無駄にレギュレーターで消費しなくても良くなったので大分温度が下がっております。実にエコですね。

※貼るの忘れていた。

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ




Arduinoをはじめよう

Arduinoをはじめよう

  • 作者: Massimo Banzi
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 単行本(ソフトカバー)



「オープンソースハードウェアセミナーVol1」レポート Arduino Ether Shield のちょっとした話題ふたつ [ATmarquino Arduino]

chip1 Stopからいらした方、Arduino関連カテゴリをお試しください。http://hamayan.blog.so-net.ne.jp/archive/c2300498101-1

Make:Tokyo Meeting 03が終わった放心状態から徐々に回復しつつある状況。
あれも納めたし、、、いや待てよ、別のあれはまだ継続中なのかなぁ。
Img_1380.jpg
Make:JapanにはArduino関連の記事のアーカイブがあるんですね。これは便利だ。
http://jp.makezine.com/blog/arduino/index.html
勿論ATmarquinoもここから読めます。

例のEthernet Shieldの件ですが、本家のフォーラムには同様の問題が議論されています。
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1225354009/0
最終的?には、RESETとGND間に0.022μF~0.047μFのコンデンサを入れろ!と言う事になっていますが、これも結構苦しい。

1.瞬間的に電源が落ちてしまった場合は対応できない。
2.使用するコンデンサを選ぶ。

1.は、瞬間的に電源が落ちてもコンデンサに充電されている分、反応が遅れる事になり、十分なリセット時間を実現できない可能性がある。RESET信号とVCC間にダイオードを入れる手も有るが、結局のところリセットが不安定になる事は解消しきれない。

2.は、割と手近にあるコンデンサとなると積層磁器コンデンサ(いわゆるパスコンとして使う奴)となるけれど、F特性の物を選ぶと最大で+80パーセントの静電容量誤差があるので、コンデンサの公称値だけで0.022μFだの、0.047μFだのと言っても、実際にはその通りではない可能性がある。しかも温度変化に対しても大きな影響を受ける。

これ2008年10月30日から正規のフォーラムで指摘されていたんだから、、、○△□◇できたんじゃないの?。
なんで未だ放置プレイ?。

Make: Technology on Your Time Volume 06

Make: Technology on Your Time Volume 06

  • 作者:
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 大型本



ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

  • 作者: 濱原 和明
  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/25
  • メディア: 単行本



Chip 1 Stopのあのページに変化が現れた。んが! [ATmarquino Arduino]

chip1stop_01.png
chip1stop_02.png
Chip 1 Stopさんの「Arduinoモニタープログラム」の中の「Arduinoの購入」のページに変化が現れました。

Arduino関連ボードだけでなく、他のChip 1 Stopさん取り扱い商品の中からお勧め商品へのリンクが増えています。ですが、リンクをポチッとしてみると、ちょっと、いやかなり微妙なページが表われます。

いきなりメーカー型番と納期、単価、MOQ等の情報が表示されるだけです。このページは既にそのデバイスに付いて知っていて、欲しくてやって来る人のページなので、アナウンスされたリンクに従ってやって来る人のページではありません。

具体的には、
  1. 一体これはどの様なデバイスなのか?
  2. どこがお勧めなのか?
  3. 実際にArduinoではどう使ったら良いのか?
  4. MOQって何?
  5. 納期が書いていない商品はどうなっちゃうの?

少なくともこれくらいの情報は用意しておかないと、誰も買わないですよ、正直言って。

「お勧め商品」という物を用意するのは販売店としての営業努力として立派だと思います。
やるならもう少し積極的にね。

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ



「オープンソースハードウェアセミナーVol1」レポート Arduino Ether Shield W5100の初期化タイミングを遅らせる [ATmarquino Arduino]

chip1 Stopからいらした方、Arduino関連カテゴリをお試しください。http://hamayan.blog.so-net.ne.jp/archive/c2300498101-1
Img_1380.jpgハードウエアリセット回路を使用する事で起動の不安定さはそこそこ改善されましたが、まだ不満が残っていました。

ボードに直接改造を行わない範囲では、現状ハードウエア的にはこの位が限度ですので、今度はソフトウエアの起動シーケンスもいじってみます。

setup()の中でソケットの生成を行っていますが、この時初めてArduino側はW5100にアクセスする事を期待して、ソケットを生成する前に1秒間の遅延を入れてみます。
void setup()
{
  delay( 1000 );
  Ethernet.begin(mac, ip);
  server.begin();
}

まあこれだけの話なのですけれどね、当社比では更に25パーセント程改善が見られました。
つまり起動失敗は多分20回に1回程度になったのではないかな。

電源の立ち上がり時はリセット周りの回路をちゃんと作っておかないと、どのICが先に起動するか判りません。
問題を起こすのはW5100よりもAVRが先に起動しちゃっている場合です。
W5100が正常に動いていないのにAVRがさっさと起動してW5100に対して初期化を行っても、W5100は起動していないのだから、正常に起動が完了する訳がありません。

W5100は100MのEthernetにも接続可能なので、内部に125MHzのクロックを生成するPLLの類が有る筈です。PLLが安定するには時間が掛かるのが普通ですので、PLLが安定した事を示すレジスタが存在するのかもしれません。

こう言った確認事項をちゃんと行っていれば、もう少し状況はよかったかもしれません。
※ソースコードを見ろ!と言う話か?。やれやれ。

ですが最大の問題は、Arduinoデュ、、、デュラムセモリナボード+Ether Shieldの組み合わせにはPower On
Reset回路が構成されていない点です。
いや、AVRの内部にはそれが有るのでAVRの起動は問題無いのですが、W5100は違います。だって、実質的にプルアップ抵抗が1個有るだけですから。いや本当です、冗談は言っていません。回路図公開されていますので調べてみて下さい。

マイコンと周辺ICとの間の起動シーケンスで悩まない方法があります。このEther Shieldもそれをすれば良かったのにと思うんですけれど。(と言うかそれしか方法は無い。)

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ




Arduinoをはじめよう

Arduinoをはじめよう

  • 作者: Massimo Banzi
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 単行本(ソフトカバー)



Making Things Talk -Arduinoで作る「会話」するモノたち

Making Things Talk -Arduinoで作る「会話」するモノたち

  • 作者: Tom Igoe
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/11/17
  • メディア: 大型本



アーデュイーノ互換マイコン・ボードを作る (プリント基板付き電子工作解説書シリーズ)

アーデュイーノ互換マイコン・ボードを作る (プリント基板付き電子工作解説書シリーズ)

  • 作者: 小坂 貴美男
  • 出版社/メーカー: CQ出版
  • 発売日: 2009/04
  • メディア: 単行本



「オープンソースハードウェアセミナーVol1」レポート Arduino Ether Shield 外付けリセット回路を試す [ATmarquino Arduino]

chip1 Stopからいらした方、Arduino関連カテゴリをお試しください。http://hamayan.blog.so-net.ne.jp/archive/c2300498101-1
Img_1382.jpg
Img_1383.jpg
既に連載化しています(笑)。
Arduino及びシールドを素で使わずに、納得行かなければ納得行くようにする!と言うスタンスは、きっとメディアアート系の人には煙たいスタンスなんだと思いますが、ですがこっちは(このblogを観に来る人は)エンベ系の人間なのでそんなの関係無いです。中途半端には終われません。

手持ちの5V系のリセットICがT.I.のTL7705Aしか無かったので、ブレッドボード上にリセット回路を組み、Arduinoと接続してみました。
CTには10μFのコンデンサを付けているので、4.5V以上に到達してから100ms間リセットをアクティブのまま維持します。

これにより、当社比で70パーセント程起動に成功する様になりました。要するに、いまだ3回に1回位は起動に失敗します。

ソフトウエア側にも手を入れないと駄目みたいですね。

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ




Arduinoをはじめよう

Arduinoをはじめよう

  • 作者: Massimo Banzi
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 単行本(ソフトカバー)



Make: Technology on Your Time Volume 06

Make: Technology on Your Time Volume 06

  • 作者:
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/27
  • メディア: 大型本



「オープンソースハードウェアセミナーVol1」レポート Arduino Ether Shield 電源起動で、、、その後 [ATmarquino Arduino]

chip1 Stopからいらした方、Arduino関連カテゴリをお試しください。http://hamayan.blog.so-net.ne.jp/archive/c2300498101-1
Img_1377.jpg
Img_1380.jpg
例のEther Shieldがだんまりしてしまう件の続き。

「RXDにプルアップが無いと不安定になる」と言う件が過去に発生していたとの報告から、RXDにプルアップ抵抗を付けてみました。結果は変わらずにハングします。関係無い様です。

上の写真が正常に動いている時の物。ちょっと判り難いのですが、基板の右下に2×3で並んでいるLEDの右の並びの真中がEthernetのRXのLEDです。

ハングするとこれが下の写真の様にランプが点きっ放しになってしまいます。私の持っている基板はほぼ100パーセント電源ジャックを差し込んだ時にハングします。

不調な現象は他にもあります。USBから電源の供給を受けている時はもっと別の不安定な状態になる事が結構あります。不調になるとLINK LEDが激しく点滅します。まあこれはUSBのバスパワー駆動が厳しいのかもしれないですね。※なんか変なんだよなぁ。物凄く不安を感じる。

いずれにせよ、電源立ち上がり時のリセットシーケンスに付いてはハードウエア的、ソフトウエア的に見直しが必要に思えます。

Arduinoモニタープログラム参加中
電子部品・半導体の通販サイト - チップワンストップ




詳解TCP/IP〈Vol.1〉プロトコル

詳解TCP/IP〈Vol.1〉プロトコル

  • 作者: W.リチャード スティーヴンス
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本



詳解TCP/IP〈Vol.2〉実装

詳解TCP/IP〈Vol.2〉実装

  • 作者: ゲリー・R. ライト
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/12
  • メディア: 単行本



前の10件 | 次の10件 ATmarquino Arduino ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。