akira.kei が 2025年12月19日12時25分15秒 に編集
初版
タイトルの変更
忘れられたUSB内蔵PIC16F1455をイマドキ使う(その1)
タグの変更
PIC
PIC16F1455
記事種類の変更
セットアップや使用方法
ライセンスの変更
(MIT) The MIT License
本文の変更
[<前の記事](https://elchika.com/article/51e991b2-8436-40e1-889e-3b7cd551ccff/) : [次の記事>]() ## USB内蔵PIC16F1455 前の記事で「PC(Mac)↔︎USBシリアル変換↔︎PIC↔︎I2C温湿度センサー」と接続する記事を書いたが、「USBシリアル変換↔︎PIC」をPICだけで済まそうとUSB内蔵[PIC16F1455](https://akizukidenshi.com/catalog/g/g110887/)を久しぶりに使おうとしてハマった話を書いておく。  ## まずは結論から - コンパイラxc8はv2.5を使い、v3.0以降を使わない。 - コンパイラオプションで「C90」を指定する - リンカオプションでも「C90」を指定する - MCC ClassicのContent Managerで「MLA Framework lite」を読み込んでおく  ## MCC Classic イマドキはCLASSICじゃないMCCが推奨らしいが、他人のWEB記事を見ても新しいMCCを使っているの見たことないんだけどw  ## 48MHz駆動 USB用に内蔵オシレータを使うのだが、なんと48MHz動作が可能(命令は12MHzで動く)なんだけど大丈夫かな(普通のPIC 16Fは最大32MHz) LVPはONでもOFFでもどっちでもいい  ## MLA USB Device Lite MCC CLASSIC起動中にContent Manegerで「USB Framework Lite」を読み込んでおけば、Device ResourceのUSBの下に「MLA Device Lite」が現れる。設定画面でProduct Stringを「Product Name」から任意の文字列に変更し、一番下のExampleにチェックを入れる。  ## main.c あとはmain.cを整えてコンパイルすれば大丈夫なはずだったんだが、そうはならん。 ``` #include "mcc_generated_files/mcc.h" #include "mcc_generated_files/examples/i2c_master_example.h" void MCC_USB_CDC_DemoTasks(void); void main(void) { SYSTEM_Initialize(); INTERRUPT_GlobalInterruptEnable(); INTERRUPT_PeripheralInterruptEnable(); //INTERRUPT_GlobalInterruptDisable(); //INTERRUPT_PeripheralInterruptDisable(); while (1) { MCC_USB_CDC_DemoTasks(); } } ``` ## コンパイラバージョンアップという名の地雷 [MicrochipのXC8](https://www.microchip.com/en-us/tools-resources/develop/mplab-xc-compilers/xc8)は2025/12/19時点でv3.10のようだが、これでは先のコードはコンパイルできない。オプションにC90をうまく設定できないみたい(詳細不明)。  そこで、ページの下の方の「MPLAB XC8 Functional Safety Downloads」であるv2.49でも動かないのだ。たまたまインストールしてあったv2.50では動くというこの地雷っぷり。いい加減にせぇよ。。。コンパイラxc8のarchive downloadは[!!こちら!!](https://www.microchip.com/en-us/tools-resources/archives/mplab-ecosystem#xc8)