2014/03/11

AVRマイコンボードを購入しました

 秋月電子で「ATmega168/328マイコンボードキット」と「Atmel AVRISPmkII」を購入しました。合計で5,300円です。
 このマイコンボードはブートローダを書き込むとArduino互換ボードとして使えるようですが、まずはそのままで遊ぼうと思っています。

搭載されるマイコンのスペック
メーカAtmel
品番ATmega168P-20PU
Flash16kbytes
EEPROM512bytes
RAM1kbytes
Speed0-20MHz @ 4.5V~5.5V (※1)
0-10MHz @ 2.7V~5.5V
Power2.7V~5.5V (※2)
動作温度-40℃~85℃
※1:マイコンボードでは外部X'talとして16MHz品と20MHz品の2種類が入っており、
   好きなほうを実装できます。私は20MHz品を実装しました。
※2:マイコンボードでは5Vに接続されています。

★気づき点

マニュアルの回路図にミス?がある
 コネクタX4の3pin(M8RXD)、1pin(M8TXD)の飛び先がない。→実際はATMEGA168の2pin、3pinに接続されているようです。(参考:eJackino回路図
・USBシリアル(AE-UM232R)基板上のジャンパJ2は外しておいたほうが良いかも?

 マイコン基板の電源(5V)はUSB経由とACアダプタ経由を選択できるが、J2を接続し、PWR-SELをEXTに設定すると、USB経由の5VとACアダプタ経由の5Vが直結されあまりよくない。


2014/01/22

無線LAN USBアダプタを用いたdebian(wheezy)インストール

インターネット環境のない所でdebianのインストール作業を行ったので、そのメモです。

■方針


     
  • DVD ISOイメージからインストールする。  
  • 手持ちの無線LAN USBアダプタ(PCI GW-US54GXS)からiPhone(テザリング)に接続し、DVDにないもの、更新されたソフトウェアはDebianのミラーサイトから入手する。

■用意するもの


  • 無線LAN USBアダプタ PCI GW-US54GXS
  • USBメモリ (5GB以上)
  • USBメモリ(50MB以上)

■作業


(1)DVD ISOイメージの入手
ここの情報を参考に、DVD ISOイメージ(debian-7.3.0-amd64-DVD-1.iso)を入手します。

(2)USBメモリ(5GB以上)にISOイメージを書き込む

ここの情報を参考にUSBメモリにDVD ISOイメージを書き込みます。
# cp debian-7.3.0-amd64-DVD-1.iso /dev/sdb
# sync

(3)無線LAN USBアダプタのファームウェアを入手

debianのインストール中にPCI GW-US54GXSを使うにはファームウェアが必要なようです。ファームウェアを準備せずにインストールを始めると、途中で「zd1211/ad1211b_ubというファームウェアが必要」と言われます。
 ここを参考にファームウェアを入手します。
# wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/wheezy/current/firmware.tar.gz

(4)USBメモリ(50MB以上)にファームウェアを書き込む

# mount /dev/sdb1 /media
# cd /media
# tar xvf hogehoge/firmware.tar.gz
# cd /
# umount /media

(5)PCをUSBメモリから起動できるように設定する

BIOSまたはUEFIの設定メニューから起動デバイス選択メニューを選び、内臓HDDよりUSBメモリのほうが優先度が高くなるように設定します。詳しくはここを参照

(6)PCを起動する

PCのUSBポートに下記を接続し、電源投入する。
  • USBメモリ(ISOイメージ)
  • USBメモリ(ファームウェア)
  • 無線LAN USBアダプタ

(7)インストールする

PCの電源を入れてインストーラが起動したら画面の指示に従ってインストール作業を進める。
  • ネットワークインターフェースはwlan0を選択する
  • その前にiPhoneのテザリングをONにしておく。
  • iphoneのSSIDが見つかったら、WPA2を選択してパスフレーズを入力する
これ以外の作業は普通のインストール作業と同じです。 ちなみにiPhoneテザリング時の通信量は数十MB程度でした。

2014/01/06

Debianのアップグレード(squeeze→wheezy)

自宅サーバで稼働しているDebianをアップグレードしたので、そのメモです。

■前提条件


ハードウェア: Intel D510MO
OS: Debian squeeze amd64

■参考文献


以下の文献を参考にしました。
Debian 7.0 (wheezy) リリースノート (64 ビット PC 用)
 -第4章 Debian 6.0 (squeeze) からのアップグレード

■パッケージの最新化


バックアップする前にパッケージを最新化します。
# apt-get update
# apt-get upgrade

■バックアップ


必要なファイルをバックアップします。

■アップグレードの準備


telnet接続、X window systemからの操作はダメとのことなので、サーバにディスプレイとキーボードを接続して直接ログインします。(X windowはインストールしていない)

★文字化けするので環境変数LANGを変更しておく。
# export LANG=C
★システムの状態をチェックする。
# aptitude
→ "g"を押して更新&インストールする。
# dpkg --audit
# dpkg -l | pager
# dpkg --get-selections "*"
# aptitude search "~ahold"
# dpkg --get-selections | grep 'hold$'
→以下の状態がないことを確認
 ・未完了のパッケージ (Half-Installed)
 ・設定に失敗したパッケージ (Failed-Config)
 ・hold 状態
★proposed-updates セクション
 →/etc/apt/sources.list ファイルに proposed-updates セクションがないことを確認。

★非公式なソースとバックポートパッケージ
 →該当なしを確認

★APT の取得先 (ソース) の準備
  • /etc/apt/sources.listを編集。
  • squeezeのある行をコピーして、squeezeをwheezyに置換する。
  • squeezeのある行は先頭に#を付けて無効化する。

■パッケージのアップグレード


# script -t 2> upgrade-wheezy_1.time -a upgrade-wheezy_1.script
# apt-get update
# apt-get -o APT::Get::Trivial-Only=true dist-upgrade
→空きスペースあり。

# apt-get upgrade
# apt-get dist-upgrade (エラーで止まったので-fを付けて再実行)
# apt-get -f dist-upgrade

■カーネルと関連パッケージのアップグレード


# dpkg -l "linux-image*" | grep ^ii
→あった。

再起動
# sync
# /sbin/telinit 6

2013/10/19

C言語とgnuplotでマンデルブロ集合を表示する

gnuplotを使うと結構簡単にマンデルブロ集合を表示することができます。OSはdebianを使用しています。

リスト1 mandelblot.c
/*
  マンデルブロ集合計算プログラム

 */
#include <stdio.h>
#include <math.h>

#define C0r     -0.743  // 計算する場所の中心座標(実数部)
#define C0i      0.1145 // 計算する場所の中心座標(虚数部)
#define VS       0.003  // 計算する場所の中心座標からの範囲(±VS)

#define NMAX     20000  // 計算の繰り返し上限
#define STEP     800.0  // 計算する刻み


double mandelbrot(double a, double b){
  double x = 0.0;
  double y = 0.0;
  double x1, y1;

  int n;

  for (n = 1; n <= NMAX; n++) {
    x1 = x * x - y * y + a;
    y1 = 2.0 * x * y + b;
    if ( x1 * x1 + y1 * y1 > 4.0) return log(n); // 発散
    x = x1;
    y = y1;
  }
  return 0; // 計算の繰り返し上限到達
}


int main() {
  double a, b;

  for (a = C0r-VS; a < C0r+VS; a += 2.0*VS/STEP) {
    for (b = C0i-VS; b < C0i+VS; b += 2.0*VS/STEP) {
      printf("%1.14e %1.14e %1.14e\n", a, b, mandelbrot(a, b));
    }
    printf("\n"); // これがないとgnuplotでエラーが出る
  }
  return 0;
}

リスト2 png.gnuplot (gnuplot実行スクリプト)
set term png size 900, 900
set output "mandelbrot.png"
set grid
set pm3d map
set size square
set palette defined (0 "#000000", 2 "#c00000", 7 "#ffff00", 9 "#ffffff")
splot "data.txt"

リスト3 コンパイル&実行
# cc -o mandelbrot -lm -O4 -Wall mandelbrot.c
# ./mandelbrot > data.txt
# gnuplot png.gnuplot

図1 実行結果(mandelbrot.png)
  • 計算する場所はリスト1のdefine文の数値を変えることにより可能です。
  • 色の変化を分かりやすくするため、Logスケールで表示しています。
C言語のほかにPythonとR言語で記述した記事もあります。詳しくは マンデルブロ集合 をご覧ください。

バーニングシップフラクタル

bsf.knit 今回は『バーニングシップフラクタル』についての備忘録です。 バーニングシップフラクタルとは? Wikipedia ...