趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • PIC10FでソフトUART

    投稿日 2011年 3月 27日 コメントはありません

    PIC10F2xxの使い道として、PIC10F222のA/DコンバータでA/D変換した値をUARTで送信する使い方を考えてみました。ターゲットはアナログジョイスティックで、実験用に値をA/D変換してPCに送りつける使い方です。で、まずその準備としてPIC10F200でソフトウェアUARTを作ってみました。(送信だけなので正確にはUARTではないですが・・・)

    これで1200bpsで文字を送信してくれます。なお、真ん中あたりに71回の無駄なループがありますが、これで送信速度(1bitの時間)を調整しています。調整はオシロスコープを見ながら現物あわせです。現物あわせですから、コンパイラのバージョンが変わると速度が合わなくなってしまう可能性もあります。TMR0を使ってきちんとタイミングを取る方法で作りかけたのですが、サイズが大きくなるのでやめました。

    作成途中ではまったのは、以下の点です。

    1. 1ビットの時間が安定しないと思ったら、ウォッチドッグタイマが動いていた。
      MPLABのメニューのConfigure設定で禁止していると思ったら、禁止できていなかったです。やはりソース内に記述してしまうのが安心です。記述方法はHITECH-Cのマニュアル(PDFファイル)内に記載があります。
    2. OSCCALの値が破損していた。
      リセット解除するたびに1ビットの時間が 大きくばらつくので、やはり使い物にならないかと思ってあきらめかけたのですが、よく考えるとクロックの周波数自体は1%の精度が保証されているので精度としては十分なはずです。何が起きているのかと思ったら、ROMの最終番地に書かれているMOVLW命令が破損していました。つまり、リセット解除時の不定なWレジスタの値がOSCCALレジスタに書かれていたわけです。PicKit2のToolsメニューの中に、OSCCALの値を復活させる機能があるので、それで復旧したところ綺麗に直りました。

    ・・・・が、これだけで10F200の256バイトのROMのうち167バイト(65%)、16バイトのRAMのうち10バイトを使ってしまいます。10F222ならもう少し大きくなるとはいえ、数値を文字列に変換することなどを考えると苦しそうです。数値をバイナリで送るとかであれば何とか使えるかもしれません。