ちょっとは人のためになる事をしないとインターネットコミュニティーの皆様に申し訳がないかと思いながら、自分の備忘録ていどでしかなく、実際の所たいした情報も提供できないでいるブログ
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
格納先
HKEY_CURRENT_USER\SOFTWARE\SetRegistryKeyの値\String Table AFX_IDS_APP_TITLEの値\lpszSection\lpszEntry=lpszValue 標準的なレジストリの使い方に従うとSetRegistryKeyはベンダー名を入れるべきってことになる PR
それにしてもPICは簡単に動く物が作れていい
これで飯くっている訳じゃないから気楽なのもいい 今回は、むしろPICよりPICを制御するWindows側のプログラム(これが本業)に手間がかかってる。 ソフトウェア的な負荷をWindows側に集中させた設計にしたってのもあるが。 下記のようなコンセプトのライターをH8とPICでプロトタイプ的なところまで作ってみた。H8はgccを使ってだいたい3K, PICでの実装はアセンブラで400ワード!!そこそこ大きなプログラムになるかと思って、PIC16F88とかPIC16F886とかを準備しておいたんだけど超オーバースペック状態(笑) USART、ほかにI/O 8本使えて、プログラムメモリーは1Kもあればいいや。こんなPICをさがしてみようか。PIC16F688あたり、安いし小さいから許容範囲かもしれない(未精査)。 作成中のライターのコンセプト まとめ 1. 出来るだけ多くのPICに対応(できる柔軟性) 2. あたりまえだけど Lov Voltage / High Voltage 両対応 3. In Circuit 専用 ZIF等は使わない 4. ピンヘッダ・フラットケーブルでライターとターゲットを接続 1> PICに共通のCLOCK/DATAによるシリアル通信機能をもたせる。その他のロジックはPIC毎に違うのでライターにもたせない。書き込みロジックはWindows PCで制御する。 3> ターゲットの回路の付けはずしが面倒だった。In-Circuitながらも全PINをターゲットで使えるように考慮。 4> ピンヘッダは2X7(Low/High両対応、実行モードサポート=PCからの操作で書き込み<->実行を切り換える), 2X6(LowまたはHigh voltage固定、実行モードサポート)、1X4(回路側でIn-Circuit書き込みに考慮した設計)、1X5(1X4のLWP版)の数種類に対応。ライター側・フラットケーブルは全パターンで共通。
使いにくいのを改善する方法
メニューから Tools Options、Environment - Keyboard (英語版を使ってるので英語表記、日本語版はツール・オプションか?現物がないのでわからん)で Window.NextDocumentWindow に Ctrl+Tab を割り当て この操作によりWindowNextDocumentWindowNavに割り当てられていた Ctrl+Tab が解除される。 同様に Window.PreviousDocumentWindow に Ctrl+Shift+Tab を割り当て
これにはまってた
英語でハングアップの情報を検索しても全然ヒットしなかった 日本語で検索したら一発 IME周り固有の問題かな 「地域と言語のオプション」-「言語」-「テキストサービスと入力言語」-「詳細」-「詳細設定」-「詳細なテキストサービスをオフにする」
PIC16F887 40pin PICが250円だった。とてもおとく。
どうも秋月では、秋月プログラマでかけない品種が安いようだ。 PIC16F818のサルベージもあるし、PIC16F887を買ってみた。ついでに書き込みプログラムの練習用にPIC10F200@70円も。 Programing Specification を見ていたらこんなかんじ PIC16F818 5V単一電源または VIHH: VDD+3.5~13.5 PIC16F877 5V単一電源または VIHH: 10V~12V PIC10F200 VIHH: 12.5~13.5 PIC10F200はVIHHの範囲が特殊?トラ技2008/05に出ていた三端子レギュレーターの電圧かさ上げ回路(ダイオードの順方向電圧でかさ上げ)をつかって12.62V出力を確認(7812に1N4148)。 ソフト的には5V単一電源にてPIC16F887のデバイスID読み出しまで成功。 DEVICE ID=2082 と読めたのでリビジョン2だそうです。
CS信号が来てない
P8-4も出力ポートにしないとCS1がバスコントローラーで使われなかった 丸一日はまった。 256Kbit(32KByte) SRAM増設ソフト的なまとめ P1DDR = 0xff; P2DDR = 0xff; P8DDR = 0xfe; // CS1/2/3/4有効。最低限増設したCSn信号のbitをon にすればよい。CS1はbit4(00010000) 配線を引き直したり色々やったあげく、たった1ビットのソフト的なミスでした。
お題 H8 3048の改造
SRAMは以前買って放置されていたSRM2B256SLMX55をH8 3048Fにつないだ。 失敗1 SRM2B256SLMX55をサンハヤト SOP32PINの変換基板に実装したのだが、このときPIN14/28を変換基板16/32PINに当てればよかった。マークを上に見て、下よせの感じがいい。同基板に1M SRAM(M68AF127B)を実装したとき、そのまんま差し替えられる。何も考えず変換基板1PIN=SRAM 1PINにあててしまった。H8マザー側はM68AF127Bを実装するとき用に基板は配線。SRM2B256SLMX55はICソケットからずらして実装。これは見た目はずかしい・・・ 失敗2 CN3からたくさんの線が延びる。CN1側に配置しちゃったので、配線とり回しが大変なことに。 失敗3 まともに読めなかった。RAMを積んだらソフト的な設定が必要だった。モード5にしたからOKだとおもっていたら、P1DDR, P2DDRの初期値はモード5でもI/Oポート。これをアドレスバスにしないとデータが読み書きできない。書き込んだ内容が揮発していく(というかめちゃくちゃ)症状になやまされ、何度も何度も配線を確認したがみつからず途方に暮れてねっころがってデータシートを読んでいたら記述を発見。まだROM化していないがP1DDR, P2DDRを初期設定してアドレスバスがちゃんとうごくことを確認 ここまで完了 未完了な部分 1の部分が多いビットを書き込むと書き込みエラーが起きる場合がある(未解決)。おそらく電源線細すぎ(ほそーいUEW線で配線してある)、またはパスコン配置の問題(基板裏面のフリーランドい置いた)。
秋月のプログラマで数回書き込んだら書き込めなくなってしまった
ライターを自作してみようとPIC16F818/819のFlash Memory Programming Specificationの翻訳メモ シリアルプログラミング中、RB6はクロック入力ピンとして使われ、RB7はコマンド入力・データ入出力として使われる コマンド入力はビットサイクルで行われる 各コマンドビットはクロックの立ち下がりでラッチされる。LSBが先に入力される。 RB7のデータは、クロックの立ち下がりに対して、最小セットアップタイム(tset1), ホールドタイム(thold1)が要求される。 データを伴うコマンドは最小ディレイ(tdly1)の1μsをコマンドとデータの間に持つように指定される。 このディレイの後、クロックは16サイクルする。最初はスタートビット(0)で最後はストップビット(0)となる。 データはLSBから転送される。 全てのコマンドとデータワードはLSBから転送される。 データはクロックの立ち上がりで送信され、立ち下がりでラッチされる。 コマンドの解析とデータピンの入出力切り替えのため、少なくとも1μs(tdy1)がコマンドとデータワード、次のコマンドとの間に必要である。 tset1 100ns(min) thold1 100ns(min) tdy1 1.0μs(min 2.0V~4.5V) 100ns(min 4.5V~5.5V)
秋月のRTCモジュールを外部クロックとして利用した回路。まあ、500円もするクロック源を外付けしたんだから正確に計時するわな。
ソフトは大幅変更 スイッチ押し下げやモード変更処理を見直した https://blog.cnobi.jp/v1/blog/user/4deea9560fe0c796fe6fb39ec3499763/1207817229 ものづくりてきにはつまらない代物なので、試作だけで終了
○横INNで貰った時計の水晶発振子は見事に32.768KHz。
32.868KHzはTimer1の65536分周では1/2HzになるのでTimer1のソースにすると秒単位の計時ができない。外部回路なしで256分周で使えるTimer0に32.768を入れるためにはCPUクロックを32.768KHzにしなければならない。 32.768KHzで動作させてみたものの、このCPU速度では、全力でダイナミックスキャンしてもちらつきます。ちらつくというより、数字が流れるのが見えます(笑) というわけで、32.768KHzのCPU速度でのLEDダイナミックスキャン型のデジタル時計は無理と判断。PIC二つ構成で、一つを計時用、もう一つを表示用にすればできるな。でも、これ以上このクロックは追求しないようにします。
先週出張に行ったときに泊まった某ビジネスホテルチェーンのインターネット予約特典でもらった時計があったので分解した。それらしい水晶発振子を発見。これは32.768KHzじゃないか?早速組み込んでみよう。
水晶の精度が大きく疑問ではあるが・・・
TMR1L TMR1Hレジスタ書き換えでプリスケーラーがリセットされるのが問題なら、60K/4M=66クロック以内にTMR1L/TMR1Hレジスタを再設定すれば良さそう。(533クロックの余裕はない)
現状LEDのダイナミックスキャンをTMR0割り込みでやっている。Simulator Traceで測定したところ、割り込みルーチンの所用クロックはおよそ85だった。TMR1割込発生後、カウンタをリセットするまでは数クロックでできるが、TMR0を契機にした割り込みが発生している間にTMR1が発生した場合、割り込み禁止状態なので、60KHz周期内にレジスタ書き換えを完了できないことになる。 割り込みルーチン内のダイナミックスキャン部分でも割り込みを有効にして対応しよう。再入防止はフラグで制御を予定。
けど遅れる
エミュレーターで実験したらTMR1レジスタ書き込みでプリスケーラーがリセットされるっぽい。 このままだと正確に計時できないな。 補正を入れる(邪道) 60KHzをメインクロックにして256カウントのTimer0で処理(処理おいつくか) もっと速いクロックにする どれにしょう^^;
アノードコモン側をドライブする2SA1015のベースの抵抗は470Ω(ベース電流10mA)にした。左から4.7k/1k/470/220。1Kは許せる程度の明るさだが470と並べると暗い感じ。470と220はほとんどかわらなかった。
|
カレンダー
カテゴリー
フリーエリア
最新CM
[02/07 @naoshi65536]
[02/07 忍]
[09/18 とおりすがり]
[06/26 ilmare]
[03/16 とおりすがり]
最新記事
(01/30)
(01/30)
(08/13)
(05/26)
(04/08)
最新TB
ブログ内検索
カウンター
アクセス解析
|