打印
[学习笔记]

【AutoChips 7801x MCU评测报告】+基于UCOS的生产线计数系统

[复制链接]
3000|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yljon|  楼主 | 2020-6-9 22:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于UCOS的生产线计数系统

一、设计我要的计数系统:
我要将生产线的产品进行计数:1.记录产品总数;2.记录不良品数量;
这个逻辑关系是:检测到产品是良品就将总数+1;检测到产品是不良品将总数+1同时将不良品数+1,如下图所示:



二、初识开发板,准备好硬件
       收到快递短信,去拿快递,一眼就认出是我的,因为快递包装秉承二姨家的作风:黑色塑料袋+气泡袋+静电袋。
拿到开发板,看上去很不错,
1.供电是USB口,我要准备USB线
2.找到手头ST_Link
3.找到我这个多次出场的串口屏
有这几样就满足我测试需求了,好了,开动。



三、到官网找资料看看,电路图要搞到
上官网( http://www.autochips.com/cn/MCU/info/AC7801x/ )找些资料看看,
电路图找到了:
确认了几个信息:
串口使用UART1,在PA4和PA5;
按钮作为计数用,K6/K7在PC6和PA11;
这个信息在后面写程序要用啊,提前准备着





四、搭建环境,开始让KEIL工作
ST-LINK的驱动以前好像装过,
用USB线将开发板连接电脑,在设备管理器看见这样:



打开KEIL,在设置里看见这样,至此驱动安装就OK啦。



五、搭建环境,芯片的PACK下载安装
由于我的开发环境是KEIL,从官网下载安装的是AutoChips.AC780x_DFP.0.0.2.pack
在KEIL里看见如下就意味着PACK搞好了。



六、搞定代码,点亮屏幕
从官网直接下载了一个UCOS,这可是好东西,都移植好的UCOS,使用爽歪歪啊



AC7801X的串口驱动和按钮驱动都很简单,如下代码看一下就懂了;
移植好的UCOS也不费劲,用它演示的这2个线程即可;
干脆将所有代码都贴出来,这就这么一点,全部放在main.c文件中了:



#include "main.h"
#include "ac780x_gpio.h"
#include "ucos_ii.h"  

#include "ac780x_uart.h"
#include "ac780x_uart_reg.h"

static OS_STK s_task0Stk [Task0StkLengh];       /* Define the DemoTask0 stack */
static OS_STK s_task1Stk [Task1StkLengh];       /* Define the DemoTask1 stack */


#define KEY_PRESS                      (GPIO_LEVEL_LOW)
#define KEY_RELEASE                    (GPIO_LEVEL_HIGH)
#define KEY6_PORT                        (GPIOC)
#define KEY6_PIN                        (GPIO_PIN6)

#define KEY7_PORT                        (GPIOA)
#define KEY7_PIN                        (GPIO_PIN11)
#define GET_KEY6_STS()                (GPIO_GetPinLevel(KEY6_PORT, KEY6_PIN))       
#define GET_KEY7_STS()                (GPIO_GetPinLevel(KEY7_PORT, KEY7_PIN))       

uint32_t TT;
uint32_t NG;

void mydelay()
{
        uint16_t nn=0;
        for(nn=0;nn<3000;nn++)
        {
        }
}

void EXTI_Key6_Callback(void *device, uint32_t wpara, uint32_t lpara)
{
        if (GET_KEY6_STS() == KEY_PRESS)
        {
                        TT=TT+1;
                        NG=NG+1;
        }
}

void EXTI_Key7_Callback(void *device, uint32_t wpara, uint32_t lpara)
{
        if (GET_KEY7_STS() == KEY_PRESS)
        {
                        TT=TT+1;
        }
}
void KEY_Init(void)
{
        GPIO_SetFunc(KEY6_PORT, KEY6_PIN, GPIO_FUN0);
        GPIO_SetFunc(KEY7_PORT, KEY7_PIN, GPIO_FUN0);
        GPIO_SetDir(KEY6_PORT, KEY6_PIN, GPIO_IN);
        GPIO_SetDir(KEY7_PORT, KEY7_PIN, GPIO_IN);
        GPIO_SetPullup(KEY6_PORT, KEY6_PIN, ENABLE);
        GPIO_SetPullup(KEY7_PORT, KEY7_PIN, ENABLE);
        GPIO_EnableExternalInterrupt(KEY6_PORT, KEY6_PIN, EXTI_TRIGGER_FALLING);
        GPIO_EnableExternalInterrupt(KEY7_PORT, KEY7_PIN, EXTI_TRIGGER_FALLING);
        GPIO_SetCallback(KEY6_PIN, EXTI_Key6_Callback);
        GPIO_SetCallback(KEY7_PIN, EXTI_Key7_Callback);       
}


void UART1_Init(void)
{
    GPIO_SetFunc(GPIOA,GPIO_PIN4, GPIO_FUN3);
    GPIO_SetFunc(GPIOA,GPIO_PIN5, GPIO_FUN3);
    CKGEN_Enable(CLK_UART1, ENABLE);
    CKGEN_SoftReset(SRST_UART1, ENABLE);
    UART_SetDivisor(UART1, (float)APB_BUS_FREQ / 16 / 9600);
    UART_SetDataBits(UART1, UART_WORD_LEN_8BIT);
    UART_SetStopBit(UART1, UART_STOP_1BIT);
    UART_EnableTX(UART1, ENABLE);
    UART_EnableRX(UART1, ENABLE);
    UART_Set2ByteFIFO(UART1, ENABLE);

    UART_SetInterruptEn(UART1, 9);       
}


int main(void)
{
        TT=0;
        NG=0;
        UART1_Init();
        KEY_Init();
    SysTick_Config(SYSTICK_CLOCK);
    OSInit();
    OSTaskCreate(DemoTask0, (void *)0, &s_task0Stk[Task0StkLengh - 1], Task0Prio);
    OSTaskCreate(DemoTask1, (void *)0, &s_task1Stk[Task1StkLengh - 1], Task1Prio);
    OSStart();
    return 0;
}

void DemoTask0(void *pdata)
{
                uint8_t SendBuf[11];
                uint8_t ll=0;
                SendBuf[0]='n';
                SendBuf[1]='0';
                SendBuf[2]='.';
                SendBuf[3]='v';
                SendBuf[4]='a';
                SendBuf[5]='l';
                SendBuf[6]='=';
                SendBuf[7]='1';
                SendBuf[8]=0xff;
                SendBuf[9]=0xff;
                SendBuf[10]=0xff;
    while (1)
    {
                        SendBuf[7]=TT+0x30;
                        for (ll=0;ll<11;ll++)
                        {
                                        UART_SendData(UART1, SendBuf[ll]);
                                        mydelay();
                        }     
        OSTimeDly(97);
    }
}


void DemoTask1(void *pdata)
{
                uint8_t SendBuf[11];
                uint8_t ll=0;
                SendBuf[0]='n';
                SendBuf[1]='1';
                SendBuf[2]='.';
                SendBuf[3]='v';
                SendBuf[4]='a';
                SendBuf[5]='l';
                SendBuf[6]='=';
                SendBuf[7]='1';
                SendBuf[8]=0xff;
                SendBuf[9]=0xff;
                SendBuf[10]=0xff;
    while (1)
    {
                        SendBuf[7]=NG+0x30;
                        for (ll=0;ll<11;ll++)
                        {
                                        UART_SendData(UART1, SendBuf[ll]);
                                        mydelay();
                        }
        OSTimeDly(103);
    }
}

七、学习将视频上传
将上述代码编译烧录,看看效果,完全符合设计思路,也具有实用价值,哈哈哈哈



下面演示按钮,视频网址如下:https://www.bilibili.com/video/BV1n54y1Q77A
K7:生产线产品的良品过站,将生产总数+1;
K6:生产线产品检测到不良品,将生产总数+1同时将不良品数量+1;


八、开发板评价
1. AutoChips的这个M0系列的开发板,方便使用;
2. 代码风格和指令有一些特殊,上手时候要看看示例才可以
3. 外设功能大同小异,指令有一些不太一样,看过手册也都能明白
4. 这块开发板的其它功能,待后续慢慢搞
5. 最后,为二姨家举办这样的活动,点赞!!

@21ic小喇叭@21小跑堂 ,我提交作业啦


使用特权

评论回复
评论
21小跑堂 2020-6-10 09:07 回复TA
好嘞,收到~ 

相关帖子

沙发
yljon|  楼主 | 2020-6-9 22:40 | 只看该作者
本帖最后由 yljon 于 2020-6-9 22:47 编辑

认认真真来评测,改造了几点:
1. 将UART1和UART2的接头由pitch2改造为pitch2.54;
2.装了支撑柱,避免板子背面引脚刮伤;
3.串口屏也加装了支撑柱;




视频那个链接还是不能点啊


使用特权

评论回复
板凳
Cjy_JDxy| | 2020-6-10 09:06 | 只看该作者
顶一下。

使用特权

评论回复
地板
marginer| | 2020-6-10 09:16 | 只看该作者
不错不错,改造的也很精致

使用特权

评论回复
5
AutochipsMCU| | 2020-6-10 09:20 | 只看该作者
点赞

使用特权

评论回复
6
caizhiwei| | 2020-6-11 15:39 | 只看该作者
不错不错,改造的也很精致

使用特权

评论回复
7
zjgchenzhen| | 2020-6-12 08:45 | 只看该作者
赞,很不错

使用特权

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

本版积分规则

23

主题

421

帖子

5

粉丝