免責事項

注意、免責事項について
・高電圧、大電流その他高エネルギを扱う実験を行う際にはくれぐれも安全に配慮し、細心の注意を払って行うようにしてください。
・当ブログの記事を参考にして発生した損害についてFEL研究室はいかなる責任も負えませんでご了承ください。

2018年12月15日土曜日

Aliで買ったATmega8が動いた

こんばんは。KKTの方です。
前回の続きで題名の通りパチもん(?)のmega8が動きました。

画像が90度回転させられてしまっていますが左が今回Aliで購入したチップで右が本物(たぶん秋月)です。前回書いた通りプログラム書き込みはできたのですが果たして動くのか。

タイマーモジュールでLチカしてみたところ問題なく動きました。
余談ですが、PINxレジスタに1を書き込むと対応するPORTxレジスタのビットが反転するっていう機能はAVRマイコン標準だと思っていたのですがmega8には無いんですね。あると信じ込んで動かないなぁと思っていたらデーターシートにはPINxは読み出しのみと記載がありました。
他のペリフェラルはまだ試してませんがこの感じだと動きそうですね。よかった。

それでは、今日はこの辺で
http://clap.webclap.com/clap.php?id=fellabo

2018年12月9日日曜日

Aliで買ったATmega8が届いた

こんにちは。KKTの方です。
特に進捗が無いので買い物記事になりました。

AliExpressで買ったATmega8が届きました。

静電気対策とかしてらっしゃるんですかね

近づいて写真取るのがめんどうだったので刻印が写っていませんが明らかに本物とは違うので動くか心配になってきました。

 試しに適当なソースを書き込んでみたところ、普通にシグネチャも返って来て書き込めました。普通に使えるじゃん

また後日他の個体やピン、ペリフェラルのチェックをしようと思います。

それでは、今日はこの辺で
http://clap.webclap.com/clap.php?id=fellabo

2018年12月7日金曜日

W5500モジュールを動かしてみる

ご無沙汰しております。KKTの方です。
季節の変わり目ですから体調を崩される方も多いかもしれませんが如何お過ごしでしょうか。私は既に2回くらい軽い風邪をひきました。

さて、世間はIoT一色ということで流行に乗って私もインターネットなるものに自作機器をつなぎたくなってきました。そこで、マイコン等で簡単にLANに繋げて遊べるものはないかと探していたところWiznetという会社からEthernetの便利なICがあったので紹介します。
W5500
https://www.wiznet.io/product-item/w5500/ 
ネットワーク初心者なので用語がいまいちよくわかっていないのですが、簡単に言うとW5500に対してSPIでいろいろ書き込んでやるだけでTCP/IPで他の機器と情報をやり取りすることができるようです。DIPパッケージは無く、QFPだけみたいなので今回はモジュール化されたものをAliで購入しました。激安でビビりました。
で、届いたのがこちら

いいじゃん。

本当はもうちょっと突っ込んだ記事を書くつもりでしたが力尽きたのでまた次回詳細は書こうと思います。ちなみに現在はATtiny13AでW5500と通信させて簡易httpサーバーにするところまでできました。

それでは、今日はこの辺で


http://clap.webclap.com/clap.php?id=fellabo

2018年9月16日日曜日

Orange Piで遊ぶ -i2c編-

なかたです。好物はOrange Pi。

今回はOrange Pi oneでBME280を使ってみる記事です。
とはいってもi2c-toolsインストールするだけです。

本編だけだと5行でいいので動作環境の話から入ります。

OS

OSはArmbianを使っています。
Orange Piの公式ページにも沢山OSがあるので用途に合わせてOSをダウンロードしましょう。

少し前は公式のOSはbaidu cloudからしかダウンロードできなかったり安定しなかったり色々問題があったみたいですが最近は結構充実してそう(?)

記事書く際に知ったんですがoneとかPCにもAndroid7.0のイメージが追加されててびっくりしました。


個人的にはOrange Pi oneについてはArmbianでいいんじゃないかと思ってます。
公式のUbuntuとかが安定してなかった頃から安定していて比較的ユーザーも多くトラブルシューティングがし易そう(個人の意見です)。

他試してみておすすめとか駄目なやつとかあったらコメントで教えてください



あると便利なパッケージ


ぶっちゃけパッケージについては必要なときに必要なのダウンロードしたらいいと思います。

個人的なおすすめはRaspberry Piのrpi.gpioの互換のopi.gpioとかですかね。
rpi.gpioを使って書かれたプログラムなら「import RPi.GPIO as GPIO」を「import OPi.GPIO as GPIO」にしてピンと配線だけ見直せばほぼ動くと思います。

ちなみにwiring piの互換にはWiringOPってのがあります。
こっちは割と有名なんでググったら導入法が日本語のページで出てくると思います。

GPIOの内訳

ググったらそれっぽい画像出ると思いますが一応公式のダウンロードページ貼っときます。

ついでにうちの子から読みだしたやつも貼っときます。
PhysicalとNameだけ見とけばいいと思います。
図のGPIOピンの右上に白色三角が見えると思います。そこがPhysicalの一番ピンです。
2番ピンはその下、三番ピンは一番ピンの左です。

… 5 3 1
… 6 4 2

こんな感じ。

おまけ

・Orange PiはAliExpressに公式ストアがあるのでそこから買いましょう。Amazonでは割高なため買わない事

・Orange PiにはRaspberry Piと違ってシリアル通信端子があり、USB接続してTeratermとかで開くと起動ログがみれるので起動しないときのエラーが見れる。
注意する点としてはシリアル通信速度を115200にすること

・Orange Pi oneの電源端子はPSPと同じなため百均等でも購入可。でも今時あんまり見かけないのでこれおすすめ。
ちなみに電源も百均等で売ってる200円のスマホの充電器で可。

・Armbianの初期設定一覧
言語設定
「dpkg-reconfigure locales」

タイムゾーン設定
「dpkg-reconfigure tzdata」

キーボードの言語設定
「dpkg-reconfigure keyboard-configuration」


本編

  1. Armbianが入ったOrange Pi one(以下OPIo)を用意します。
  2. 「$sudo apt-get install i2c-tools python-smbus」でこいつらをインストール
  3. BME280とOPIoを配線*1
  4. スイッチサイエンスさんが出してるサンプルプログラムを使う。*2
  5. うごいた!完!

*1
SCLとSDAはOPIoのSCLとSDAにつないで上手く動かなかったときはOPIoのSCL1とSDA1につなぐといいかも
*2
「$ git clone https://github.com/SWITCHSCIENCE/BME280.git
 $ cd BME280/Python27/
 $ python bme280_sample.py 」


2018年9月10日月曜日

Orange Piのススメ

お久しぶりです。
なかたです。好物はOrange Pi。

今回はSBC(Single Board Computer)の一つであるOrange Piの紹介の記事です。

SBCではRaspberry Piが有名で広く取り扱われています。Raspberry Piにはzeroから3までのモデルがあり、基本的に数字がでかいほうが強いです。
少し例外としてzeroは処理速度等は3にかなり劣りますが低価格、サイズの点で3を上回る手ごろさです。また、1を超える処理速度も持っているようです。*1

しかし、Orange PiはRaspberry Piのzeroと同価格帯で2を上回る程のスペックを持っています。*2

価格サイズ処理速度のどれを取っても優れていますが問題点もあります。
一つ目はOrange Piは日本の技適を取っていないため、無線lanが使えないという点です。
二つ目はRaspberry Piと比較するとユーザーが少なく、トラブルが発生した場合解決しにくいという点です。

一つ目の問題点は無線を搭載してないモデルのものを選べばよく(無線を搭載してない分更に性能の良いものが多い)、二つ目もまぁなんとかなります。

まとめると「お金に余裕があって初めてのSBC」という方にはやはりRaspberry Piがおすすめですが、「はした金でなんか面白い事したい」という方には断然Orange Piをおすすめします。

Orange Piには様々なモデルがあり、用途によって向き不向きがあります。

電子工作に使いたい人やとりあえず遊んでみたい人、初めてOrange Piを買う人にはOrange Pi one がおすすめです。これは有線LANのみ搭載で10$を切り、なおかつ安定したOSもあるとっても使いやすいSBCです。

その他ギガビットLAN搭載でAndroid7.0が動いたりもするOrange Pi one plus等様々なモデルがあるので興味を持ったら是非調べてみてください。


次回はOrange Pi oneでなんか作る記事でも書きます。


*1: » Raspberry PiとOrange Piのベンチマーク https://qiita.com/izuna/items/ad6b8270ddb6763ff509 参照
*2: » Orange Pi Zero のベンチマーク https://www.mztn.org/dragon/opizero1.html 参照


Web拍手返信定期
>なかたはNT京都に来ますか?
KKT曰く「なかたくんおると思ってた」らしいので多分行きました


>KKTの描いたうずまき
昨日KKTのおうちで遊んだけど相変わらず不審者してたからそのうち通報されてそう


>いつも楽しく肺炎してます。
病院いって



>なたかさん記事ありがとうございます!!!!!
!!!!!!!

こちらこそいつも閲覧ありがとうございます。
記事書いてなさ過ぎてGoogleアカウント忘れてました。

2018年7月1日日曜日

ハウス「完熟トマトのハヤシライスソース」を食べた

本日、ハウス食品の「完熟トマトのハヤシライスソース」を購入し作ってみました。ずいぶん前からあるハヤシライスのルウです。

300円くらいだったと思います。この1箱あれば10食分くらい作れるようです。今回は1/2箱分使い、指定の量(箱の裏側に記載)を無視した量の鶏肉(今日安かったので)・玉ねぎ・人参を使用し、さらにマッシュルームは入れずにソースを作ってみました。



 オイシェ・・・おいしい。トマトは隠し味という感じではなく、かなり主張が激しいです。トマトがすきな人向けかも。今回はケチなのでルウ1/2箱分使ってソースを作ったので完食まで数日かかる予定です。お肉やマッシュウーム(入れてない)や人参ととても合うソースだったので、おいしかったです。

参考文献
1.『ハウス「完熟トマトのハヤシライスソース」を食べた』 by 海苔巻の観察日記 http://alicetozoe.blogspot.com/2018/04/blog-post.html

それでは、今日はこの辺で

2018年3月26日月曜日

NT京都2018に出展してきた

お久しぶりです。KKTの方です。
ここで告知したかは覚えてないですが、題名の通りNT京都2018に出展してきました。

出展の様子です。
出展物はIHです。毎年同じような光景になってしまうのはなぜでしょうか。

なんか既視感のあるIH(おままごと用)。

来てくださった方、ありがとうございました。


Web拍手反応

>X線出しまくってると被曝するぞ
X線のやつやりたい

>山形県の魅力を教えてください!
山形県ってフルーツがおいしそう…と思ってググったところフルーツがおいしいそうです。

それではまた
http://clap.webclap.com/clap.php?id=fellabo

2018年2月4日日曜日

AVRで正確にタイマー割り込みを使いたい

お久しぶりです。随分と間が空いてしまったような気がします。
日付が変わったところですが、昨日は節分という祝日でした。豆まきをしたり、恵方巻きを食べたりするのが一般的ですが、私はスパゲッティを食べたことを報告しておきます。

AVRでタイマー割り込みを使う時に、普段はメインルーチンを回していて、一定期間ごとにタイマー割り込みが入るような構成になることがよくあると思います。しかし最近、そんな感じのプログラムを組んでいて、タイマー割り込みを使っているのに何故か僅かに割り込みの周期が遅れる現象に嵌ったので、原因と解決方法(?)を書き留めておくことしにしました。

まずATMega8にこんなアセンブラのプログラムを書き込んで走らせてみます。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
.include "m8def.inc"

//ATmega8 lfuse = 0xe1 = 0b1110_0001 hfuse = 0b1101_1001
//10MHzのセラロックで使いたいので lfuse = 1100_0011 hfuse = 0b1100_1001
//avrdude -c avrisp -P COM12 -b 19200 -p m8 -U lfuse:w:0b11001111:m -U hfuse:w:0b11001001:m

.EQU fclock = 10.0//[MHz]
.EQU freq = 15.734//[kHz]
//.EQU timervalue = (fclock/freq)*1000.0

//こうしたいがEQUシンボルは4バイトINT型
.EQU Htime = 635//[cycles]

.DEF temp = R16
.DEF temp2 = R17

.ORG $0000
    RJMP RESET ;各種リセット
    RETI//RJMP EXT_INT0 ;外部割り込み要求0
    RETI//RJMP EXT_INT1 ;外部割り込み要求1
    RETI//RJMP TIM2_COMP ;タイマ/カウンタ2比較一致
    RETI//RJMP TIM2_OVF ;タイマ/カウンタ2溢れ
    RETI//RJMP TIM1_CAPT ;タイマ/カウンタ1捕獲発生
    RJMP VideoOut//RJMP TIM1_COMPA ;タイマ/カウンタ1比較A一致
    RETI//RJMP TIM1_COMPB ;タイマ/カウンタ1比較B一致
    RETI//RJMP TIM1_OVF ;タイマ/カウンタ1溢れ
    RETI//RJMP TIM0_OVF ;タイマ/カウンタ0溢れ
    RETI//RJMP SPI_STC ;SPI転送完了
    RETI//RJMP USART_RXC ;USART受信完了
    RETI//RJMP USART_DRE ;USART送信緩衝部空
    RETI//RJMP USART_TXC ;USART送信完了
    RETI//RJMP ADC ;A/D変換完了
    RETI//RJMP EE_RDY ;EEPROM操作可
    RETI//RJMP ANA_COMP ;アナログ比較器出力遷移
    RETI//RJMP TWI ;2線直列インターフェース状態変化
    RETI//RJMP SPM_RDY ;SPM命令操作可

Reset:
    LDI R16,high(RAMEND)
    OUT SPH,R16//スタックポインタ上位設定
    LDI R16,low(RAMEND)
    OUT SPL,R16//スタックポインタ下位設定
//スリープ設定
    LDI temp,(1<<SE)//アイドル動作に設定する
    OUT MCUCR,temp
//タイマ設定
//16bitレジスタに書き込む時は上から
    LDI temp,high(Htime)
    OUT OCR1AH,temp
    LDI temp,low(Htime)
    OUT OCR1AL,temp
//TCCR1Aは初期値のまま
    LDI temp,     (0<<COM1A1|0<<COM1A0|0<<FOC1A|0<<FOC1B|0<<WGM11|0<<WGM10)
//タイマA比較一致有効
    OUT TCCR1A,temp
    LDI temp,(0<<TICIE1|1<<OCIE1A|0<<OCIE1B|0<<TOIE1)
    OUT TIMSK,temp
    LDI temp,

(0<<ICNC1|0<<ICES1|0<<WGM13|1<<WGM12|0<<CS12|0<<CS11|1<<CS10)
    OUT TCCR1B,temp
   
    LDI temp,(1<<PD0)
    OUT DDRD,R16//PORTDの0ビット目を出力に設定
    SEI

Main:
    //SLEEP//待ち時間はスリープにしておく
    RJMP Main

VideoOut:
    SBI PORTD,0//high
    CBI PORTD,0//low
    RETI


↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

改行が微妙に入ってしまって読みにくいことこの上無いのですがどうしたら良いのでしょうか。
まずReset:で色々な初期設定をして、Main:を無限ループさせて一定時間ごとに入るタイマー割り込みごとにパルスを出すようなプログラムです。SBI、CBI命令はそれぞれ2クロック掛かるので出るパルス幅は2クロック分、クロックが10MHzなので200nsということになります。タイマー割り込みの周期はHtimeというシンボルに入れたサイクル数になるようになっていて、クロックと周波数から自動で計算しようと思ったのですがコメントにもあるようにシンボルは4バイトのint型なので小数点以下の計算ができずだいぶざっくりなサイクル数になってしまうので諦めてサイクル数は手計算しました。Htimeに入れる周期は理想のサイクルから2か3くらい引かないと、タイマー割り込みの固定的な遅延時間で遅れるのでご注意ください、ってデータシートにも書いてると思います。
ラベルでピンと来た人もいらっしゃるかもしれませんが、これはビデオ信号の水平同期処理をタイマー割り込みでやろうとした時のソースの一部です。
とまぁタイマー割り込みで一定周期のパルスが出るだろうと動かしてみると下のような波形が出力されました。
なんとタイマー割り込みが入るタイミングが一定ではなくちょうど200nsずれて入っている時があるようです。これは遅延掃引で62.7us立ち上がりから遅らせている波形なのですが、ズレの部分の明るさがさほど変わらないことからたまーに遅れる(ないし早く割り込んでいる)どころでは無く頻繁に割り込み時間が変化してしまっていることもわかります。私はこれで相当悩んだのですが、結論から言うと原因は割り込みが入った瞬間に実行している命令の影響です。
データシート(https://www.mouser.com/ds/2/268/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_dat-1065398.pdf)の16ページを見ると割り込みの応答時間についての記述があります。
"... If an interrupt occurs during execution of a multi-cycle instruction, this instruction is completed before the interrupt is served. ..."
複数サイクル命令の実行中に割り込みが入ると、 命令が実行され終わってから割り込みが入ります。とのことです。
1サイクル命令なら何の問題もないのですが、RJMPやBR**系のジャンプが入る命令は2サイクル掛かりますし、SB**系やLPM等は3サイクルかかるものもあります。つまりこれらを実行中に割り込みが入ると、命令を実行し終えるまで割り込みが入れないので遅延が発生することになります。タイマー割り込みって言うんだったら勝手に正確に割り込みが入ってくれたらいいのにと思ったんですがそんなに甘くは無いみたいです。
上のプログラムは、割り込み待ちの時に回しているループのRJMPが2サイクル命令なのでRJMP命令を実行している時には2サイクル遅れ、RJMPを実行する前なら遅れないので設定数値通りと2サイクル遅れたパルスが出力されているようです。なおタイマー割り込みの周期を1サイクル小さくするか大きくするとこのズレは無くなります。
解決策としては、割り込み待ちの処理の命令を全て1サイクル命令にするというのが一番本質的な解決になるような気がしますがまず無理なので私はスリープを使うことにしています。スリープが許可されている状態でSLEEP命令が実行されるとプログラムはそこでスリープ状態に入り、以後の命令は実行されません。そこに割り込み等が入るとスリープから復帰し、また命令を実行し始めます。スリープから復帰する時には4サイクル掛かるのですが、逆に言えばスリープに入ってさへいれば遅延が4サイクルに固定されるということです。ですので、予めこのサイクルをタイマー設定の数値に計上しておいて、タイマー割り込みが入る前にスリープにさせることで設定値通りの割り込みが実現できるのではないかと思います。

Web拍手反応
>海外からのアクセスすごそう
ほぼ無いですね

> 綺麗に立方体ならんかったやつほんま草
あれステレオの片方だけ作ったところでやばいなって感じて放置してあります。時々鳴らしてみたりするんですがなんとも。

> 今更なんですけどHF SSTCの記事投稿の予定ってあるんですか?
そうですねぇ…。予定と言ってしまえばどうとでもなるのですが、今のところ無いです。書きたい記事ではあるのですがいまいち全体として再現性のあるものになら無さそうで結局写真集みたいになっちゃうかもしれません。

> 電子工作について質問しても良いでしょうか?
先日「矩形波」を「くけいは」と読むと知り、びっくりしました。そこで不安になったのですが、「方形波」ってなんて読むんでしょうか?是非ご教授頂ければと思います。
そんなこと聞かなくてもいいです。

> いっぱいのおっぱいがいる
> マ
 ル
  ク
   ス
> あけましておめでとうございます。今年もFEL研究室をよろしくお願いします。
> なかた
おめでとうございます。マルクスのコメントは黙殺することにします。

> NTでは何を展示するんですか
NT京都2018に出展することにしました。KKTで申し込みしています。出展内容としては超音波関係の何か(未定)を持っていく予定です。また完成したら報告します。間に合わなければIHかテスラ持って行きます()。

それでは、今日はこの辺で
http://clap.webclap.com/clap.php?id=fellabo