打印
[活动]

【母亲节DIY】+ 示波器画图祝妈妈们节日快乐!

[复制链接]
1266|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 sylar^z 于 2020-5-8 10:20 编辑

   





祝家里两位妈妈身体健康,开心快乐!祝全天下所有伟大的妈妈们节日快乐!


---------------------------------------------------------------------------------------------------------------------------------   
    首先,介绍下玩板过程中用到设备和软件
    板卡:正点原子的F103板子。这个可以其他板卡替换,只要带2通道DAC输出即可。
       
    示波器:需要带X-Y显示模式。
       
    图片转像素点软件:在线工具WebPlotDigitizer。
    像素点转数组软件:dataConv_forXY2Array。
    图片素材
       
---------------------------------------------------------------------------------------------------------------------------------

图像数据生成
    打开https://apps.automeris.io/wpd/网站,点击左上角的File -> Load Image载入路图片,选择Image模式。
       
    载入图片成功后
       
    在右边的Color 选色中点击蓝色色块再点Color Picker选择字体颜色。
       
    然后选择设置采点的水平/垂直像素间距△X,△Y,这个可以设置采点的密度。最后点击Run,显示采点效果。
       
    在图的左侧,点击View Data可以显示当前所采集的像素点的坐标值。
    在数据窗口,将Sort by选为Nearest Neighbor,,Digits设为0,格式选为Fixed。点击Format生成数据。然后点击Download.CSV下载数据文件保存,该格式可以用EXCEL打开。这里我们直接下拷贝数据保存成TXT,便于后面使用转换工具转换。
       
图像数据转换
    将上一步保存的图像数据与dataConv_forXY2Array软件放在同一目录下。运行dataConv_forXY2Array将自动生成与TXT文档同名的H文件。

工程建立
    通过STM32CubeMX可快速配置工程,正确配置时钟后,本项目只需配置两路DAC输出即可。
       

添加代码
    在初始化DAC后使能两个通道的DAC。
/**
  * @brief DAC Initialization Function
  * @param None
  * @retval None
  */
static void MX_DAC_Init(void)
{
  /* USER CODE BEGIN DAC_Init 0 */
  /* USER CODE END DAC_Init 0 */
  DAC_ChannelConfTypeDef sConfig = {0};
  /* USER CODE BEGIN DAC_Init 1 */
  /* USER CODE END DAC_Init 1 */
  /** DAC Initialization
  */
  hdac.Instance = DAC;
  if (HAL_DAC_Init(&hdac) != HAL_OK)
  {
    Error_Handler();
  }
  /** DAC channel OUT1 config
  */
  sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  sConfig.DAC_OutputBuffer =DAC_OUTPUTBUFFER_ENABLE;
  if (HAL_DAC_ConfigChannel(&hdac,&sConfig, DAC_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  /** DAC channel OUT2 config
  */
  if (HAL_DAC_ConfigChannel(&hdac,&sConfig, DAC_CHANNEL_2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN DAC_Init 2 */
  HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
  HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
  /* USER CODE END DAC_Init 2 */
}
    主函数增加循环输出功能
/**
  * @brief The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
  /* USER CODE END 1 */
  /* MCUConfiguration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes theFlash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DAC_Init();
  /* USER CODE BEGIN 2 */
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
    for(uint16_t i = 0; i < PIXEL_DATA_LEN;i++)
    {
      HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1, DAC_ALIGN_8B_R, (pixel[0] - 165) * 3 / 4);
      HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2, DAC_ALIGN_8B_R, 255 - (pixel[1] - 100) * 10 / 11);
    }
  }
  /* USER CODE END 3 */
}

    由于示波器的X-Y显示分别率不高,所以DAC采用的是8位数据。输入数值根据图像像素规整到0-255范围内。
    完成程序后将板子连接到开发板,开启示波器的X-Y模式。图片中的图案就可以显示在示波器上了。

生成的坐标数组
#define PIXEL_DATA_LEN 357      
uint16_t pixel[PIXEL_DATA_LEN][2] = {
{170, 151},{177, 151},{180, 142},{191, 140},{192, 152},{199, 151},{206, 151},{213, 149},
{216, 147},{223, 148},{228, 146},{230, 151},{237, 150},{239, 143},{239, 135},{239, 127},
{237, 118},{230, 116},{223, 117},{216, 117},{209, 117},{202, 117},{195, 119},{188, 116},
{182, 120},{181, 130},{192, 127},{204, 128},{211, 126},{217, 130},{222, 137},{209, 137},
{212, 159},{205, 162},{209, 170},{215, 179},{216, 187},{209, 186},{202, 186},{195, 186},
{188, 186},{180, 185},{177, 175},{188, 174},{189, 162},{178, 163},{219, 165},{225, 174},
{223, 182},{230, 184},{236, 186},{238, 175},{238, 167},{238, 159},{249, 166},{250, 154},
{253, 149},{258, 150},{269, 155},{276, 155},{283, 154},{286, 151},{292, 154},{299, 156},
{306, 154},{314, 153},{321, 155},{325, 157},{328, 150},{335, 155},{342, 155},{351, 152},
{358, 152},{365, 152},{364, 145},{372, 147},{379, 152},{386, 152},{393, 152},{400, 152},
{407, 150},{414, 147},{421, 152},{426, 158},{427, 167},{437, 168},{441, 166},{444, 156},
{437, 156},{439, 147},{447, 146},{451, 137},{441, 136},{432, 131},{425, 131},{418, 133},
{416, 122},{411, 116},{404, 118},{403, 127},{398, 131},{391, 132},{384, 132},{376, 127},
{375, 138},{361, 132},{354, 132},{347, 131},{338, 129},{333, 130},{326, 130},{324, 135},
{319, 131},{311, 132},{305, 132},{298, 128},{291, 135},{286, 131},{279, 129},{272, 129},
{283, 140},{295, 147},{303, 145},{311, 141},{318, 144},{329, 140},{311, 124},{305, 121},
{311, 164},{314, 170},{320, 170},{326, 174},{331, 168},{338, 168},{333, 182},{340, 187},
{333, 194},{326, 191},{318, 187},{311, 189},{309, 198},{305, 202},{298, 201},{291, 199},
{289, 208},{296, 211},{296, 220},{286, 221},{280, 226},{279, 241},{286, 249},{295, 248},
{296, 245},{305, 244},{313, 247},{310, 254},{311, 262},{319, 260},{326, 260},{332, 260},
{339, 261},{347, 264},{355, 269},{362, 273},{370, 272},{371, 274},{376, 266},{382, 268},
{390, 264},{397, 262},{404, 260},{410, 263},{411, 272},{408, 279},{415, 280},{419, 273},
{422, 261},{430, 262},{437, 267},{444, 271},{450, 270},{444, 262},{438, 256},{429, 251},
{422, 245},{429, 240},{436, 240},{443, 240},{449, 240},{421, 235},{410, 232},{409, 241},
{402, 240},{395, 240},{392, 234},{388, 240},{380, 239},{382, 226},{383, 215},{390, 212},
{397, 213},{404, 210},{411, 208},{418, 204},{423, 198},{429, 194},{435, 186},{432, 182},
{437, 179},{427, 178},{413, 177},{413, 184},{408, 190},{401, 189},{394, 187},{382, 186},
{382, 178},{382, 170},{382, 162},{370, 158},{370, 166},{370, 174},{370, 182},{370, 190},
{370, 201},{369, 210},{376, 211},{381, 205},{382, 194},{361, 208},{354, 206},{354, 201},
{348, 203},{341, 198},{348, 195},{332, 211},{327, 209},{321, 216},{316, 220},{309, 220},
{304, 233},{309, 235},{297, 232},{322, 228},{322, 236},{331, 239},{334, 247},{327, 247},
{320, 246},{341, 247},{348, 248},{353, 247},{358, 256},{366, 262},{383, 258},{390, 254},
{397, 251},{404, 249},{408, 249},{412, 223},{418, 223},{394, 222},{416, 194},{413, 169},
{412, 160},{403, 140},{377, 116},{371, 117},{364, 118},{300, 169},{293, 169},{286, 168},
{278, 169},{271, 168},{282, 178},{289, 178},{286, 187},{280, 190},{276, 196},{268, 198},
{255, 185},{249, 180},{248, 190},{244, 197},{237, 198},{230, 196},{223, 196},{216, 195},
{249, 142},{250, 131},{249, 123},{244, 116},{301, 183},{301, 192},{332, 222},{340, 221},
{347, 220},{341, 230},{341, 238},{350, 234},{303, 259},{304, 266},{299, 271},{296, 271},
{292, 277},{289, 282},{291, 292},{286, 294},{288, 306},{289, 314},{292, 323},{295, 332},
{301, 339},{306, 347},{312, 353},{319, 362},{326, 368},{330, 373},{352, 378},{359, 375},
{367, 372},{374, 369},{381, 365},{388, 362},{395, 357},{402, 353},{409, 348},{416, 342},
{423, 337},{430, 330},{436, 324},{442, 316},{446, 309},{449, 301},{454, 298},{449, 291},
{455, 289},{453, 280},{448, 280},{401, 276},{295, 260},{289, 260},{288, 268},{446, 126},
{452, 119},{459, 113},{466, 109},{473, 107},{479, 105},{484, 113},{491, 112},{497, 112},
{502, 113},{477, 115},{470, 120},{463, 123},{456, 1}
};

像素点转数组软件:dataConv_forXY2Array    dataConv_forXY2Array.rar (11.92 KB)
内部包含转换软件、原始数据TXT和生成的H数据文件。

使用特权

评论回复

相关帖子

沙发
21ic小喇叭| | 2020-5-9 09:32 | 只看该作者
感谢分享,送您1000家园币~

使用特权

评论回复
板凳
ilymqdh| | 2020-5-9 11:16 | 只看该作者
这个优秀了

使用特权

评论回复
地板
gyh974| | 2020-5-9 15:10 | 只看该作者
厉害

使用特权

评论回复
5
musich| | 2020-5-11 23:56 | 只看该作者
厉害 +1

使用特权

评论回复
6
chunk| | 2020-5-12 11:23 | 只看该作者
诚会玩。

使用特权

评论回复
7
blust5| | 2020-5-12 11:53 | 只看该作者
厉害了

使用特权

评论回复
8
21ic小喇叭| | 2020-5-12 14:40 | 只看该作者
恭喜您获得母亲节活动奖品

请给小喇叭发邮件:wangyq@21ic.com

格式为:DSP活动 + 用户名 + 注册邮箱 + 姓名 + 电话 + 地址

奖品自开奖起为获奖用户保留1个月(2020年5月12日 至 2020年6月12日),逾期未领奖视为自动放弃。

使用特权

评论回复
9
sylar^z|  楼主 | 2020-5-12 16:47 | 只看该作者
21ic小喇叭 发表于 2020-5-12 14:40
恭喜您获得母亲节活动奖品

请给小喇叭发邮件:

邮件已发送。感谢二姨家。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

698

帖子

0

粉丝