Page tree
Skip to end of metadata
Go to start of metadata

硬件开发

1. 电路设计

用Altium Designer设计PCB电路。

底座:

 

LED板:

PCB设计文件见百度云盘->电子制作。

2. PCB生产

在网上找淘宝店打样,大约5 RMB一块。

注:上图是输出端口为PORTB,带Wifi接口,不带充电模块接口的电路板。

3. 组装

主要有这么几个步骤:

安装芯片

焊接基板

焊接LED板

组装外壳

4. 芯片选择

不同的芯片,程序不同,需要修改代码中的配置项后重新编译代码。

5. 输出针脚选择

原始设计是用PORTC,但因为开发板上只有PORTB有预先连接LED,改用PORTB更方便测试。

6. Wifi模块

可以考虑增加Wifi模块,支持远程控制。已经尝试过几个Wifi模块,概念验证已经通过。

7. 充电模块

可以增加充电模块和充电电池,支持不接电源线也可以工作。概念验证已经通过。用800毫安时的电池可以支持工作8分钟左右。

8. 必备工具

万用表

电烙铁,焊锡,松香

开发板

USBISP线

如上图

零件

导线

外壳

USB线

主程序开发

1. IDE

使用WinAVR

http://winavr.sourceforge.net/

安装完成后,启动内置的Programmer's Notepad。

 更多选择

ImageCraft Compiler for AVR Code Blocks IDE

2013年的时候还是收费软件,可以使用demo版。2016年已经免费并开源。网址:http://www.codeblocks.org/downloads

2. 原始代码

ledlamp-firmware.tgz

3. 修改后的源代码

不同的开发工具,对应的代码不一样。如果用WinAVR,代码不需要修改可以直接编译通过。为了实现不同的功能,需要做不同的修改。

  1. 添加调试代码flashLED()函数
    Copy of main.c_bak_before_clearing_main.c
  2. 修改LED的端口,原来的代码是在PORTC(0, 1, 2), 可以修改为PORTB(0, 1, 2),这样的话可以跟开发板上的测试LED端口一致,便于测试。
    main.c_change_port.c
  3. 添加键盘事件处理逻辑
    main.c_with_key_event_processing.c

如果是使用ImageCraft Code Blocks,需要修改代码才能编译通过。详情见:

 ImageCraft CodeBlocks 代码

ImageCraft Code Blocks

ComputerControlledLedLamp_code.zip

ImageCraft Code Blocks的代码貌似使用不同的头文件,因而需要修改才能编译通过。代码有如下修改

. 变量在函数开头定义
. 头文件修改
. TIMSK等变量替换为TIMSK0

代码区别如下:

 

Copy of main.c_compilationSuccess.c

注:中断部分(ISR(TIMER1_COMPA_vect)部分)不用修改可以编译通过,但会报警告。

4. 编译

对于WinAVR,打开Programmer's Pad程序,点击菜单Tools -> Make All可以进行build。注意,需要在main.c的同级目录下有Makefile文件,源代码文件名称为main.c。

编译结果:

PORTB: main.hex_port_b.hex

PORTC: 见原始firmware包

5. 写入

将firmware写入到芯片中,有两种方法,一种方法是用ISP编程器,将芯片插到ISP编程器上,然后通过USB连接电脑,电脑上安装驱动程序,然后启动Proisp程序。主要步骤如下:

  1. 安装驱动程序
  2. 连接USBISP线和开发板到电脑
  3. 启动proisp1.72
  4. 读出Flash -> 擦除芯片 -> 读出Flash -> 装载Flash -> 写入Flash
    注:读出是从芯片读,写入也是写到芯片。装载是从电脑文件系统装载。
    注2:需要正确选择芯片型号,如下图
     

另外一种方法是先用USBISP写入BootLoader到芯片的BootLoader区,然后通过AvrDude程序写入firm ware到芯片。AvrDude会跟芯片上预先写入的Arduino Boot Loader通信,将firm ware发送到Arduino Boot Loader,然后Arduino Boot Loader会把程序写入芯片的Flash存储。

Boot Loader开发

1. 编译

2. 写入Boot Loader

通过USBISP编程器和开发板将Boot Loader写入到芯片的Flash存储。具体做法参考主程序开发的写入部分。

3. 写入主程序

通过Boot Loader写入主程序到芯片的Flash存储。

替代方案

ESP8266和NodeMCU:高性价比的物联网解决方案

http://www.infoq.com/cn/articles/esp8266-nodemcu

为什么说 ESP8266 是业界里程碑??

https://www.zhihu.com/question/36358218

http://www.nodemcu.com/index_cn.html

http://frightanic.com/iot/comparison-of-esp8266-nodemcu-development-boards/

参考资料

1. ATMEGA8芯片引脚图

2. Computer Controlled LED Lamp
http://www.bitrot.de/ledlamp.html

3. USB接口连接的线序与颜色

http://luckytcl.blog.163.com/blog/static/142586483201211411248180/

  • No labels