电压采集后,除了利用OLED展示之外,还可以通过其他方式分享同去,这次我利用CAN与飞凌OK3568进行数据分享。
【 硬件平台 】 1、飞凌OK3568开发板一块。 2、瑞萨RA4M2开发板一块。 3、跳线器一个。 4、CAN分析仪一个。 5、数据电源一台。 【 联网方式 】CAN 【通讯协议】 can波特率为500K ID:001为电压值 data[0]为电压值高8位,data[1]为电压值低8位。转换公式为(data[0]<<8 + data[1]) /4096 *3.3 【具体代码】
新建can发送数据函数: void can_send_v(uint16_t data){ fsp_err_t err = FSP_SUCCESS; uint32_t time_out = WAIT_TIME; // time out uint8_t can_tx_msg[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uint8_t can_rx_msg[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; /* Initialize CAN module */ err = R_CAN_Open(&g_can0_ctrl, &g_can0_cfg); /* Error trap */ if(FSP_SUCCESS != err) { printf("\r\nCAN Open API failed"); } g_can_tx_frame.id = 0x001; g_can_tx_frame.type = CAN_FRAME_TYPE_DATA; g_can_tx_frame.data_length_code = 8; /* copy the tx data frame with TX_MSG */ g_can_tx_frame.data[0] = (uint8_t)(data>>8); g_can_tx_frame.data[1] = (uint8_t)data; //memcpy((uint8_t*)&g_can_tx_frame.data[ZERO], (uint8_t*)&can_tx_msg[ZERO], CAN_FRAME_TRANSMIT_DATA_BYTES); err = R_CAN_Write(&g_can0_ctrl, CAN_MAILBOX_NUMBER_0, &g_can_tx_frame); if (FSP_SUCCESS != err) { printf("\r\n CAN Write API FAILED"); can_deinit(); } /* wait for transmit flag bit to set */ while ((true != b_can_tx) && (--time_out)); if (RESET_VALUE == time_out) { printf("CAN transmission failed due to timeout"); } /* Reset flag bit */ b_can_tx = false; }传入参数为16位无符号整数,刚好为ADC采样的电压值。
修改adc采样函数如下: void read_adc(void){ fsp_err_t err = FSP_SUCCESS; double a0; uint16_t adc_data0=0; char vbuf[10]; (void) R_ADC_ScanStart(&g_adc0_ctrl); scan_complete_flag = false; while (!scan_complete_flag) { /* Wait for callback to set flag. */ } err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_2, &adc_data0); assert(FSP_SUCCESS == err); a0=(double)(adc_data0/4095.0)*3.3; printf("v: %.03f \r\n",a0); sprintf(vbuf,"%.03fV",a0); OLED_ShowString(24,24,vbuf,24); can_send_v(adc_data0);//这里用于CAN发送数据出去。}在飞凌OK开发板上,对数据进行解析: if id == 0x001: get_v = int(msg.data[0]) * 256 + int(msg.data[1]) get_v =(float(get_v)/4096)*3.3 tr_disp_v = '%.3f' % get_v #print(tr_disp_v) label_v["text"] = "电压值:" + tr_disp_v + 'V'
|