PIC16F1705をPICkit2で使う

先日、秋月で販売が開始されたPIC16F1705は、8kwもメモリを搭載し、いろいろなアナログ機能が盛り込まれているだけでなく、各I/Oポートの仕様を細かく設定できるなど、ある意味「何でもアリ」のマイコンなので注目してるのだが、新しいチップがゆえPICkit2での書き込みに対応していない。そこで、例のPK2DeviceFile.datを書き換えて何とか使えるようにしたいと思う。

I-08578

このチップ、何が問題かって、今までのF1チップたちと違う特性が1カ所ある。それは・・・

Device IDとRevision IDが違うワードに割り当てられている

ことである。今までのチップたちは同一ワードで両IDを表現していたので、例えばその辺の8kwのF1チップのデータをコピペしてDevice IDだけを変えるだけでは対応できないのである。前回、PIC16F1825やPIC16F1829のデータを作成したときは簡単にデータエントリを作成できたのだが、そういうわけにはいかないということである。

そこで、困ったときのフォーラム頼みということで、Microchip Forumを覗いてみることにする。

http://www.microchip.com/forums/m814654.aspx

ここではPIC12F1782を対応させようと奮闘しているのだが、ここの情報を基にPIC16F1705に対応させてみようと思う。

まず、先ほどのDevice IDに対応させる点については、このフォーラムに新しいスクリプト例が載っているのでそのまま使わせてもらった。あとは、PIC16F1705/9のチップのプログラム書き込み仕様書をMicrochipからダウンロードして、

http://ww1.microchip.com/downloads/en/DeviceDoc/40001683B.pdf (注:ドキュメントが改編されれば文書番号が変わってリンク切れになるかもしれません)

これに合わせてエントリを作成するだけだ。

今回はメモリ容量の同じチップ(8kw Flash,1kB RAM,No EEPROM)と言うことでPIC16F1455をコピーして作成した。
具体的に修正した箇所は以下の通り、

1.新しいFamilyを追加したのでそれに合わせてFamily番号を変更
2.DeviceID
3.ConfigMasks
4.VddMax
5.CalibrationWords

これを保存してPICkit2のインストールフォルダにコピーすればOK!

DevFile147

ちゃんと正しく認識したようだ。

ちなみに簡単なプログラムを書き込んでみた。

pgm

ちゃんと書き込んだプログラムは実行されているようだ。

未だにPICkit2を手放せない人でこのデバイス定義ファイルが欲しい方はご自由にどうぞ!

PK2DeviceFile_1_62_146plus1 (例によって拡張子がdocになっているが、ZIPに変更してダウンロードして解凍して使用ください)
解凍すると長々とした名前になっているが、PK2DeviceFile.datにしてからPICkit2のインストールフォルダにコピーしてください。なお、コピーにはマシンの管理者権限が必要です。また、定義内容は完璧ではない可能性がありますので、すべて自己責任でご利用ください。

広告
    • Panda43
    • 2014年 11月 14日

    このページを見て私もほかのPICでチャレンジしてみました。
    が、16F1822-25,28-29のconfig2 word mask が違っているように
    思われるのですが、勘違いでしょうか????

    • 確認してみました。確かに1826/27(0x3713)とその他の182x(0x3703)でconfig2 word maskの値が異なるようです。データシートを確認したところ、この異なるbit4はReservedになっているので通常使用されることはない模様です。気にしなくても大丈夫だと思います。個々のチップのデータシートとプログラミング仕様書(DS41390D)では、Reservedのビットの部分の網掛けが違っていたので、設定した人がどちらを見たかでマスク値が異なったのだと推測します。とはいえ、このビットを設定することはないので、ある意味182xの0x3703の方がよいかも知れませんね。

    • koujikuu
    • 2014年 12月 4日

    はじめまして、
    PK2DeviceFile.dat 1.62.146plus1 へ入れ替えたところ PIC12F1822,PIC16F1938/9 が認識しなくなりました
    PIC2DeviceFile.dat 1.62.14 or 09 では認識できます
    とりあえず報告まで。

    • koujikuu
    • 2014年 12月 4日

    自己解決しました
    PK2DeviceFile.dat 1.62.146plus1 認識方法
    PIC16F1705 – PICKIT2 / DeviceFamily / Midrange / SparatedDevID
    PIC12F1822,PIC16F1938/9 – PICKIT2 / DeviceFamily / Midrange / 1.8v Min で認識できました
    PIC16C84,16F84 も NoDeviceid で選択できるようです
    お騒がせしました。

  1. そうですね。新しいファミリを追加したので自動認識にはファミリ指定がいるみたいですね。チップを認識するために必要なデバイスIDの読み出し方がこれまでと違うので仕方ないのかなと思います。

    • koujikuu
    • 2014年 12月 6日

    お世話になります
    PIC16F1705メモリーマップにSRAMが512バイト(80*6+16+16)しか割り当てがないので調べてみました
    結果PIC16F1938/9と同様 1024バイト(80*12+48+16)がメモリーダンプで確認できました

    今回PPS機能を使いTXをICSPDATに割り当て、PICKIT2のUART TOOLで確認しましたが、xxxPPSとRxyPPSが別バンクに割り当てられているので設定に注意が必要です

    またPIC16F1705を使用する為にMPLABXをインストールしましたが、MPLABと使い方が違い馴染めないので、
    “P16F1705.INC”をMPLABにコピーしprocessor 16F1829を指定してアセンブルを行いました

    PIC16F1705の参考になれば幸いです。

  2. はじめまして。
    貴重な情報ありがとうございます。

    このページの情報とファイルを使ってPIC16F1716に対応させたデバイスファイルを作りました。
    できたファイルをHPで公開しようと思ったのですが、してもよいものなのかわからなかったのでお伺いにきました。
    公開する場合、こちらのHPへのリンクをつけようと思っています。

    意見をお聞かせください。

    よろしくお願いします。

    • ご自身でデバイスファイルを作成されたのですか?いいですね。
      公開してみなさんに寄与されることを望みます!
      リンクの有無については情報の元を示してあげたほうが、見た人の参考にもなると思いますので、あったほうがよいと思います。
      参考まで。

    • 大村 郁夫
    • 2017年 3月 4日

    PIC16F1705のPK2DeviceFileを使用させて頂きました。
    ありがとうございました。
    1ヶ月近くPICKit3で書き込みについて悩み、PIC16F1704まで試しましたが、最終手段としてWindows10の移行と諦めていたとき貴方のブログを見つけました。
    退社後、マイコンプログラムが出来なければ電子回路で遊べないと思いPICアセンブラを始めて約10年になりますが、周りに教えて頂く人も居らず未だに初心者レベルです。
    今後も”からくり工房「ききょうや」”を参照させて頂きます。
    本当に助かりました。ありがとうございました。

    • PIC工作人
    • 2017年 10月 31日

    定年退職しましたPIC熟年初心者です。PIC出始め、mikroBasicコンパイラ使っての工作を楽しんでいるものです。秋月電子より、価格の安いPIC16F1705使用するためにこのHPにたどり着きました。お陰様でpickit2でデバイスを認識できるようになりました。コンパイラもbasic pro に変えたのですが、使い方の景色がすっかり変わり、さっぱり動かせない状態に陥っています。少しずつ、ボケないよう努力していますが、この山はかなりハードルが高さを感じている今日この頃です。独り言のようですみませんでした。また、機会がありましたら、伺います。

    • PIC工作人
    • 2017年 11月 9日

    ようやっと mikrobasic pro 動かせるようになりました。
    しかし、PWM1 と USART が一緒に動かすことが出来ません。
    どこか、レジスタの使い方が違っているところがありましたら、ご指摘頂けたら助かります。

    dim j as byte
    dim i as byte
    dim j1 as byte

    dim oldrcvByte1,rcvByte1 as byte
    dim CurrentVal,LastValue1 as word
    dim duty as char
    dim index as byte
    dim channel as byte

    main:
    OSCCON.IRCF3 = 1
    ANSELA = 0x00 ‘ A Digital
    ANSELC = 0x00 ‘ C Digital
    TRISA = 0x04 ‘ Set RA2 pin as VR input
    TRISC = %00100001 ‘ Set RC0 & RC5 pin as SW input
    PORTA = 0x00
    PORTC = 0x00
    ADCON1 = %11010010
    ADCON0 = %00001001
    delay_us(5)
    RC2PPS = %00001100
    CCP1CON = %00001100
    T2CON = %00000010
    ‘ OPTION_REG = %00000000
    WPUC.0 = %00000001 ‘ RC0 SW pullap
    CurrentVal = 0
    LastValue1 = 0 ‘ Inititalize LastValue
    rcvByte1 = 1
    index = 0
    duty = 0
    UART1_Init(2400) ‘ initalize USART (9600 baud rate, 1 stop bit, …
    Delay_ms(50) ‘ Wait for UART module to stabilize
    RXPPS = 0x05

    Pwm1_Init(15000) ‘ Initialize PWM module, freq = 15kHz.
    Pwm1_Start()
    PWM1_Set_Duty(0)
    LATC = 0x00 ‘ Turn OFF LEDs on PORTC

    while true
    if Button(PORTC, 0, 1, 0) then
    LATC = %0010000 ‘ Turn OFF LEDs on PORTC 4

    CurrentVal = ADC_read(2)>>2 ‘ get ADC value from channel No.1

    if CurrentVal LastValue1 then ‘ perform conversion only if they are different

    LastValue1 = CurrentVal ‘ Equalize them so next time we do not write the same value
    PWM1_Set_Duty(CurrentVal) ‘ 1Change duty ratio wend

    end if
    else
    LATC = 0x00 ‘ Turn OFF LEDs on PORTC
    end if
    ‘—————————————————————————————–
    ‘ USART
    if (UART1_Data_Ready() = 1) then
    rcvByte1 = UART1_Read()

    if rcvByte1 = 0x0A then

    if channel = 0x34 then
    PWM1_Set_Duty( duty ) ‘ 1Change duty ratio wend
    if CurrentVal duty then
    CurrentVal = duty

    end if
    end if
    index = 0
    duty = 0

    else
    if rcvByte1 0x0D then ‘
    if index >= 2 then ‘
    duty = duty * 10
    duty = duty + (rcvByte1 – 0x30)
    end if
    if index = 0 then
    channel = rcvByte1
    end if
    index = index + 1
    end if
    end if
    end if

    wend

    end.

    • ききょうやです。
      F1705をPICkit2で使用できているようでよかったです。
      ところで、上記のプログラムですが、何をするプログラムなのかがわからないのと、私はMikroBasicなるものを使用したことがないのでコメントがしづらいところではあるのですが、一般的にPWMとUSARTの同時使用ができないというのはPPSやポートの入出力、アナログ設定などに問題があることが多いようです。
      処理系によっては裏で割り込みを使用していたりするものもあって、同時使用に制限のある機能があるのかもしれません。
      また、同時使用できないということは、片方ずつの機能は動作確認できているのでしょうか?どちらか一方だけの動作ができないと先へは進めません。
      そのあたりを確認してみてはいかがでしょうか?

    • PIC工作人
    • 2017年 11月 10日

    的確なアドバイスありがとうございます。USARTだけで確認してみましたら、エラーになってしまいました。同じ命令ですが、デバイス名を変えると正常にコンパイルできるので、残念ながら16F1705でのUSARTはまだ対応してないことを確認しました。ちょっとがっかりしてますが、お陰様で早く気ずつことができました。ありがとうございました。

  1. 2015年 1月 29日

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。