編集履歴一覧に戻る
nichiconのアイコン画像

nichicon が 2021年02月27日16時16分30秒 に編集

コメント無し

本文の変更

Arduinoの自動書き込みにも使えるUSBシリアル変換器をPICで作りました。 これがあれば高いUSBシリアル変換モジュールを買う必要はありません。 Arduinoへの自動書き込みに対応するため、DTRピンを使えるようにしてあります。 ボーレートは115.2kbpsです。 # 材料 ・USBコネクター x1 ・PIC16F1455-I/P x1 ・1x5のピンヘッダ # プログラム MPLAB X IDEのMPLAB Code Configurator(MCC)を使います。 以下の画像を参考にしてMCCで設定してください。設定が完了したらgenarateボタンでプログラムを生成します。 ![キャプションを入力できます](https://camo.elchika.com/47b16ede2b012157a0550ef59bd959569e1920f6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f64393136393936612d363065642d343665382d613561662d343432313461396434363634/) ![キャプションを入力できます](https://camo.elchika.com/e642306a5876de7de236d6060217820db9f7e8b3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f38663032616431322d336134652d343561322d386133322d303336363335363236396339/) ![キャプションを入力できます](https://camo.elchika.com/a487f323604e738641020ff9cde69700f5120f30/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f39616162623638642d633635622d343839322d626434622d396666653965643762636438/) ![キャプションを入力できます](https://camo.elchika.com/7ee93d2097b330a498ea2a7ae5e223db87bebe90/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f63303735613931642d613638392d343261302d613734642d613166653731626162396361/) ![キャプションを入力できます](https://camo.elchika.com/02777bda183b207bce29d4af7b3fa992f45f2d41/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f32386638626266612d316165372d346533662d626362382d626363363963346163303631/) ![キャプションを入力できます](https://camo.elchika.com/160cabffe2b5df22341de6850f4b69f53b2a27cf/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f61663337616631622d326638372d343637332d393139312d313632653532663462316136/) MCCの設定が完了したらプログラムを書いていきます。 まず、USB_device_CDC.cを書き換えます。 下の画像のように117行目のUART_DTRにPORTCbits.RC3を設定してください。書き換えるのはこの部分だけです。 ![キャプションを入力できます](https://camo.elchika.com/2512e94f2b43048ac2b95a020d56a98af576cc10/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f34343066643237322d633762332d346430322d623565372d3461633739623339636466612f66326661646266642d326466652d343933362d383964372d336165353234613762353932/) 次にmain.cにプログラムを書きます。 以下にmain.cを載せておくのでコピペして使ってください。 #include "mcc_generated_files/mcc.h" #define No_Busy 0 #define Busy 1 #define data_buffer_size 64 static uint8_t USARTdata[data_buffer_size] ; uint8_t USART_ready = 0 ; uint8_t USARTdata_size = 0 ; uint8_t USART_index = 0 ; static uint8_t USBdata[data_buffer_size] ; uint8_t USB_index = 0 ; void main(void) { // initialize the device SYSTEM_Initialize(); // Enable the Global Interrupts INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts INTERRUPT_PeripheralInterruptEnable(); TRISCbits.TRISC2 = 0 ; PORTCbits.RC2 = 1 ; TRISCbits.TRISC3 = 0 ; while (1) { USBDeviceTasks() ; if(USBGetDeviceState() < CONFIGURED_STATE || USBIsDeviceSuspended()== true){ continue ; } USBCheckCDCRequest() ; if(EUSART_is_rx_ready() == true){ USBdata[USB_index] = EUSART_Read() ; USB_index++ ; USBdata[USB_index] = 0 ; } if(USBUSARTIsTxTrfReady() == true && USB_index > 0){ putUSBUSART(USBdata, USB_index) ; USB_index = 0 ; } CDCTxService() ; if(USART_ready == No_Busy){ USARTdata_size = getsUSBUSART(USARTdata, sizeof(USARTdata)) ; if(USARTdata_size > 0){ USART_ready = Busy ; USART_index = 0 ; } } if(EUSART_is_tx_ready() == true && USART_ready == Busy){ EUSART_Write(USARTdata[USART_index]) ; USART_index++ ; if(USART_index == USARTdata_size){ USART_ready = No_Busy ; } } } } /** End of File */ USBCheckCDCRequest();を入れる事でDTRピンを使えるようになります。 # 作り方 まずPICに上記のプログラムを書き込みます。

-

次にUSBコネクターのD+とD-をそれぞれとPICのUSBピンと接続します。

+

次にUSBコネクターのD+とD-をそれぞれとPICのUSBピンと接続します。VUSB3V3とGNDの間に0.1uFのコンデンサーを入れます。

最後にTXピンとRXピン、そしてDTRピンを使いやすいように引きだしてピンヘッダに配線したら完成です。 # 使い方 USBシリアル変換器のTXピンとRXピンを通信する相手のRXピン、TXピンと接続します。 この状態でUSBシリアル変換器として使うことができます。 さらにArduinoへの書き込みに使う場合は、先程の接続に加えてDTRピンとATmega328PのRSTピンを0.1uFのコンデンサーで接続しRSTピンを10kΩでプルアップします。 書き込み時に自動でリセットするので自動でファームウェアを書き込む事ができます。