从PIC-EL开始学PIC——第一部分
借助这款简单的外设接口控制器(PIC)演示板,快速掌握如何使用PIC微控制器
作者:Craig Johnson,呼号AA0ZZ
翻译:LifeWieller
本文已发表于《电子制作》2015年6月刊
你有没有想过为什么家里的电器都能够按照自己的节奏运行?你可以设定咖啡壶,微波炉,烤箱,恒温器,DVD,车载空调,车速表,里程表等;你能够很容易的调节新买的电台的波段、模式,能够记忆频率,改变CW发送速度,这些都离不开内部的“智能控制”。最开始,这些电器依靠分立元件控制,随着技术的进步,变为由集成电路控制。现在,许多家电通过微控制器控制。这些微控制器设计简单,价格便宜。只需要花不多的时间,你就能知道这些微控制器是怎样工作的,并且能够根据自己的想法制作出想要的东西。
准备好了么?
PIC微控制器最开始的名称是外设接口控制器(Peripheral interface controllers)。由于PIC微控制器出现较早,基于PIC编写的程序很多,所以直到现在仍然流行。不幸的是,很多程序复杂并且难以理解。另一方面,只要你有作为业余爱好者必备的决心和耐心,可以使用PIC制作出很多实用的工具,如CW自动键,频率计,直接数字频率合成(DDS)控制器,收发控制器,中继控制器,功率计,天线和电台控制等。只要你想,就会有无限可能。
微控制器,如PIC,和微处理器,如个人电脑中的Pentium处理器有什么不同?一个主要的区别是微控制器可以认为是集成在一块芯片上的微型电脑,其中包括中央处理单元(CPU),内存,输入/输出(I/O)接口。而个人电脑中的微处理器需要额外的内存模块,I/O处理部分才能正常工作。这并不是说PIC比Pentium更好或更强大,而是各自有不同的功能。对于许多业余无线电应用,一块PIC已经足以。
目前市面上有许多功能强大,价格便宜的PIC微控制器。它们的区别主要在引脚数目,内存大小和支持功能多少方面。一些型号带有Flash内存,可以多次编程,一些只能一次性编程。如果需要保护写入的程序不被读出,可以在编程过程中写入配置位实现。
本文的主要目的是带你了解如何使用PIC微控制器。新买的微控制器里面没有程序,你需要使用某种语言为它编写程序(使用普通的文本编辑器),使用汇编器或编译器将程序编译成PIC能够运行的代码,然后将代码写入微控制器中[注释1:汇编器或编译器是将人类可读的指令转化成PIC能够运行的代码的软件程序。]。至于怎样编写程序则不在本文范围之内。稍后我们会介绍Elmer 160,由John McDonough(呼号是WB8RCR)主讲的网上课程,其中包括如何编写PIC程序。
写好代码之后就可以下载到PIC-EL板子的PIC芯片中。首先将程序代码编译成PIC单片机可以执行的代码,然后将PIC微控制器通过特定硬件连接至电脑,便可将代码写入微控制器。在本文第三节或Elmer-160课程中介绍了几种编程软件包。
通过大量的例程或Elmer-160课程,爱好者可以了解到有趣的制作是怎样利用微控制器完成的。听起来很不错。
PIC-EL硬件介绍
图1是PIC-EL演示板的电路原理图。板子包括两部分——PIC编程器和演示板部分。
——PIC编程器
PIC-EL板子包括将编译好的PIC微控制器代码写入微控制器的硬件电路。电路通过RS-232(DB9F)串口连接到电脑。这部分电路参考了David Tait设计的一款编程器,原电路和编程器软件可从原作者主页people.man.ac.uk/~mbhstdj/piclinks.html获得,经作者授权,软件也可在ARRL网站下载[注释2:www.arrl.org/files/qst-binaries/Johnson0407.zip]。详细的电路说明见附录A[注释3:参见注释2]。
这版编程器电路中没有提供USB或并行接口。并口或USB编程器可以通过HDR-1连接至PIC-EL板子。因为并口低电平为0V,高电平为5V,所以板子并不能直接连接至电脑并口。并口TD引脚电压不会低于0V,导致电路图中将Q4发射极电压拉低至低于0V,获得低电平的部分电路不能正常工作。实际上当TD引脚电压为0V时,低电平只能降低至约3.2V。如果有需要,可以使用额外电路进行电平转换工作。
使用USB-串口转换器听起来是个好办法,不过到目前为止我还没有成功过。对PIC-EL编程需要信号之间的时间顺序准确对应,这是通过编程软件直接操作串口实现的,而串口是异步接口,也就是说我们需要在异步接口上进行同步操作。由于USB-串口转换器不能精确的控制各数据线之间的时间顺序,所以不适合为PIC编程。
演示板
演示板部分可以为初学者提供练习编程的平台,不管是控制最简单的电路或是复杂的项目都可以在这上面进行实验。
板子上具有以下硬件资源,可供PIC初学者学习并了解它们的使用方法:
⚪ 18引脚PIC微控制器(如16F84/A,16F628/A,16F88等型号),及4MHz晶振;
⚪ 2×16液晶显示屏(2行,每行16字符的液晶屏);
⚪ 旋转编码器(ENC – 1);
⚪ 三个通用按键,PB1 – PB3;
⚪ PIC微控制器复位按键(PB4);
⚪ 三个发光二极管,LED1 – LED3;
⚪ 带三极管驱动的扬声器(SPKR- 1);
⚪ 连接NJQRP DDS子板(DDS – 30或DDS – 60)的连接器[注释4:www.njqrp.org];
⚪ 连接CW电键的双声道耳机插座;
⚪ 带三极管驱动的双声道耳机插座,可用于监听发射键控信号;
⚪ 三极管输入电平转换电路,可将低电平信号转换PIC能够检测的信号电平;
⚪ 多用途BNC连接器;
⚪ 可通过HDR – 2选择BNC连接器是否连接到电路;
⚪ DDS输出可连接至BNC连接器;
⚪ DDS输出可通过电平转换电路连接至PIC输入引脚;
⚪ 提供2排6引脚连接器(HDR1 – CONFIG);
⚪ 可连接外部编程器;
⚪ 板载编程器可连接到外部芯片,为外部芯片编程。
因为多数PIC微控制器引脚都有两种以上功能,PIC-EL的电路图看起来比较复杂,需要根据功能电路分解为基本功能模块,逐个模块理解电路功能。后面我会介绍如何将功能模块应用于其他制作。
在本文的第二部分我会详细介绍演示板上的功能模块。
连接PIC-EL和电脑
现在你可以将PIC-EL连接至电脑,开始学习编写PIC程序了。在连接到电脑以前,你需要安装为PIC下载代码的软件。网上有很多此类软件可在Windows操作系统下运行(包括IC – PROG和WinPIC等,见图2),为方便初学者学习,本文将介绍由David Tait(呼号是G0JVY)编写的FPP,一个非常容易操作的PIC下载软件。在Linux和Macintosh系统上也能找到类似的软件包。
——安装FPP
你可以从David Tait的主页上下载到FPP软件,也可以从ARRL网站下载[注释5:www.people.man.ac.uk/~mbhstdj/piclinks.html][注释6:参见注释2]。如果你使用的是Windows95或Windows98,无需额外驱动即可运行FPP。如果你使用的是Windows2000或WindowsXP,则需要安装两个驱动:directio和loaddrv以便FPP控制串口。很多网站都提供这两个驱动下载,包括AmQRP Elmer-160网站。
——使用FPP
你需要一条9针直通串口线连接电脑和PIC-EL,串口线两端分别为DB9M插头和DB9F插头。将串口线一端插到电脑后面的RS-232C接口,另一端插到PIC-EL板子上。在运行FPP之前,你需要先关闭其他使用相同串口的程序。
虽然PIC-EL板子使用9V电源即可工作,但在下载代码时候需要通过CONFIG连接器(HDR1)向板子提供至少12V电压,以满足编程所需电压Vpgm。
——最后一步
当你连接好串口线,打开FPP软件,为PIC-EL板子提供至少12V电源,并按照第10课[译者注:Elmer-160课程]中的说明测试好板子之后,为PIC下载程序就是一件很简单的事情。
下载.HEX程序
HEX文件是可以在PIC微控制器运行的程序,这种格式的文件用16进制ASCII字符表示程序代码,是PIC汇编器生成文件的标准格式,并且能够被FPP程序接受。你可以从我的网站或PIC-EL的Yahoo群组的FILES部分下载到PIC-LE V2 测试程序,文件名是PICELv2diag.HEX。
——用FPP打开PICELv2diag.HEX
点击FPP窗口中的LOAD按钮,定位至你存放下载得到的PIC-EL V2压缩文件的目录,解压文件,你能看到PICELv2diag.HEX出现在文件列表里。双击文件名打开,文件的内容就会以16进制ASCII字符格式显示在FPP窗口中,如图3所示。
——拨动开关S1至编程(PGM)模式
将开关S1向下拨动,将PIC-EL演示板设为编程模式。LED4点亮,表示操作正确。
——擦除PIC微控制器原有程序
在下载新的程序之前可能需要清除现有的程序。点击ERASE按钮开始擦除。擦除成功后,软件会弹出“PIC is erased.”提示。
——向PIC中下载新程序
现在PIC内存已经清空,并且FPP软件已经加载了新的程序,只需点击PROGRAM按钮,在弹出的窗口中再次确认,即可将新的程序写入PIC微控制器中。下载程序需要一点时间,在下载完成后FPP会显示“DEVICE PROGRAMMED!”。如果提示“PROGRAMMING FAILURE”,检查PIC是否已经擦除,电源是否正确连接至PIC-EL,电压是否达到要求,串口线是否连接好。
——拨动开关S1至运行(RUN)模式
程序下载成功之后,就可以将模式选择开关S1向上拨动,设置PIC-EL板子为运行模式,编程指示灯(PGM LED)熄灭。
——复位板子,开始运行新程序
按板子上的RESET按键,复位PIC微控制器并开始运行新的程序。
PIC-EL测试程序
随PIC-EL套件附带的16F628微控制器已经写入测试程序,汇编源程序可从我的网站或PIC-EL的Yahoo群组的FILES部分下载。一边运行测试程序,一边看程序代码可以让你更好理解微处理器是怎样控制板子工作的。有一点需要注意,测试程序只是为测试板子功能而编写,一般的程序并不一定要按照测试程序的格式编写。
测试程序会在LCD第二行循环显示所有的测试项目。当你想进行的测试项目显示时,按下PB3开始测试。如果想要结束测试,按下PB3并保持约0.5秒。所有测试项目会重新循环显示。
——测试LED
这项测试开始后,三个LED会按照以下顺序点亮:
⚪ LED1点亮然后熄灭;
⚪ LED2点亮然后熄灭;
⚪ LED3点亮然后熄灭;
⚪ 三个LED同时点亮然后熄灭。
PGM/RUN指示灯不随上面三个指示灯亮灭。在开关S1处于编程模式时PGM/RUN指示灯点亮,在运行模式熄灭。
——测试按键
这项测试用于检测三个通用按键功能。按键功能如下:
⚪ 按下PB1,LED1点亮,松开PB1,LED1熄灭;
⚪ 按下PB2,LED2点亮,松开PB2,LED2熄灭;
⚪ 按下PB3,LED3点亮,松开PB3,LED3熄灭;
这个测试不包括RESET按键PB4。按下PB4会复位PIC微控制器,重新开始测试程序。
——测试扬声器
这项测试会让PIC-EL板子的扬声器发出一个全音阶的声音,从中央C开始,到高八度C结束,这样在中央C上的A音符发出的频率为440Hz。频率准确性取决于板子上的4MHz晶振,至少我听起来是挺准确的。
——测试编码器
这项测试能够测试编码器功能。测试开始时,在LCD显示屏上会显示8个数字,数字从0开始。顺时针旋转编码器,屏幕上显示的数字增大,逆时针旋转编码器,屏幕上显示的数字减小。这个测试通过检测编码器产生的格雷码判断旋转方向,如图8所示[译者注:图片在Part2文中]。
——测试CW电键
CW电键通过插座J3连接到PIC-EL板子上。电键插头的最前端和中间金属环分别与J3的两脚相连,并且分别和PB1、PB2相连。如果你没有电键,可以通过按PB1和PB2代替。按下电键的“点”(或PB1)时LED1点亮,按下电键的“划”(或PB2)时LED2点亮。
——测试发射键控
这个测试能够演示CW键控功能是如何工作的。除了PIC-EL之外,你还需要一部电台或振荡器。用一条1/8英寸的单声道连接线,一端插入PIC-EL板子的J8插座,一端插到电台或振荡器对应的插座。测试开始后,PIC微控制器控制Q7导通,将KEY线与地短接,控制电台或振荡器开始工作。
——测试DDS – 30子板
如果你有AmQRP生产的DDS – 30子板,可以用这项功能测试。DDS – 30插在PIC-EL板的J6插座上。这个测试功能控制子板产生7.040MHz,7.041MHz和7.042MHz三个频率(在液晶屏上显示时的单位为Hz,即显示为7040000,7041000,7042000),每个频率持续时间约0.5秒,三个频率循环输出。你可以用频谱分析仪或示波器观察波形,或将短波电台调到7.040MHz,如图4所示。
——测试DDS – 60子板
DDS – 60子板和DDS – 30不太一样,区别在于DDS – 60使用AD9851芯片,DDS – 30使用AD9850芯片。DDS – 60使用30MHz晶振,需要在软件中设置使用6倍频。DDS – 60和DDS – 30安装位置一样。选择这项测试功能之后,PIC微控制器会设置DDS – 60子板产生相同的三个频率,即7.040MHz,7.041MHz和7.042MHz。
——PIC-EL和Elmer – 160课程
我在2004年下半年设计制作完成第一版PIC-EL演示板,中间得到了几位AmQRP会员的帮助,他们是:George Heron,呼号是N2APB,Joe Everhart,呼号是N2CX,John McDonough,呼号是WB8RCR,Earl Morris,呼号是N8ERO,和Jim Kortge,呼号是K8IQY。起初John McDonough提出要开设一门在线课程,帮助初学者学习使用PIC微控制器,于是我们决定制作一款演示板,以便初学者在编写完成代码后可以马上运行。在三个月的时间里我制作出了若干版本的样机,测试它们,并最终制作出一版较为完整的印制电路板套件。在2005年初,这版套件在AmQRP俱乐部卖出了数百套,并且反响良好。
鉴于John把他的PIC在线课程称为Elmer – 160,我便为这块板子起名PIC-EL。PIC-EL使用的PIC微控制器型号是16F628,这是一款常见的中端PIC微控制器,在价格、容易使用和功耗方面较为平衡,也是业余制作中常用的型号之一。Elmer – 160课程从更加简单和低端的PIC微控制器,16F84开始讲起。16F628和16F84基本可以通用,互换时只需修改几行代码。PIC-EL演示板可以支持这两种微控制器,但是随板附带的16F628芯片中写入的测试程序比较大,不适合在16F84上使用。
PIC-EL在AmQRP俱乐部的销售几个月之后停止了。最近我对PIC-EL板子进行了更新,替换掉已经停产的元件,改正了几处小缺陷,并计划长期销售。目前的版本是PIC-EL第二版,价格是55美元,外加5美元运费,所有板子由Bill Kelsey(呼号是N8ET)从美国坎加发货[注释7:www.kangaus.com, [email protected],地址是Kenga, US, 3521 Spring Lake Dr, Findlay, OH 45840-9073]。
如果你对Elmer – 160课程感兴趣,可以到AmQRP网站了解详情[注释8:www.amqrp.org/elmer160]。你可以下载John的课程,如果有什么问题也可联系他。
问题和支持
和这个演示板相关的文件可以到作者网站下载。如果有其他问题,可以到PIC-EL的Yahoo群组提问,或者通过电子邮件联系作者。
总结
能够自己动手完成一些小制作,实现想要的功能,这确实能够令人感到满足。当然要想达到这样需要付出一些努力,但是它所带来的回报绝对值得你去努力。
在下一部分中我们会详细介绍PIC微控制器是怎样控制外围电路的。
Craig Johnson,呼号是AA0ZZ,从明尼苏达大学毕业,之后获得圣托马斯大学MBA学位。毕业之后,Craig在位于明尼苏达州的Unisys公司工作,从事大型机设计开发工作。目前Craig任职于明尼苏达州圣保罗的Minnetronix公司,从事基于微处理器的医疗设备开发工作。他目前持有六项电脑磁盘技术和I/O架构方面专利,并且还有三项专利申请中。
Craig在1964年,他14岁时首次获得业余无线电执照,并在6个月之后获得中级执照。Craig将他成为电子工程师的关键归结于业余无线电。在大学毕业后,Craig的兴趣集中在电脑方面,不再更新电台执照。在1995年,他的三个孩子中的两个对业余无线电产生了兴趣。现在,Craig一家五人都拥有业余无线电执照。
Craig对于业余无线电有着广泛的兴趣,包括DX通联和通联比赛。平时Craig基本上都使用CW模式通联,但对于数字模式通信同样具有浓厚的兴趣。Criga非常喜欢自己动手制作小功率电台,并使用自制电台通联。他曾经设计并制作使用PIC微控制器的DDS VFO,被世界数百位火腿使用。
Craig的地址是4745 Kent St, Shoreview, MN 55126,电子邮箱是[email protected],网站是www.cbjohns.com/aa0zz。
图1——PIC-EL演示板原理图,元件清单见表1
图2——运行DL4YHF编写的WinPIC软件的屏幕截图,正在向PIC微控制器中写入程序。
图3——运行FPP软件的屏幕截图,正在向PIC微控制器中写入程序。
图4——将PIC-EL第二版演示板作为信号发生器。AmQRP DDS – 60子板在演示板右边,PICELgen程序由作者(AA0ZZ)编写
表1:PIC-EL演示板元件清单
电阻为1/8W或1/4W。Digi-key网址是www.Digi-Key.com,Mouser网址是www.mouser.com,括号中为Digi-key或Mouser元件编号。
C1,C2——22pF瓷片电容(Digi-key P4841-ND, Mouser 140-50N2-220J)
C5,C8——4.7uF电解电容(Mouser 140-XRL16V4.7)
C3,C4,C6,C7,C9,C10——0.1uF独石电容(Digi-key P4910-ND, Mouser 80-C317C104M5U)
C11——0.22uF独石电容(Digi-key BC1149CT-ND)
D1,D2,D3,D4,D6——1N4148二极管(Digi-key 1N4148FS-ND, Mouser 625-1N4148)
D5——1N4742,12V稳压二极管,DO-41封装(Digi-key 1N4742ADICT-ND, Mouser 78-1N4742A)
ENC——旋转编码器(Digi-key P10860-ND)
HDR-1——0.1”间距,2×6排针(Mouser 571-1032406)
HDR-2——0.1”间距,2×2排针(Mouser 571-1032402)
HDR-3——0.1”间距,1×2排针(Mouser 571-1032392)
J1——电源插座,2.1mm(Digi-key SC1153-ND, Mouser 163-5004)
J2——DB9F串口插座(Jameco-104951)
J3,J8——耳机插座,1/8”,双声道(Mouser 161-3501)
J4——16针单排针(PCB安装用)(Mouser 571-16404526)
J5——18引脚DIP插座(PIC微控制器用)(Digi-key ED3118-ND)
J6——8引脚单排座,90°(SamTec, SSQ-108-04-T-S-RA)
J7——BNC插座,PCB安装式(Mouser 523-31-5538-10-RFX)
LCD——2行16字符液晶显示屏(08LCD9)(www.ElectronixExpress.com)
LED1,LED2,LED3,LED4——红色发光二极管,5mm直径(Digi-key P374-ND)
P4——16引脚单排座,LCD用(Mouser 517-974-01-16)
PB1,PB2,PB3,PB4——单刀单掷按键,非自锁(P8079SCT-ND)
PCB——印刷电路板(KangaUS)
Q1,Q2,Q3,Q5,Q7——2N3904 NPN三极管,TO-92封装(Digi-key 2N3904D26ZCT-ND)
Q4——2N2907A PNP三极管,TO-18封装(Digi-key 497-2577-5-ND, Mouser 610-2N2907A)
Q6——2N4401 NPN三极管,TO-92封装(Digi-key 2N4401-ND, Mouser 610-2N4401)
R1,R4,R5——22KΩ(Digi-key 22KEBK-ND, Mouser 291-22K)
R2,R3,R9——4.7 KΩ(Digi-key 4.7KEBK-ND, Mouser 291-4.7K)
R6,R16,R17,R18——2.2 KΩ(Digi-key 2.2KEBK-ND, Mouser 291-2.2K)
R7,R8——3.3 KΩ(Digi-key 3.3KEBK-ND, Mouser 291-3.3K)
R10——330 Ω(Digi-key 330EBK-ND, Mouser 291-330)
R11,R12,R20——1 KΩ(Digi-key 1.0KEBK-ND, Mouser 291-1K)
R13,R15——470 Ω(Digi-key 470EBK-ND, Mouser 291-470)
R14——5.6 KΩ(Digi-key 5.6KEBK-ND, Mouser 291-5.6k)
R19——6.8 KΩ(Digi-key 6.8KEBK-ND, Mouser 291-6.8k)
R21,R22,R23,R24,R25,R26,R30,R34,R36——10 KΩ(Digi-key 10KEBK-ND, Mouser 291-10K)
R27,R28,R31,R35——100 Ω(Digi-key 100EBK-ND, Mouser 291-100)
R29——560 Ω(Digi-key 560EBK-ND, Mouser 291-560)
R32——100 KΩ(Digi-key 100KEBK-ND, Mouser 291-100K)
R33——51 Ω(Digi-key 51EBK-ND, Mouser 291-51)
R37——6.2Ω(Mouser 291-6.2)
S1——双刀双掷拨动开关(Digi-key SW102-ND)
HDR1跳线帽——0.1”间距,2位跳线帽 (Mouser 571-3828115).
SPKR——扬声器(Digi-key 433-1028-ND)
U1——PIC16F628微控制器,已经预先写入测试程序(Digi-key PIC16F628-04/P-ND)
U2——L7805,5V稳压器(Digi-key 497-1442-5-ND, Mouser 511-L7805 ABV)
XTAL——4MHz晶振(Digi-key X405-ND, Mouser 520-HCU400-20)