最近めっきりと寒くなってきましたねー(´Д`)仕事の疲れもあってか、青空メカニックは休業中。
週末になると秋月電子様へ足を運ぶのが習慣になっていますw
抵抗やコンデンサなどの種類が豊富な物って、必要な時に必要な値の物を持っていないと困りますよね。
秋月電子様、千石電商様、マルツ様など、家から1時間圏内なので助かります。
①表示器への文字表示テスト ※完了 ←未完了
②画面構成設計 ※完了
③スイッチによる固定画面の切り替え ※完了
④可変部の数値表示 ※完了
⑤アナログスケーリング設定と、現在温度、状態表示 ※完了
⑥閾値設定による、ファンコントロール用ON/OFFフラグ作成
↑ ※ 実装はまだですが完了としておきます。
⑦PWM回路テストを使ってLED調光制御 ←今回はここ
⑧ファンスピードコントロール用PWM回路作成
⑨MOSFETを使ったファン駆動
⑩PIC16FからPIC32またはdsPICへの移植 ※追加
⑪表示器への文字表示 ※追加
⑫設定値の不揮発化
⑬CANトランシーバーを使った、⑦⑧⑨の通信制御
⑭実機組み込み
PIC16F1938ではOLEDの表示制御が出来るのに、なぜかPIC18F26K80では上手くいかず、その原因が全く分からないで困っています。('A`)
色々テストしていますが、SSPBUFに直接入力すると表示できるものが、なぜか関数で引数の直接渡し、ポインタ渡し、参照渡しどれもダメ。
まったく表示が出来ない場合もあり、お手上げ状態でした。
PIC18F26K80にはCANモジュールが搭載されているのでなんとか使いたいのですが、ダメなら他のPICでも良いので移植を検討しています。
でも、一先ずもう少し踏み込んで原因究明しようとは思います。
と言う訳で、会社から借りてきました!
デジタルオシロ!
20万前後のそこそこの物です。
まずはPIC16F1938で、ちゃんと表示が出来ているI2CのSDAとSCLをモニターします。
上がSDA、下がSCLです。
ちょっと見にくいですが、クロックの周期は約10μs、100kHz(1/0.000010)、狙い通りです。
次にPIC18F26K80の確認。
なぜかパルス幅が50μs、周期にすらなっていないw
ちょっと検討しながらプログラムを修正し、I2Cの設定を関数から取り出してメインルーチンに直接記述しただけで、
なぜ(´Д`)
しかし、まともに文字が表示できないorz
ここで時間を費やすのも勿体ないので、一旦PWMの勉強に移ります。
PIC16Fでは、使用するピンのCCPを有効にし、PWM Period(周期)とPWM Width(パル
ス幅)を設定し、使用するタイマーを起動すればPWM出力が開始されます。
内蔵周波数を32MHzに設定している場合、周期は次の計算式で求まります。
(PRx + 1 ) * 4 * TOSC * Prescale
※PR2を249、TOSCは 1/FOSC なので 1/32000000 、Prescaleを1:1とし
(249 + 1) * 4 * (1 / 32000000) * 1 = 31.25μs
パルス幅を25(周期 31.25μs = 250 なので 10%)に設定しているので
ほぼプログラム通りの結果となりました。
LEDの明るさはこんな感じ。
次は50%
75%、100%も確認し、問題なさそう(´∀`)
でもちょっと周期が早すぎると思うのでプリスケーラを1:64に変更し、周期を2msにしました。
できた!(´∀`)
Posted at 2020/11/09 00:03:18 | |
トラックバック(0) |
お勉強 | 日記