ラベル picマイコン の投稿を表示しています。 すべての投稿を表示
ラベル picマイコン の投稿を表示しています。 すべての投稿を表示

2019年2月17日日曜日

PICのPWMで音楽再生2

前回、古いPICマイコンで大惨事になったので、比較的新しいPICで挑戦することにした。
PIC16F1619というもの。


3.3Vで動くしPIC内蔵OSCが32MHzまでいけるので部品点数がかなり減った!!
あとは
  • 乾電池で動くようにする
  • ボタン操作などで再生を切り替える
  • LEDなどの装飾
  • いい感じに収納する
をすればオモチャとして使えると思う

ソフト

ソフトの書き方も今風のやり方?にした。
MCC(MPLAB® Code Configurator)というもの積極的に使用する。
チュートリアル
http://microchipdeveloper.com/mcu1101:start
https://www.microchip.co.jp/download/dl_download.php/ID=17399660df745a6b64cd99d30b56a30b809e6694/
が大変参考になった。
日本語の情報はうまいこと見つけられなかった。
みんなArduinoとかSTMに移行したのかな。寂しいね。

MCC

基本的には、前述のチュートリアルの通り。
MCCプラグイン使用時は以下の感じ


困ったこと

PIC16F818のときには使いたい機能とピンに制約があったのだけど、
こちらは、ある程度自由に割当ができる。その分、悩むことも多い。。。
ファイルが自動生成させるので、それに従ってコーディングする必要がある。
統一した書き方ができて良いのだけど、ちょこっとしたものを書くのに、複数ファイルを行ったり来たりするのは、頭が付いて行かない(笑

良いところ

ピン割当がビジュアライズされてわかりやすい。
また、UARTの通信速度やタイマーやPWM設定で計算がかなり不要になった。

移植

基本的には、MCCのおかげであまりマイコンの差異を意識しなくて済んだ。
クロックが32MHzになったけど、TMR0の周期は8KHzと指定すればレジスタの設定を計算してくれるし。
SPIのクロックがOSC/4なので8MHzになったので、読み込みに余裕が生まれたはず。
20MHzの時は、コマンド+アドレス 計4B データ8Bで合計12Bを読むのに約273usとなった。
データ1Byteあたり約34usなので、約29kHzだった。
一方、32MHzになったので、単純に5/8・・・約170usになると思いきや、約102usになった。なぜ??
データ1Byteあたり約13usなので、約78kHz。


なので、音源のサンプリングレートを16kHzにしてみた。
すごくクリアになった・・・。
PWMが31.25kHzなので、32kHzにはできないね。どんな感じになるかは試してみたいけど。
ちゃんと計算してなかったけど、記録可能時間は、
2MByteのフラッシュ(8bit210241024 = 16,777,216bit)なので16,777,216 / (8bit16kHz) = 131.072s 約131秒・・・2分11秒くらい。

2019年2月7日木曜日

古いPICのPWMで音楽再生

子供用の音楽が鳴るオモチャとか作れたら素敵やん。と思って
本当に軽い気持ちで手を出してしまった。


だって、他の方はシンプルに出来ているんだもん。。。
http://manpuku-koji.hatenablog.com/entry/2017/11/23/104741
http://www.asahi-net.or.jp/~rn8t-nkmr/family/pic/vc/index.html

動機

FONから剥ぎとった2MBのフラッシュメモリが何個か余っているので、
有効活用できないかと思った。だって2MBだよ2MB!音楽なら1曲くらい入るんじゃない。
というもったいない精神から始めてしまったので、軽いはずの試作が上の写真みたいに大惨事になった。
なぜかというと・・・
  • 使ったPICマイコンが3.3Vに対応してなかった。5Vと3.3Vが必要
  • 5V->3.3V変換回路が必要
  • 内蔵OSCは8MHzが上限で、PWM周波数が足りない。 外付けOSC追加
  • 音が小さかったので、増幅追加
    とほほ
3.3V対応のPICマイコンで、内蔵OSCが20M以上あれば、こんな苦労しなくてよかったのにー

使用部品と回路

  • フラッシュメモリ MX25L1605
  • PICマイコン PIC16F818
  • オシレータ20MHz
  • 3.3Vレギュレーター
  • 5->3.3V変換用 VHC244
回路図がこちら。もう大惨事。


はまったこと・メモ

ダイオードのレベル変換はMHzクラスには向いていない

これになかなか気付けなくて、フラッシュからの応答が無かったり、化けたりして
フラッシュ交換したり、電源変えたり大変だった。
ずっとロジアナで見ていたので、余計にドツボにハマった。
以下のようにオシロで見れば一発なのにね。
ダイオードのレベル変換

VHC224のレベル変換


よく調べてから実行しよう
http://kosakai.world.coocan.jp/change_3_3V_5V.html

Zeroplusのロジアナはlinuxで使える

Zeroplusだけじゃないと思うけど、PulseViewで自動認識してくれた。
しかもSPIプロトコルも解析できた。すごいね。
いままで、MBEWAREのロジアナを使用していて、そのためにwindows環境が必要だったのだけど、これからはlinux環境でいけそうだね。
ただ、パターンジェネレータ機能はどうしようもないか・・・。

ソフト

ブロック図

ブロック図というか動作イメージ

PWM 周波数とデューティの計算

データシートとにらめっこ、すぐに忘れそう・・・。
PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)
PWM Duty Cycle = (CCPR1L:CCP1CON<5:4>) • TOSC • (TMR2 Prescale Value)
今回は20MHzのオシレータで、分解能が8bit確保できて、可聴域以上のPWM周波数にしたいので
PR2は255が必要*で、PWM周波数はPWM Periodの計算式から
(*CCP1CON<5:4>を駆使すれば、PR2は63でも良いような気がするけど、簡略化のために、CCPR1Lに読み込んだデータを入れるだけで良いようにしたく、今回は255で計算した。次回は63で試してみよう。)
プリスケーラ 周期[us] 周波数[kHz]
1 51.2 19.53125
4 204.8 4.8828125
16 819.2 1.220703125
プリスケーラを1に設定して、19.5kHzの周波数とする。
次にデューティは簡略化のためにCCP1CON<5:4>を0b00とした。
すると計算は簡単でCCPR1Lのみで、26とした場合は、約10%になる。

SPI

Masterモード時のCS

てっきりSlave Select (SS) RB5が使えるのかと思ったけど、これはSlaveモード専用みたい。
そして、SPI使用時にRB5は出力設定できないのか、意図した動きにならなかった。
仕方がないので未使用だったRB0をSSとして使うことにした。

flashROMからの連続読み込み

SPIの読み込みは最速でOSC/4なので、今回は5Mbps程度となる。つまり1クロックあたり0.2usとなり8bitのデータ転送には1.6usという計算になる。
単純に考えるとflashROMからの読み出しは[READ 03h][AD1][AD2][AD3]と[DATA]の計5B必要になるため
1.6*5で8us/Byte・・・125kHzくらいと思いきや
実測すると5B転送するのに124usくらいかかっている。むーん。
これだと、8kHzぎりぎりなので再生速度揺らいでしまうかもしれない。
MX25Lのデータシートには、CSをLOWのままでクロック与え続けると、アドレスを増加させて読み込み続けると記載があったので、1度に8Bデータを読むようにしてみた。
すると、コマンド+アドレス 計4B データ8Bで合計12Bを読むのに約273usとなった。
データ1Byteあたり約34usなので、約29kHzとなり十分に余裕がある。

リングバッファ

flashROMからの読み込みが十分速いので、不要な気もするけど32Bのバッファ用意した。
125us * 32 = 4ms の余裕が生まれるハズ。効果は未確認。

音源の作り方

ようやく音源の準備。ブログとかyoutubeに出していいかわからないので、そういう使用がOKな音源を探す。
例えば、d-elf.comさんのところにある「蒼い月 初音ミク・アペンド Blue Moon/HATSUNE MIKU Append Ver.」の場合。
Blue_Moon_MIKU_Append.mp3で2.9MBある。これを8kbps 8bit モノラルとしてデータ部のみ保存する。

Audacityで

cuiなコマンド1発に憧れるけど、まずはguiでやってみる。そうAudacityで。

音源を8kbps 8bitモノラルに変更

  1. トラックを選択してから[トラック]→[ステレオからモノラルへ]を選択
  2. ウィンドウ下方の[プロジェクトのサンプリング]で8000Hzを選択

データ部のみ保存

  1. 「選択したオーディオを書き出し」
  2. 「その他の非圧縮ファイル」、ヘッダ:RAW(header-less)、エンコーディング:Unsigned 8-bit PCM
これでOK。約985kBのデータができた。
内容を確認するときは、[ファイル]→[取り込み]→[ロー(Raw)データの取り込み]

flashROMに書き込む

この前やったflashROMの書き換えが早速役に立つ。
dd if=/tmp/miku.raw of=/tmp/2m_base.img ibs=2M conv=sync
flashrom -p linux_spi:dev=/dev/spidev0.0 -c “MX25L1606E” -w /tmp/2m_base.img

動作確認


こんな感じ


2018年7月16日月曜日

キャラクタ液晶に天気予報を表示する

暑い・・・。暑すぎる。

キャラクタ液晶の使い道を考えていた。
暑くて、天気予報が知りたくなった。

早速結果からだけど、こんな感じ


1. 天気予報を取得する

livedoorの天気予報サービスを利用させてもらう。
http://weather.livedoor.com/weather_hacks/webservice

都市は「東京」なので「http://weather.livedoor.com/forecast/webservice/json/v1?city=130010

JSONで応答してくれるみたい。
[forecasts][0][telop]に[晴のち曇り]
[forecasts][0][temperature][max][celsius]に[最高気温]

linuxボードにpythonとか入っていないので、awkとsedで頑張る!



2. 天気アイコンをアニメーションしたい

外字(CGRAM)は8種類しかないけれど、書き込むと表示中のものも変更された!
ということは、動的に変更できて、なんちゃってアニメーションできそう。


3. 表示

上段に「サイコウ キオン:●●°C」
下段に「テンキ:■■■■■」
■部分は、例えば「晴のち曇」なら
「晴アイコン」「ハレ」「→」「曇アイコン」「クモリ」

JSON出力はUnicodeで「晴のち曇」は「"\u6674\u306e\u3061\u66c7"」となる。
「のち」なら「→」、「時々」なら「/」とした。
外字は

外字は1s毎に書き換えを行い、アニメーションしてるっぽくした。
また、1時間毎に天気予報を更新する。
(今回は実験なので、この間隔にしたけど、長期に使う場合には、
 利用規約確認したり、迷惑かからないように12時間とか24時間とかのほうがいいかも)

ソース

使いそびれたパラレルキャラクタ液晶のSPI化(2/2)

前回からのつづき
制御用のFON2405E(LEDE・Openwrt)向けドライバ作成

1. SPI仕様

[0x01][コントラスト] ※コントラストは0x00〜0x06
[0x02][コマンド]  ※ RS=0 でLCDに出力
[0x03][データ]   ※ RS=1 でLCDに出力

http://akizukidenshi.com/download/ds/sunlike/SD1602HULB-XA-G-G.PDF
http://219.117.208.26/~saka/ham/LCD2/

2. ドライバ仕様

基本的には、MCP23S09の時と同じ。
キャラクタデバイスとして[/dev/ PicClcdDriver0]が作成される。
これに表示したい内容を流しこめばOK
一方で、各種制御は[/sys/bus/spi/drivers/PicClcdDriver/spi0.1/]に
lcd_clear:Clear Display(全表示クリア)
lcd_set_cgram:Set CGRAM address
lcd_set_ddram:Set DDRAM address
が作成される

3. 動作

insmod pic_clcd.ko
echo > /sys/bus/spi/drivers/PicClcdDriver/spi0.1/lcd_clear
echo -n HelloWorld! >  /dev/ PicClcdDriver0

英数字以外 例えば 「イ」とか
echo -ne "\xB2" > /dev/ PicClcdDriver0

外字CGRAM
0番目に「晴?」アイコン
echo 00411040E04110400 > /sys/bus/spi/drivers/PicClcdDriver/spi0.1/lcd_set_cgram



ドライバソースコード

使いそびれたパラレルキャラクタ液晶のSPI化(1/2)

ずっと昔にまとめ買いした「LCDキャラクタディスプレイモジュール」(秋月電子のSC1602BSLB-XA-GB-KとかSD1602HULB-XA-G-G)が使いそびれていた。
5Vだしパラレル入力だし・・・。
最近では、3VとかI2C通信のものが安価に出ている。
困った。 FON2405E(Linuxボード)は 3Vだし、今のところSPIしか使えていない。
そこで、PICマイコン使って
  • インターフェース変換(SPI to パラレル)
  • 3V駆動
  • SW入力
  • バックライト
を目指す。

先に結論↓ こんな感じで、Linuxボードから制御してみた。



1. インターフェース変換

SPI搭載の手持ちPICマイコン=PIC16F818 / 819 にした。
まぁシフトレジスタでも実現できるような気がするけど。
http://www.aitendo.com/product/14623
だけど3V駆動化とかSW入力とかやりたいので、今回はPICにこだわった。


2. 3V駆動

いろいろな方が実現している。感謝!
PICにてPWM出力し、チャージポンプにて負電圧を生成する。
最初に思いついた方すごいね!
http://elm-chan.org/docs/lcd/lcd3v_j.html
http://jsdiy.web.fc2.com/lcd3v/


3. SW入力

入力ピンが足りないので、アナログ入力+抵抗分圧にて。
こちらもいろいろな方が実現している。感謝。
https://synapse.kyoto/hard/keypad/page001.html


4. バックライト

バックライト駆動するためには4V 40mA程度必要っぽい。
2のチャージポンプでは賄えないか・・・。
要検討・・・。

んでもって、現状の回路図はこんな感じ。


ソースコード

2016年12月8日木曜日

FON2405E カスタムファーム用のドライバ開発

前回、準備としてなんちゃってドライバを作成して、insmodするところまでいけた。
次は自力シリアル通信ドライバを作成(ラズベリー・パイ用に作った奴の移植)をしてみる。



1.概要
ドライバ名はMy2nd(まだ名称が決まってないOrz)コードは末尾に記載。
Makefileは前回からドライバ名のみ変更した。


2.導入
nfsマウント
mount -o nolock 10.10.10.3:/var/lib/tftpboot /mnt
insmodしてみる

メッセージのメジャー番号が253 マイナー番号が0が重要で、コレがないと/dev/●●が作成できない。
カーネルのバージョンがアレなので、手動でスペシャルファイル?を作成する必要がある。
mknod /dev/My2nd0 c 253 0
とするとMy2nd0というデバイスファイルが作成できる。

3.テスト
 作成したMy2nd0に対してechoで文字列を送ってみる。
 echo -n HelloWorld!! > /dev/My2nd0

するとPIC側のコンソールに表示される。

やったーうまくいった!

4.コード
こんな感じ


2016年9月3日土曜日

MPLABXをLINUXで使ったら文字化け

バージョンアップの度にはまるので、備忘録として

日本語が表示できるいい感じのフォントをfonts/fallbackにぶち込んでおく

/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipag.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipamp.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipam.ttf
/opt/microchip/mplabx/v3.40/sys/java/jre1.8.0_91/lib/fonts/fallback/ipagp.ttf

これだけ。毎回忘れる。Orz

2016年8月31日水曜日

ラズペリーパイで自力シリアル通信

ひょんなことから、過去にFONのGPIOを使ったなんちゃってシリアル通信を実装したのを思い出した。過去の投稿
 当時は、ラズベリーパイが注目されていて、いいな−と思いつつ、ちょっと高いなと感じており、中古で@500円程度で入手できるFONを何とか拡張できなかと思っていた。
結局受信エラーが抑えきれなくて、途中興味を失ってしまった。

最近になって、
1.2014年7月 トランジスタ技術
2.LINUXデバイスドライバ
3.RaspberryPiで学ぶARMデバイスドライバープログラミング
 を読む機会があって、FONでやりたかったことを再度挑戦してみようと思った。

そのまえに、情報が豊富なラズベリーパイで準備運動をしてみた記録。



 概要
ユーザーランドでGPIOをパタパタさせて、同期型シリアル通信を行い、
PICマイコンにて、UARTに変換する。

ラズピでuname -aを実行してPIC経由のURATで受信した結果。


ラズピ側
ユーザーランドでGPIOをパタパタさせるプログラム
ほとんど前述の 「3」のとおり
GPIO7 - CLK OUT
GPIO8 - DATA OUT
PIC側
RB0 - CLK IN (割り込み)
RB5 - DATA IN
RB2 - TX
なんとなく達成感があるね。
次はPICからラズピ側に送信する機能を作ってみよう。

2016年5月2日月曜日

さぁ大型連休の中間点だ(imodela+eagleで基板切削)

GWの前半を使って、Amisの基板を切削した。
今度は、elecrowとかに発注してみたいけど、複数作るものではないので、切削で十分。

部品をハンダ付けするだけなので、作業自体は相当短縮できる。
ただし、GNDベタパターンなので、サーマルランドにしたとしても、容量の大きいハンダゴテが必要になった。


ユニバーサル基板の試作とはまた違った趣があって、いいですな。
まだ、光センサーの接続が残っているけど、まずはこんな感じで。
あとは、適当なケースに入れて、外部入力を接続すれば、最初の目的は達成できそう。
http://continue-to-challenge.blogspot.jp/2016/02/amis.html
これの赤外線出力以外を実現。

まだまだやりたいことがたくさんあるけど、GW中に完成できるかな・・・。

2016年4月29日金曜日

さぁ大型連休だ(久しぶりにimodelaで基板切削)

ずっとやりたかった基板切削。久しぶりに思い立った。
いろいろ忘れているので、また試行錯誤になってしまった。

今回はAmis用の基板を切削する。





基本的には過去の自分の投稿通りなのだか…
http://continue-to-challenge.blogspot.jp/2014/11/imodelaeagle.html
http://continue-to-challenge.blogspot.jp/2014/11/imodelaeagle_29.html

いくつかハマった点。
・eagleでベタパターンどうするんだっけ?
→ポリゴンを使う。名前をGNDにする。
http://www.piclist.com/images/www/hobby_elec/eagle32.htm

・未結線ってどうやって調べるんだっけ?
→Ratsnestボタンでウィンドウ左下に未結線数が出てくる
http://easylabo.com/2014/07/eagle/1609/
→で、結局どこなのさ? プラグインで表示可能
http://eeebaka.blog47.fc2.com/blog-entry-202.html

・ガーバーデータの出力ってどうやるんだっけ?
http://www.p-ban.com/gerber/eagle.html

そしてひたすら切削。。うるせーー

 久しぶりすぎて水平がとれていなかったらしい。
面だししなきゃOrz

2016年2月28日日曜日

見通しが立った(Amis)

今年に入ってから少しずつ試作進めてきたものが見通しが立ってきた。
他の人が手垢がつくほどやり尽くされているけど、
自分でやってみたかった。

概要
扉センサーや人感センサー、明るさ、温度・湿度センサーを監視して、
異常な場合にはメールで通知するというもの。それだけ。
汎用出力があるので、光や音で知らることもできる。
赤外線出力もつけるので、家に帰る前にエアコンつけたり、
長期不在時に在宅を装うこともできるはず。
一体に何に怯えているんだろうか・・・。
名付けてAmis(エイミス)フランス語で「ともだち」 。ぜんぜん関係ないね。

構成
ArduinoとかRaspberryPiとか使えば簡単なのはわかっている。
だがしかし、あえて、この構成にしたかったのだ。なんとなく。

[センサー類]-I2cなど-[PICマイコン]  -USB(CDC)-[linux(1)]-[linux(2)]

・センサー類
  ディジタル入力×5
  ディジタル出力×3
  明るさセンサー これはCdsの値をPICのADで読む
  温度・湿度センサー(HDC1000というやつ)秋月電子で売っていた I2C接続
http://www.tij.co.jp/product/jp/HDC1000
  赤外線出力

・PICマイコン
  PIC18F2455 余っていたので
  microchipのcdcサンプルを参考にした

・Linux(1)
  最寄りのルーター dd-wrtが入っている。リビングにある。
  これにUSB経由でPICマイコンを接続するもの。
  
・Linux(2)
  メール通知用 mageiaが入っている。
  ONUの近くにある。

進捗
 ・センサー類
   赤外線出力がまだ
   その他は、だいたいOK

 ・PICマイコン 
   ファームはだいたいOK
   基板起こす? 悩み中。

 ・Linux(1)
   PICとの通信プログラムは、開発環境ではOK
   あとはARMに移植できるか・・・!?

 ・Linux(2)
   メール通知するだけなので、ほぼOK
   ssmtpを使用

その他
  花粉がすごい。体がだるい。でも頑張るぞ!

2016年2月21日日曜日

地道に試作中(その4)

ようやく
I2Cでデータの読み書きができるようになった。
長かった・・・。ガッツリ時間がかけれないのがツライ。

これで、あとはマイコンとLinux側の制御プログラムをちゃんと作れば、
やりたいことができるようになる。ハズ。

教訓
・ちゃんと1次情報(Microchipのデータシートとか)を読む
・ネットの情報を鵜呑みにしない
・急がば回れ(Win10でもロジアナツール使えることが発見できたし)

もう1つの方は
まだ未着手



2016年2月14日日曜日

地道に試作中(その3)

久しぶりに
VirtualBox上のWindowsを起動したら、
ブルーバック画面が頻出するようになっていたOrz

思い切ってWindows10をインストールした。
アプリとかドライバの互換性が心配だったけど、意外とすんなり動いた。
10年くらい前のロジアナがちゃんと動く。




PL-350というもの

試作基板はI2C通信部分の作りこみ中。
英語のデータシートを避けずに読んでいれば、もう少し早く進むと思う。

その他
・今まで放置してしまったことを少し処理できた。ストレス減!
・今回はダメだったけど、また次回頑張る。めげずに!

2016年2月6日土曜日

地道に試作中(その2)


平日にLinux側のプログラムを地道に作成(まだ半分くらいか)
cとかc++とか久しぶりすぎて頭痛くなった。


環境構築(eclipse+CDT)でハマった
-lpthreadをどこに書けばいいか
http://stackoverflow.com/questions/4201129/compiling-in-eclipse-with-gccs-lpthread-and-lrt-set
C/C++ Build --> Settings.
Then "Tool Settings", select "Libraries" under "Linker".
You can add all your project libraries there (without the "-l"). Also in the lower part, you can add custom path to search libraries.
らしい。

Linuxで一般ユーザーがシリアルポートを使おうとしてハマった
1.付与したいユーザーをdialoutのグループに入れる
2. 50-udev-default.rulesの修正
vi /lib/udev/rules.d/50-udev-default.rules
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0666"
「MODE="0666"」を追加

これで良いらしい。

試作基板の進捗
昨日と今日でPICマイコン試作基板に温湿度センサ(HDC1000)をつなげた。
まだ、I2Cのプログラムができていないので、ただつなげただけOrz


I2Cのデバックしたかったけど、今日は時間切れです。

その他に・・・
頑張って育ってくれ!

2016年1月31日日曜日

地道に試作中

昨日今日と少しづつPICマイコンを使ったグッズの試作中
USBフレームワークとの共存や慣れないxc8との格闘・・・。

出来上がるのは何時になることやら。


はんだ付けしている間は「無」になれる。楽しいね。

左上にあるのはcdsで明るさをAD変換して読みだそうというもの。
スイッチ5つとLED3つをつけた。
まだ、PORTBが丸ごと残っているので、他にも増やせられそう。
あとは、
・シリアル通信uart  サブマイコンと通信させる
・i2c 温湿度センサーとか
・圧電ブザー
くらいかな。

全貌はもう少し形になってきてから



2016年1月24日日曜日

なんとも・・・

数週間悩んでいたことが、ふとした瞬間に解決することがあるもんだ。

その1
PICマイコンのUSB(CDCサンプル)をdd-wrtで使いたいと思っていた
ddwrtの再ビルドも覚悟して、開発環境を構築するべく挑戦したが、なかなか思うようにならなかった。
でも、今日、何の気なしにPICマイコンのベンダーIDを試しにFTDIに変えてみたら
案の定動かなかったが、ようやく気付いた。PICマイコンのUSB(CDC)はftdi_sioじゃなくて、
cdc-acmだった。Orz
insmod cdc-acm
で一撃でした。 この2~3週間はなんだったんだ。。。
よく考えてから行動しようね。

その2
久しぶり同郷の親友にあった。現状や悩み事やなど話していたらあっという間に時間が過ぎていく。なんか解放されたような気分になった。良い刺激を受けた。まずは孫子を読んでみよう。

その3
ここ数年間ずっと悩んでいたこと。希望の光が見えてきた。
頑張ってくれ!!

おしまい。

2015年5月9日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(WEB制御)

目的

前回、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。
今回は、コマンドラインの操作をWEBから行えるように変更した。

概要

WEBからクリア、行移動、文字出力を行う。
PICからの受信は次回の課題。




結果



FON2405EのGPIOでキャラクタ液晶を制御する(受信機能追加2)

目的

前回、受信機能を追加したが、1Byteのみだった。
今回は、複数Byteの受信を拡張した。

結果

前回同様に1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒を送信し続けると、
400回のコマンド送信に対して、送信NGは52回 13%くらい
なんか前よりも増えた気がする…。
受信の方は、PICから「Hello!!」を送信。100回中NGは5回 5%くらいか
こっちはこんなもんか??

これで、双方向の複数バイトデータを扱えるようになった。
ようやくここまで来た。
ラズベリーパイでも良いのだけれど、ちょっと高い。
このFONならば、中古だけど、ACアダプタと本体で 500円〜なので、
心置きなく遊び倒せる。

何をやったか


電文
変更点

2015年4月25日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(受信機能追加)

目的

前回、チェックサムと送達確認(PICマイコンからFONに対して応答)を行うようにした。
 今回は、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。

概要

チェックサムOKの場合に、FONに対してACKを送信する。
 シリアル通信のクロックはFON側で生成しているので、
 イメージとしてはSPI通信に近いと思う。

結果

前回同様に1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒を送信し続けると、
 400回のコマンド送信に対して、送信NGは15回
  80回のときは、2回 2〜3%くらい?
 結果は地味だけど、PIC→FON方向の通信ができるようになったのは大きい


何をやったか

・フォーマット
1.データを送信するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [STX][チェックサム][DATA][ETX]
  受信データPIC→FON  1byte前に対する受信結果

2.送信結果を確認するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [ENQ]
  受信データPIC→FON  1byte前に対する受信結果

黄色・・・クロック
水色・・・受信データ(PIC→FON)この場合はACK(0x06)

------------------------------------------------
gpio_write_sr Start:CLK=12 DATA_OUT=11 DATA_IN=14
Send:[STX][CHKSUM = 14][DATA][ETX]<-4ms->[ENQ]
Input      = 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
RcvChk     = OK
Total Time = 307ms
------------------------------------------------

・FON側
・PIC側
受信処理の後、に送信したいものを出力するだけ
↓受信処理
sr_buf = ((sr_buf<<1) & 0xFE) | (0x01 & DATA_PORT);
↓送信処理
 //DATA 出力
 if((sr_out & sr_out_mask) == 0){
   DATA_OUT_PORT = 0;
}else{
         DATA_OUT_PORT = 1;
 }
 sr_out_mask = sr_out_mask >> 1;

・エラー発生回数測定用スクリプト
今日はここまで、次回は、PICからなにかデータを送信させてみるか

2015年4月19日日曜日

FON2405EのGPIOでキャラクタ液晶を制御する(チェックサム追加)

目的

前回、なんとかFON2045E(RT3050)のGPIOを使って、キャラクタ液晶の制御を行ったが、受信が失敗してしまう場合があった。
そこで、チェックサムと到達確認(PICマイコンからFONに対して応答)を行うようにした。

結果

チェックサムの導入によって、受信失敗したものは、破棄できるようになった。
1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒
を送信し続けると、おおよそ1分に2回程度チャックサムエラーが発生している模様。

何をやったか

1.チェックサムの導入

   送信するデータを以下のように変更
   [STX][チェックサム][DATA][ETX]

   STX     : 02h
   チェックサム:DATA部の合計値を0〜15(下位4ビット分)
   DATA   :今まで送っていたデータ
   ETX    :03h
 
2.受信の追加
   
   送信後に、readしているだけ


PICからの戻りは画面に表示しているだけだけど、
今後は、再送とか実装していきたい。