基于计数器的c8051
基于计数器的c8051
- 下载 F34x_Ethernet_Bootloader - 104.35 KB
- 下载 TCP_Wiz - 116.1 KB
- 下载 UniSockProject - 72.03 KB
- 下载 prClient - 29.04 KB
- 下载 SafeFinder - 21.3 KB
引言
UniSockProject 是一个类似 NetFinder 的实用程序,用于在本地网络中查找 Silabs CP2201EK 并将固件映像(boot1、boot2、boot3)更新到设备。
- boot1:每旋转磁盘1圈计数一次的映像,用于计算1米的塑料制品
- boot2:磁盘旋转2圈(2个传感器计数)= 1 米
- boot3:3个脉冲 = 1米
prClient 是用于监控计数器的客户端桌面版本。

传感器连接到 P0.3-> 接地
P0.2 复位输入
如果计数大于设定值,则输出 P2.6(所谓的 LS_EN
)变为高电平
(您可以在此处连接一个 5V 小型继电器或晶体管来切换其他负载)- 请参阅文档了解允许的电流。
使用的软件:Silabs IDE ver.'3.42' - 来自 'toolstick' 包 CD 或 Silabs 下载。
Keil 编译器 ver. '8.16a' 可从网络下载。
这里有一个软件论坛,用于提问 这里。
背景
Silabs CP2201EK 可以在当地的 Radioshack 商店找到(网上订购?)。
https://www.silabs.com/Support%20Documents/TechnicalDocs/CP2201-EK.pdf
https://www.silabs.com/products/mcu/Pages/CP2201EK.aspx
Using the Code
要使用此 VB6 源代码,您必须使用提供的 hex 文件更新 Silabs 芯片。
要更新固件,请使用 Silabs 的 'toolstick' - 就像我做的那样。
原型板:Protot
固件可以通过 'toolstick' 更新(如果您能焊接的话 - 也可以看看另一个版本的 toolstick,如 'Toolstick Base Adapter' - 它有更好的、更大的焊接线接口)。我更喜欢越小越好。
Counter_based_c8051/3b.JPG
无论如何,您只需要进行一次,即第一次上传固件。之后,您可以使用 'LAN' 以太网接口。
为此,只需使用文件-> 'boot1' 按钮。
为此,您必须首先通过按 'Search' 菜单找到设备,并且 'Ping' 操作无妨。
如果设备处于引导加载程序模式,您应该会看到此图像。
选项如下:
- '1' - 芯片会自动递增传感器数据
- '2' - 重启设备
- '3' - 重置计数器
- '4' - 引导加载程序模式
如果 string
长度超过一个字符 - 则将其重置值发送到设备。
例如 '33' 将 ResetValue
设置为 '33' 米(最初警报设置为 150 米)。
或者您可以在 PocketPC 上查看所有这些 - C# VS 2005 .NET 版本的 SafeFinder。
使用此程序,所有命令都与 VB6 版本的 UniSockProject 兼容。
此外,该 PocketPC 会通过振动和声音发出信号,表明是时候更换塑料卷了。
您可以在应用程序目录 'tada.wav' 中更改此声音 - 您也可以将启动文件放在那里。
对于那些想要真实代码的人,我提供了 c8051f340(也称为 CP2201EB)的修改后代码的 main
函数。
void main(void)
{
int retval;
bootload = 0;
autoload = 0;
reset = 0;
// Disable watchdog timer
PCA0MD = 0x00;
// Initialize the MCU
PORT_Init();
SYSCLK_Init();
EMIF_Init();
Timer2_Init();
#if(UART_ENABLED)
UART0_Init();
printf("\n*** Reset ***\nC8051F34x MCU Initialized\n");
printf("RSTSRC = %bx\n", RSTSRC);
#endif
if(RSTSRC & 0x03) netfinder_reset_event1();
RED_LED=0;
while(1)
{
if (mn_init() < 0){while(1);}
YELLOW_LED_STATE = BLINK_SLOW;
establish_network_connection();
if (mn_dhcp_start(PTR_NULL, dhcp_default_lease_time) <= 0)
{ dhcp_lease.infinite_lease = 1;// Override DHCP
dhcp_lease.dhcp_state = DHCP_OK;
ip_src_addr[0] = 0;// Specify a static IP address
ip_src_addr[1] = 0;
ip_src_addr[2] = 0;
ip_src_addr[3] = 1;}
netfinder_reset_event2();
if( netfinder_start() < 0 ){YELLOW_LED_STATE = SOLID_OFF; while(1);}
//UDP();
#if(TELNET_ENABLED)
telnet_socket_no = mn_open(ip_dest_addr,DEFAULT_PORT,SEND_PORT,
ACTIVE_OPEN,PROTO_UDP,STD_TYPE,TELNET_BUFF, TELNET_STR_SIZE);
if (telnet_socket_no < 0) {
TELNET_STATE = SOCKET_ERROR;
printf("TELNET_STATE = SOCKET_ERROR=%bd",telnet_socket_no);
}
else {
TELNET_STATE = CONNECTED;
printf("TELNET_STATE = CONNECTED\n");
}
#endif
retval = mn_server();
YELLOW_LED_STATE = BLINK_SLOW;
}
}
这实际上是修改后的 Silabs TelNet 示例,所以不要在意 TELNET 端口或其他使用的常量 - 我实际上使用了端口 8 来监听广播的 UDP 消息。
因此,任何在本地网络中的计算机(并且监听 UDP 端口 8)都可以监控传入的消息。
消息由 Silabs 使用的 Netfinder 端口发送 - 默认 3040 - 因此您也可以使用 Silabs 制造的 Netfinder 程序在网络中查找设备。
正如您所见,该接口可以通过 'hyperterminal' 监控,并允许您查看实际发生的情况。您必须将波特率设置为 115200,无奇偶校验...
我还制作了到 'toolstick' 的接口(再次是 .hex)- 为此,我认为您需要另一个 'toolstick' 来更新,就像我做的那样。如果您弄坏了 'toolstick' 的原始软件 - zip 文件中有一个原始的 hex 文件 '2.hex',您可以将其恢复正常。
下载 HIDtoUART_FW.zip - 无需驱动程序 - 这是一个 'Human Intelligent Device' - USB Debug Adapter(较小的那个)的 HID,以及可以读取 USB - UART 接口的 VB6 终端 下载 usbhidio2.zip (VB6)。
出于兴趣,我可以使用该程序读取任何遥控器的 IR 代码,就像 WinLirc 一样。只需将波特率设置为 4800 即可。但我想这是另一回事了。对于感兴趣的人,下载 USB_IR.zip (VB6)。
关注点
Silabs 芯片不实现真正的套接字类 - 实际上只有 udp 协议是可行的。
我找不到其他方法来用多台计算机监控我制作的那个 '计数器'。
历史
- 2009 年 2 月 22 日:初始帖子