2017年4月17日月曜日

[UWP]RaspberryPi3にインストールしたWin10IoT Coreのスタートアップを変える

RaspberryPi に Windows10 IoT Core を入れてみた。


Windows10 IoT Coreのインストールまで


 前回は、OSのインストールからUWPアプリの開発Helloworldまで行いました。

  [UWP]RaspberryPi3にWindows10IoTをインストールする 

今回はその続き、作ったアプリのスタートアップさせるにはをやっていきたいと思います。
スタートアップするにはPCからWin10IoTCoreへリモートログインする必要があります。
まずはリモートログインの仕方から進めたいと思います。


リモートログインの仕方


 Win+Xキーを押して、Powershell(管理者)を起動します。

Win10IoTをインストールした時のPC名をminwinpc として話を進めていきます。

Pingチェック

まずは、Pingをやってみて返事が返ってくるかチェックします。

ping minwinpc

返事あれば次へ進みます。
返事がない時はネットワークの設定をチェックしてみてください。


信頼するPCに登録

これは一回やれば問題ないです。しなかった場合、接続拒否になります。

net start winrm
Set-Item WSMan:\localhost\Client\TrustedHosts -Value minwinpc


リモート接続開始


Enter-PSSession -ComputerName minwinpc -Credential minwinpc\Administrator

上記コマンドを入力してパスワード入力画面が出てきます。
ログイン成功すると、

[minwinpc]: PS C:\Data\Users\administrator\Documents>


コンソール画面に上記メッセージが表示します。

スタートアップの登録と戻し方
 試しに最初から入っているHelloworldをスタートアップに登録してみます。

  iotstartup add headed Hello

 最初に表示してたダッシュボードに戻す場合は、

  iotstartup add headed IoTCoreDefaultApp

 このコマンドで元に戻せます。


これでもうWindows10 IoT Coreの開発~専用端末化までできるようになりました。


最後にリモートログインした時に使うコマンド一覧を載せておきます。

コマンド一覧


デバイス名変更 setcomputername 新しい名前

アプリ一覧表示 iotstartup list

スタートアップアプリの登録 iotstartup add headed Hello

スタートアップアプリを戻す

 iotstartup add headed IoTCoreDefaultApp

再起動 shutdown /r /t 0

参照URL






2017年4月15日土曜日

FreeRTOS入門(1)

FreeRTOS入門(1)

RTOSって何?

身近なOSであるWindowsやMACのデスクトップを見てください。CPUは1つなのに複数のアプリが同時に動いていますよね。
これがOSの役割でマルチタスクという機能です。

 昔のWindowsなら何か1つ固まると全体がフリーズして何も操作できなくなる事態がありましたが、RTOSだとフリーズしません。
こんな事を書くと
今あるすべてのOSはRTOSであるべき

と思ってしまいますが、そうでもないんです。
そのあたりの詳しい話は後の方で説明します。

 この記事を見る方はマイコンで利用を想定していると思いますので、RTOSの定義について少し触れたいと思います。
そもそもマイコンOSとWindowsOSを比較してもマイコンにはUIが無いし、スケール感が異なるのでイメージが結びつきません。

そこで、
  • デスクトップ=マイコンボード
  • アプリ=マイコン
  • 機能=タスク
というように言葉を定義すると、

マイコンボード上に様々なICやCPUが乗っていて、それらはいろんな機能が入っている。

こう考えれば、マイコンOSの実態が見えてきてイメージしやすくなります。

マルチタスクの種類について

最初の方でもう少し掘り下げて説明しときます。
マルチタスクには
  • プリエンティブ
  • ノンプリエンティブ
という2つの種類があります。

プリエンティブとは、ハードウェアタイマーを使ってマルチタスクを行う方法で、
ノンプリエンティブとは、タスク内部で明示的にタスク切り替えタイミングを指示してマルチタスクを行う方式です。

両方ともメリットデメリットがあります。
プリエンティブだとタイマー周期に依存して処理を切り替える

 メリット

  • 確実に同じ周期で処理が開始される

 デメリット

  • 本気でリアルタイム処理したいものが処理できない
  • タスク別にPC・レジスタ退避など行うので処理コストがかかる。

ノンプリエンティブだとタスク切り替えはタスク依存なので

 デメリット

  • タスク毎に均等な処理時間が回せない
  • 本気でリアルタイム処理したいものに処理時間が渡せる

 メリット

  •  スケジューラは非常にシンプル

相反する関係になっています。
もちろんRTOSでどちらを使うか選べるので、システムに合わせて選びましょう。

タスクの定義

RTOSでタスクを作るといってもどの程度の粒度が最適なのか人それぞれ見方が変わってきます。何かルールがあればそれに沿って従うまでなんですが、何もない時は単機能だけに絞っておくとよいです。
単機能の例
  •  タスク1=500ms周期でLチカさせる
  •  タスク2=シリアル通信する
  •  タスク3=LCD制御する
     ・・・
このように粒度が単機能に絞ってあると、他のプロジェクトで似たような処理があったらコピペできるので生産性はUPします。

もちろんOS無しの場合も移植できますが、タスクの粒度のように均一でないケースがほとんどです。

コピペしようにも他のいらない処理が入っていたり、、
1処理で完結しないで他の処理に依存していて芋づる式になっていたり、、

素直にコピペで動くようなものが少ないと思えます。

タスクの書き方

ここではOS無しとRTOSを使った場合を比較しつつ実装例を書きます。

タスクの粒度は両社どちらも同じものだとします。

OS無しの場合

タスクの中をswitch-case文で軽い処理単位に分割(いわゆるシーケンス処理)
 それをメインループでタスクを順番に処理する。
 これがノンプリエンティブ型です。
 プログラム内部で1処理行ったら抜けて次の処理へと渡していきます。
 処理コストは関数コールとSwitch~Case部分になります。

コード例:
void main() {
    init();

    for( ; ; ) {
        task1();
        task2();
        task3();
    }
}

RTOSを使う場合

タスク単位に何も気にせずそのままコードを書ける。
 これがプリエンティブ型です。
 タスクの切り替えはハードウェアタイマーの割込み処理で行います。
 もちろん切り替える際は、タスク毎にレジスタ、プログラムカウンタなど回避するのでその分コストはかかっています。

コード例:

void main() {
    xTaskCreate(task1, "task1", 128, NULL, 1, NULL);
    xTaskCreate(task2, "task2", 128, NULL, 1, NULL);
    xTaskCreate(task3, "task3", 128, NULL, 1, NULL);

    vTaskStartScheduler();
    for( ; ; ) ;

見慣れないものはFreeRTOSのAPIです。
タスクを作る。スケジューラを動かすの2つをやっています。


ちなみに国産OSのTRONと呼ばれるものも基本同じ作りです。ほかに独自の機能が備わってたりして便利だったり複雑だったり好みが出てくる部分ですね。

TronOSはがんばってほしいけど、1000円くらいのボードで気軽に試せる環境がないのでホビーユーザ数が増える事はないですね。。せめてArduinoスケッチでライブラリも実行できるところまで来たら触れるのにもったいないです。

2017年4月14日金曜日

[UWP]RaspberryPi3にWindows10IoTをインストールする


RaspberryPi3上で動いてるWindows10IoTの起動画面

Windows10IoTのメリットは?


 Win10IoTが出た当初はWindowsサービスをいじったり手間のかかるもので、

環境構築でこんな手間必要?

って思うくらい最初のビルドを行うだけで数十分かかるものでした。

そういったこともあってすべての機能が解放されてるRaspbianを使う方が一般的でした。
2017年Creators UpdateでWindows10IOTもバージョンアップされたようです。
音声認識のCortanaに対応したようなので、「Ok Google」や「Amazon Echo」のような事が自分で作れるようになるみたいで、

これだけでご飯3杯いけるくらい期待値大です。

使うメリットが出てきました。(音声認識を使うにはオンライン環境が必須)


環境構築


Step1.Windows10IOTイメージをSDカードに入れる



にアクセスします。

Windows10IOTダッシュボードをダウンロードして実行します。
どのSDカードにインストールにしますかと聞かれるのでインストールするドライブを選択してボタンを押すと、イメージのダウンロードからインストールまで自動でやってくれます。

今回使うテスト環境は、
RaspberryPi3とラズパイ専用7インチパネルを使いました。
キーボードは静音のものを使っています。
時々家で飼ってる猫が膝で寝てくるのですが、タイプ音がうるさいらしくフニャーって怒られるので、マウスも静音を使ってます。







Step2.最初のセットアップを行う

 出来上がったSDカードをRaspberryPi3に入れて実行します。

 Windows10をインストールした時のように、最初にネットワークの設定やMSアカウントの入力などが求められます。
無線LANの設定もできるので、USBキーボードを繋げて設定します。

まだまだ開発途上のようで

日本語と英語が混ざっていたり、
時計が日本時間(GMT+9)に設定できなかったり、
キーボード配列がUSだったりしますが

気にせず進めてください。
日本語・英語表記は治るまで待ちます。
唯一キーボードの設定は後で変更できます。

時計設定は、コマンドラインを開いて
・タイムゾーンの確認
 tzutil /g

・タイムゾーンを日本時間にする
 tzutil /s "Tokyo Standard Time"

・タイムゾーン一覧表示
 tzutil /l

で行います。


過去にこういう不具合を報告した事があるんですが、個人の意見なんてミジンコ以下で全く取り合ってくれなかったです。
なので、
治るまで待つより使い物になるまで無視

できないものはできないんだって気持ちが大切です。


Step3. HelloWorld

 チュートリアルにボタンを押すだけで遊べるアプリがいくつかあるので、それでテストできます。

Step4.VisualStudioで新規プロジェクトを作って実行する

 UWPなら何でも良いみたいなので、今回は

  クロスプラットフォームアプリ(Xamarin.Formsまたはネイティブ)

を選びました。
新規作成するとUWP、Android、iOSのサブプロジェクトが次々と作ってくれます。
UWPに関しては恒例のライブラリエラーが出るので、
プロジェクトが開いたらまずは

ファイル→すべて保存

その次に

Nugetのパッケージ管理→すべて更新

新規プロジェクトした後に必ず行うおまじないです。

更新が終わったらいよいよ実行します。

ビルド設定で
 AnyCPU→ARMに変更
 Device→リモートコンピュータを選択して接続するデバイスを設定

を行い、
リモートコンピュータボタンを押すとRaspberryPi3環境にイメージが転送されます。

UWPで毎回思うんですが、
最小サイズが20MBあるんです。

デバッグ開始まで
 無線LANの場合は約30秒
 優先LANの場合は約20秒

くらいかかりますが、
しばらくするとXamarinアイコンのスプレッド画面が表示された後にアプリが起動します。



まとめ

 UWPアプリなら何でも動くようです。
Xamarinが動くんだからAndroidの組込みにも対応できそう。
デバッグはPCで行って、実機は簡単な動作確認で済むようなテスト計画はあらかじめに決定しとくと楽かも。
今回のCreators updateで使える所まで来てるが、時計設定はどうにかならないかな。。
あと再起動ボタンは地雷ボタンです。



参考URL



続き


 [UWP]RaspberryPi3にインストールしたWin10IoT Coreのスタートアップを変える 




2017年4月11日火曜日

[STM32]STM32マイコンの選び方

マイコンの型番一覧


STM32マイコンって安くて高性能

Arduinoを使っている人はそのままアップグレード版として使ってもいいんじゃないかってくらい高機能マイコンです。
FreeRTOSを使えばすべての機能をフル活用できるのでポテンシャルはかなり高い。

そんな中、マイコンボードを買うにあたってまずは値段、次はピン数やROM容量が気になりはじめ48pinじゃ足りないって自体に陥ってしまったので一通り見てすぐわかる一覧表をまとめました。


型番早見表

103T* 36pin
 103C* 48pin
 103R* 64pin
 103V* 100pin
 144Z* 144pin


*の部分はROM容量
 4=16kB
 6=32kB
 8=64kB
 B=128kB
 C=256kB
 D=384kB
 E=512kB
 F=768kB
 G=1MB

ざっくり見るなら、
 安いマイコン:STM32F103C8T6(F103Cシリーズ)
 ピン数多め:STM32F103R8T6(F103Rシリーズ)

容量不足に思ったら、「*」印の8がBになる。


マイコン仕様はドキュメントは参考リンクを見てください。

参考リンク

http://www.st.com/en/microcontrollers/stm32f103.html?querycriteria=productId=LN1565

[Win]開発環境周りの整理と最善の選択肢とは



現在のプラットフォームはまさに戦乱時代!

昔は開発環境自由で悪い事もかなり沢山あるけど選択肢が少なくて良かった。。
今は、
ワンソース・ワンバイナリでできるよ!この言語ならね。俺んとこ来いよ!

という思想の下でプラットフォームの囲い込み合戦が開始されている。

今まではデスクトップ最強主義でパソコン=デスクトップという概念から、
技術の進化で小型化が進んでスマホ・タブレットという分野が新しく開拓された。
この先陣を切ったのがapple。
WindowはフォントボロボロだけどAppleはしっかり美しさを全面に押し出し高級感とともにイメージ戦略に成功した感がする。

一方Androidは2判煎じだが、開発者向けの費用は安く参入できるようコミュニティの活性からスタートして、未完成ながらもバージョンアップを繰り返し、速度で押し切りシェアを獲得したが、やや端末の屍はやや多い感がする。

この分野で最高の地位を確保していたMicrosoftだが、大企業病が発症したのかすべてにおいて出遅れてしまい、ハンズオン分野のシェアがほぼ埋まってしまって割って入る隙間が無くなってしまった。
未開拓領域でいえば新興国向け市場だが、ここに割り込んでも多勢に無勢。
何か挽回の策を講じる必要がありそうだ。

最後にLinux。
Ubuntuが作ったGnome3はコミュニティで賛同が得られず、今年で幕閉めとなってしまった。
悲しい結末だけど、ようはエコシステムなんだよね。

人は儲かるか儲からないかで動く人は少なからずいる。
そのプラットフォームで活動することで何らかの対価が得られなければ開発者たちは新たな新天地を求め去って行ってしまうんだろう。

という事で、今回のテーマはプラットフォーム。

UWPについて

WindowがinRT系列でUWPを作って、WinストアでWindows製品の様々な機器で使えるよというエコシステムを作った。
このUWPが若干曲者で、過去の資産をバッサリ切ってリファクタリングと称して現代にあったスタイルに開発環境を再構築しているようだ。
昔からの開発者にとって迷惑だが、時代の流れなんだろう。
というか、レガシー世代からすると新しい世代が開発すれば気にならないので若い人たちは技術の習得にいそしんでほしいといったところか。


プラットフォーム選びについて

色々あって迷う。
そんな迷う時間がもったいないので、各OSやターゲット別の一覧表を作ってみた。



Windows開発環境から見た開発環境の図

これからアプリを作りたいなって思った時、どこをターゲットにするかを考える必要がある。そこでいろんなケースを書いてみる。

VisualStudio環境で
  • ゲームを作りたい。→Xamarin
  • いろんなWindows製品で動かしたい。→UWP
  • Win7とかでも動くWindowsデスクトップアプリが作りたい。→WinForm
  • モバイル開発がしたい→Xamarin
  • OS問わずデスクトップで動くアプリを作りたい。→Electron
もちろんCordovaやASPや.Net coreなど他のケースも色々あるが、個人的にいろんな開発環境を触ってみて安定していて比較的迷わず素直に作れるものだけを選別してます。


いろんなケースを書いてみてもまだ見づらいですね。。
さらにおおざっぱにまとめると、
  • デスクトップ=Winform、UWP、Electron
  • モバイル=Xamarin、Android、Swift
  • IOT=なんでもよし
こんな具合です。
参考になっていれば嬉しいです。

2017年4月9日日曜日

Dockerの使い方

今回はコマンド編



Dockerって本当に便利?

前回はインストールを行い、軽くコマンド操作してDockerの使ってみてどういうものが分かってきた。
でも分かってくると、

 これってDockerじゃなくてもVMWareやVirtualBoxのようなVMでいいじゃん

って思うようになった。
この疑念は次の文章で解消される。

VMを使うときってイメージのバックアップや起動・停止もランチャー操作で簡単にできるし不便な事は何もない。
DockerのGUIは使った事ないけど、ネットワークの設定はHyper-VだしVMとやってる事はほぼ同じ。なのになぜ騒がれているんだろう。
この疑問はDockerって新しい技術は使われていないという部分を意味している。

他、様々な情報をまとめていったら見えてきた答えが1つある。
VMとDockerの決定的な違いは

DockerはGitHub技術がベースになっている事

これに尽きる。

VMの場合はOSイメージをダウンロードしてから仮想環境のイメージを作ってパッケージインストールする一連の手間と時間がかかる。
一方、Dockerの場合は、

Dockerイメージを取ってくるだけ。

いいものができたらGitHubにアップロードして貢献することもできる。
Dockerコミュニティーは楽させようと献身的な人たちやドヤ顔( ・´ー・`)が大勢いるので、Gitな我々(Hub)はその恩恵にあずかれる分けである。


Dockerの概要

今日インストールばかりだけど、Dockerを色々触って感じたまま図にしました。
間違ってる箇所もあるかもしれませんが、大体こんな感じ。

Dockerの全体図

Step1.GithubからDockerイメージをPullする。
 Step2.DockerイメージをRunする。(コンテナ生成)
 Step3.コンテナをいじくる。(1サービス1コンテナ単位)
 Step4.いじくったコンテナをイメージ化する。(Step2へ)

今までならホストOSの中にパッケージを詰め込んで環境構築して、
その中に複数サービスを入れてバージョン管理を気にしなければならなかった。
Dockerの場合はコンテナにパッケージを詰め込むので、

 1コンテナ=1サービス

という考えになってくる。
つまり、Dockerのマスコットキャラであるクジラの絵のようにホストOSにコンテナを積むという感覚になり、パッケージ依存もコンテナ内で完結しているから他サービスに影響しない。
つまり便利である

覚えておいた方がいいコマンドについて

ざっと下にコマンドを並べてみました。
上の図をみて分かる通り、

GitHub ⇔ ローカルPC(Dockerイメージ ⇔ Dockerコンテナ)

というように3つのブロックに分かれている。

Dockerコマンド体系はごった煮状態で区別つかないので分割してコマンド一覧を書きました。

Dockerイメージ系コマンド一覧

dockerイメージ検索

 docker search [検索ワード] 

dockerイメージ取得

 docker pull [dockerイメージ名]

取得したdockerイメージ一覧

 docker images

取得したdockerイメージの削除

 docker rmi [dockerイメージ名]

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

コンテナ系コマンド一覧

 

コンテナ作成&アタッチ

 docker run --name コンテナ名 -it [dockerイメージ名]

コンテナ一覧

 docker ps -a

コンテナ削除

 docker rm [コンテナ名]

コンテナにアタッチ(exitすると停止)

 docker attach [コンテナ名]

コンテナにアタッチ(exitしても起動状態)

 docker exec [コンテナ名]

コンテナ起動

 docker start [コンテナ名]

コンテナ起動&アタッチ

 docker start -a [コンテナ名]

コンテナ停止

 docker stop [コンテナ名]

コンテナ即時停止

 docker kill [コンテナ名]

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

コンテナ→イメージ化


コンテナ変更内容

 docker diff [コンテナ名]

コンテナのコミット(イメージ化)

 docker commit [コンテナ名] [作成するイメージ名]

変更履歴

 docker history [コンテナ名/イメージ名]

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

Dockerイメージをアップロード


githubにログイン

 docker login

githubにプッシュ

 docker push [イメージ名]



コマンド一覧を書いて思ったこと


 Dockerイメージとコンテナの仕組みさえ分かってしまえば、
  • パッケージ管理(apt-get, yum, npmなど)
  • GitHub
  • Linuxコマンド
を使ったことがあれば感覚で使えるようになっていた。
あとはオプションコマンド。
コマンド毎に色々あるし、ここはやはり人海戦術的に

  使って覚えるしかないね。


参考URL







2017年4月8日土曜日

Windows上にDockerをインストールする(最新)



Dockerをインストールする前に


 乱立して開発終了したパッケージ群はインターネット上から消しといてくれよ…
Boot2Dockerインストールしちゃったじゃん!(泣)
DockerToolboxというのもあります。
これは使えるのだろうか、、Boot2Dockerの件もあって疑心暗鬼です。
色々調べた結果、、、
2017年4月時点、Hyper-Vが使える環境ならVirtualboxとか不要になったので、まさにBoot2Dockerと同じ末路を辿ってました…

あえて声を大きくして言っておきます。

信用していいのは、オフィシャルだけです!


インストール手順

いつも通り要点だけ書いていきます。


Step1.必要なパッケージをインストールする。

筆者は最初にBoo2Dockerをインストールしてしまったので、VirtualBox、Gitがインストールされている状態です。

Hyper-V有効にする方は2つのみ

 https://docs.docker.com/docker-for-windows/install/
 https://www.realvnc.com/download/viewer/

Hyper-V無効にする方は以下のパッケージも追加。

 https://git-for-windows.github.io/
 https://www.virtualbox.org/

Dockerをインストールした後Hyper-Vを有効にするかって聞かれるので
Windows 10 pro以上なら有効にできます。

有効にするとDockerがネイティブに動いてくれるのでVirtualboxは不要になるようです。
もし無効でしか使えない場合は、Docker-machineでVirtualboxのホストOSを作成します。

参照:https://github.com/docker/machine

2017年4月時点の話だと、イメージをdocker-machineで作ります。

> docker-machine create -d virtualbox default
> docker-machine ls
これで仮想OSが動いていればOKです。

動作確認は、
docker run busybox echo hello world
でhello worldってエコーが返ってきてれば成功です。



Step2.Dockerを使ってみる

一番わかりやすそうなもので、デスクトップ環境のついてるUbuntuなDockerを使ってみます。

まずはコマンドプロンプトを起動して、

> docker pull Ubuntu
> docker run -I -t -p 5901:5901 Ubuntu


これでもうSSHログインでUbuntuに入ってます!
しかもRoot権限で。



Step3.パッケージのインストール

Linuxインストールしたらまず何をやる?
答えはアップデート。

# apt-get update
# apt-get upgrade -y
# apt-get dist-upgrade -y


次にデスクトップ環境とリモートデスクトップを入れる。

ここで注意、
最初vncじゃなくxrdpを入れようとしてました。
よくよく考えてみるとホストWindows自身もリモートデスクトップ接続できる状態なので
ポート変えないとぶつかる事態が発生するので断念してます。

# apt-get install vnc-server -y
# apt-get install lubuntu-desktop lxde ibus-anthy -y



Step4.リモートデスクトップでログイン

RealVNCでログインしてみてください。
 これで好きにLinuxデスクトップ環境で遊べるようになりました。
 変なアプリを入れたりして汚れても大丈夫。
 Dockerイメージを削除して新しいDockerイメージを構築しよう。

Boot2Dockerをインストールしたが動かない

興味本位で手を出してしまったDocker

Dockerインストール周りってバージョン依存が激しくて簡単に動くものではないんですね。。

インストール方法からハマりどころまで記事を書いた後に気づいたのですが、

Boot2Dockerは非推奨のようです。。


Boot2Dockerを起動すると、DockerMachineにすぐ切り替えてくれってメッセージが出てきます。

このDockerMachineというのもちょっと訳あり(意味深)なんですけどね、
詳しくは別の記事に書きましたので、↓こちらを見てください。
 http://ivis-mynikki.blogspot.jp/2017/04/windowsdocker.html



以下の内容は間違っていませんが、使えない情報ですが、
今後検索で見てきてくれる人の気づきの為に残しておきます。

Docker環境を構築


 いつも通りに淡々と要点だけを説明していきます。

Step1.Boot2Dockerをダウンロードしてインストールする。

https://github.com/boot2docker/windows-installer/releases

Step2.Boot2Dockerを起動させる

インストール完了後、デスクトップ画面上に
「Boot2Docker Start」アイコンが出てくるので実行する。

Boot2Docker Startを起動

Step3.動いているかチェックする

コマンドプロンプトを起動してください。
 (WIN+RショートカットキーからCmd起動)

「boot2docker status」

と実行して、コンソール画面上に

 poweroff

って出てた方、残念です。
うまく動いてないので次を読んでください。

 running

って出てた方、うまく動いている方はここで終了です。
起動した画面が常時表示されて(邪魔)いることでしょう。

Step4.VirtualBoxを最新版にアップデートする。

デスクトップ上にVirtualBoxアイコンがあるのでダブルクリックしてください。
ランチャー画面でますでしょうか。

きっと出ません。

そうです。度重なるWindowsのアップデートで動かなくなっています。
最新版にしましょう。

 https://www.virtualbox.org/wiki/Downloads

終わったらStep2に戻ってください。

インストールさえ終われば素敵なDockerライフが待ってると思います。


2017年4月7日金曜日

初めてのKicad(覚えとくと楽な事、超基礎編)

Kicadを使う理由

仕事で訳あってKicadを使うことになったので、チュートリアルを見ながら操作した時に
これは覚えておいた方が良いという内容のものをまとめておきます。

kicadの全体の流れ

①作りたい回路の資料を集める。
②回路設計(sch)を行う
③パターン作成(pcb)を行う
④ドリルデータ、ネットリスト・BOMリストを出力する。
⑤基板製作サービスに出す。

基本的な操作

  • 行いたい操作を選んで画面上をクリック。
  • 部品の編集をしたい時はマウスカーソルを合わせて「E」キー
  • 部品の移動をしたい時はマウスカーソルを合わせて「M」キー
  • 削除したい場合は右ツールバーからゴミ箱を選んで削除したい線や部品をクリック

回路設計するときに覚えておくと便利な事メモ

  • デザインルールを設定する。
  • 図面ヘッダの編集はファイル→ページ設定。
  • 操作方法は、やりたい事を選ぶ、配置位置を指定する、線を繋げるの3操作が鉄板。
Kicadを使うならこの3つの操作を覚えておけばおk!


コンポーネント作成

 大体の部品は揃っているので、まずはネット上で検索!
探してもなければ作って、できればGitHubに公開って流れで。
  1. SCHを開いている時に、ツールバー「コンポーネントライブラリエディタ」を開く
  2. 左ツールバでインチを選択しておく。
  3. 上ツールバーから「新規コンポーネントを作成」を選択。
  4. 中央に文字がごちゃっと重なっているので、1つずつ選んで移動させる


参考URL

https://sites.google.com/site/vita0117kicad/
 Kicadチュートリアル

https://sites.google.com/site/vita0117kicad/
 Kicadチュートリアルメモ(動画リンクあり)

https://github.com/musa/kicad-library
 部品ライブラリ



2017年2月14日火曜日

バイナリ数値2進数にある1の数をカウントするプログラム

単純に1ビットずつビットマスクして計算するのもわかりやすいが
ビットカウントする計算式があるのでサンプルコードを書いておきます。





//1の数を数える
static int bitCount(ushort value)
{
    value = (ushort)(value - ((value %gt;%gt; 1) & 0x5555));
    value = (ushort)((value & 0x3333) + ((value %gt;%gt; 2) & 0x3333));
    value = (ushort)((value + (value %gt;%gt; 4)) & 0x0f0f);
    value = (ushort)(value + (value %gt;%gt; 8));
    return value & 0x1f;
}

static List%lt;int%gt; counts = new List%lt;int%gt;()
{
    0,//0
    1,//1
    1,//2
    2,//3
    1,//4
    2,//5
    2,//6
    3,//7
    1,//8
    2,//9
    2,//A   1010
    3,//B   1011
    2,//C   1100
    3,//D   1101
    3,//E
    4,//F
};


static void Main(string[] args)
{


    for (int i = 0x0; i %lt;= 0xffff; i++)
    {
        var a = bitCount((ushort)i);
        var b = counts[(i %gt;%gt; 12) & 0xf] + counts[(i %gt;%gt; 8) & 0xf] + counts[(i %gt;%gt; 4) & 0xf] + counts[i & 0xf];
        if (a != b) throw new Exception(i.ToString());
    }
}

2017年1月31日火曜日

ブレゼンハムアルゴリズム

アルゴリズムの紹介はWikipedia参照。

主な使い道は線を描画するときが基本的な使い方ですが、

高速にX-Yで応答曲線を得たい時などにも使えます。




        static void line(int x0, int y0, int x1, int y1)
        {
            int dx = x1 - x0;
            int dy = y1 - y0;
            int e2;
            int err;
            int sx = +1;
            int sy = -1;
            if (0 > dx)
            {   //反転(dxは正の値にする)
                dx = -dx;
                sx = -1;
            }
            if (0 < dy)
            {   //反転(dyは負の値にする)
                dy = -dy;
                sy = +1;
            }
            err = dx + dy;
            while (x0 != x1 || y0 != y1)
            {
                output(x0, y0);
                e2 = err << 1;
                if (e2 > dy)
                {   //X軸を動かす
                    err += dy;
                    x0 += sx;
                }
                else if (e2 < dx)
                {   //Y軸を動かす
                    err += dx;
                    y0 += sy;
                }
            }
        }


2017年1月25日水曜日

平方根を使わずに斜辺の長さ=√(A*A+B*B)を求めるMoler-Morrison Algorithm

C言語で主にマイコン用途で三角形の斜辺の長さを平方根使わずに求めたい人向けの情報です。


// sqrt(a*a+b*b)の計算
float molar_morrison(float a, float b)
{
 const int ITERATION_NUMBER = 3;
 int i;
 float tmp;
 float s;

 if (0.0f $gt; a) a = -a;
 if (0.0f $gt; b) b = -b;
 
 if (a $lt; b)
 { //swap
  t = a;
  a = b;
  b = a;
 }
 if (0.0f == b) return 0.0f;
 
 for (i=0; i$lt;ITERATION_NUMBER; i++){
  s=(b/a)*(b/a);
  s/=4+s;
  a+=2*a*s;
  b*=s;
 }
 return a;
}






平方根を求める高速アルゴリズム


C言語で主にマイコン用途で平方根の計算を行いたい。
もしくは、精度悪くてもいいので高速に行いたい人向けの情報です。



    class Program
    {
        static void Main(string[] args)
        {
            sqrt(3, 20);
            Console.ReadLine();
        }
        static float sqrt(float value, int count)
        {
            float value2 = 2.0f * value;
            float result = 1.0f;
            while(0 < count--)
            {
                //ニュートン法で平方根を求める
                result -= (result * result - value) / value2;
                Console.WriteLine($"==>{result}");
            }
            return result;
        }
    }



参照URL
http://math.stackexchange.com/questions/296102/fastest-square-root-algorithm

Androider