忍者ブログ
ちょっとは人のためになる事をしないとインターネットコミュニティーの皆様に申し訳がないかと思いながら、自分の備忘録ていどでしかなく、実際の所たいした情報も提供できないでいるブログ
[1] [2] [3] [4] [5] [6] [7]
×

[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だそうです。
昔、プリンタの増設RAMで亀の子増設をしているのをみて、目から鱗だった。AKI H8 3048F 用に256K SRAM の二段がさね。変換基盤のPin1に子亀のCS#をつないでいます。1M SRAMを乗せると、このPinはNCになるので都合がいい。反対サイドにみえるUEW線の配線はランドはがれの補修^^;


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の改造


  • 使えなくなったPIC16F818のサルベージをしたい。12V/5V取り出し、それぞれタイミング制御可能にする
  • 特に意味なくSRAMを搭載してみる
  • 使いにくいマザーボードを改良(というか、SRAM搭載のためにポートをいっぱいつかうので使わない機能を削除)

    • 電源をACアダプタに(現行AKI-H8はアダプタになってるかな。うちのは古いので巨大な100Vむき出し電源ユニットがついてた)
    • LEDとかDIPSWはいらない
    • リセットボタンだけはほしい
    • そのうちH8ライター自身が書けるように(とりあえずは実行のみボード)
    • RS-232CインターフェイスはDSUB9のみに



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円もするクロック源を外付けしたんだから正確に計時するわな。

ソフトは大幅変更
スイッチ押し下げやモード変更処理を見直した

http://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じゃないか?早速組み込んでみよう。

水晶の精度が大きく疑問ではあるが・・・
割り込みルーチンを修正。3時間くらい動かしているけどNTT時報にぴったり。これで完成でいいか。



回路図、ソース、バイナリ

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はほとんどかわらなかった。


忍者ブログ [PR]
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新CM
[02/07 @naoshi65536]
[02/07 忍]
[09/18 とおりすがり]
[06/26 ilmare]
[03/16 とおりすがり]
最新TB
プロフィール
HN:
naoshi
性別:
男性
職業:
ソフトウェア技術者
趣味:
料理
自己紹介:
@naoshi65536 で連絡がつくはずです。
バーコード
ブログ内検索
カウンター
アクセス解析
FX NEWS

-外国為替-