单片机常见问题问题

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

还剩3页未读, 继续阅读

您需要 才可以下载或查看没有帳号?

简单地说单片机常见问题就是一个小计算机系统。为了说明清楚这个问题得要从计算机说起。提到计算机大家可能马上会想箌“显示器、鼠标、键盘”,不过这不是一个计算机的核心和关键,计算机的核心部分在一边的机箱里呢打开机箱,可以看到机箱裏有主板、硬盘、光驱等。仔细观察主板这上面有CPU、内存条、BIOS芯片,通常还有25针的打印机接口等这些部件都是通过主板上的连线相互連接。

不论计算机复杂程度如何它总是由运算器,控制器存储器,输入/输出接口总线这五个部分组成。通常运算器和控制器被做成┅块芯片也就是CPU(中央处理器)。在计算机主板上内存条和BIOS芯片就是存储器,25针打印机接口就是输出/输出设备而总线则被设计在主板上,即各部件相互连接的线路

在一些应用场合,人们不需要计算机完成十分复杂的运算但却希望计算机小巧,可靠价格低。于是人们僦把组成计算机的这5个部分全部集成到一块芯片上也说是一块芯片就能构成一个独立的计算机,在当时的技术条件下这是一件了不起嘚事情,于是人们就用这个特征来为之命名称为“单片机常见问题”。

将构成一个计算机所需要的5个部分全部都集成到一块芯片中这塊芯片是否要很大、价格是否很高呢?并非如此。如果要把图1所示主板上的所有元件都集成到一块芯片中那当然非常昂贵,可能技术上也無法实现但很多单片机常见问题中所需要用到的功能完全没必要那么强大,因此很多单片机常见问题体积很小价格也很低。如市场上瑺见的单片机常见问题有814,1618,2028,4084等引脚,有些甚至只有6个引脚如图2所示是微芯公司(Microchip)发布的一款6引脚单片机常见问题。而价格从幾元到几十、上百元的都有有些品种在大批量定购时甚至可以低至1元以下。

刚接触到单片机常见问题的人往往会有个疑惑:既然人们已經有能力制造功能强大的计算机为何还要生产些功能不强的计算机?其实,功能强弱并不是决定是否生产的决定因素市场需要才是关键。比如用来控制一台电箱的计算机显然没必要使用“奔腾”芯片的强大运算能力,只要进行非常简单的计算作个比较,看一看温度是否在所控制区间之内然后再做出相应的控制就行了。

单片机常见问题在人们的生活中、工农业生产设备中处处有应用例如各定时装置、自动控制装置等。爱好者学习单片机常见问题应该注意观察事物找到自己周围能够使用单片机常见问题的场合,从而将学到的知识应鼡到实际中去例如,使用单片机常见问题技术改造传统的机电设备、在特定的场合使用单片机常见问题替代PLC等就有着广阔的应用前景;又洳使用单片机常见问题控制电扇、抽油烟机、空调等,从而制作出具有更强功能、能够通用的控制器也是可以尝试的。

  网上查遇到这个问题的人比較多有说驱动问题的,有说IDE设置问题的具体到我遇到的这个情况,原因是板子上插了RF24无线传输模块(也许线还没有插对)拔掉以后洅上传程序就正常了。
  2、nRF24L01+无线透传使用问题
  Arduino官网上似乎推荐Mirf这个库遇到一个问题,接收端运行几分钟后停止响应;试了另外一個RF24库遇到传输不稳定的问题,一时没有解决还是回到Mirf了,之前的停止响应问题没有再出现
  这个论坛关于无线透传的讨论不少,雖然用arduino的不多
  Mirf的地址问题:Mirf的address是有长度要求的,例如可以用“serv1”、“clie1”作为地址长度过短会导致无法传输,例如用“cl2”作为地址试了好多次才发现这个问题。
  nRF24L01模块(使用Mirf库时)的自动应答问题:项目里使用一个nRF24L01(服务端)接收多个nRF24L01(客户端)的消息发现客戶端之间互相收到本应发到服务端的消息,经过多次试验发现应该与nRF24L01的自动应答机制有关。在Mirf.cpp的setTADDR方法里可以看到目标地址被同时写到RX_ADDR_P0囷TX_ADDR这两个寄存器里,前者是接收自动应答使用的(一个nRF24L01可以有6个接收地址同时工作)导致peer发到服务端的消息也被当作自动应答了。为避免这种干扰我实验下来的方法是:每个客户端在发送数据之前先setTADDR到一个无效且唯一的地址,在send之前那一刻再使用setTADDR将地址设置到服务端的哋址发送完成后马上setTADDR到那个无效地址。
  最后决定使用的方案是:写一个专门的小程序(量产程序)对每个arduino运行一次,在EEPROM里写入唯┅的id号正式程序运行时只需读取,不做修改代码参考注意:EEPROM的擦写次数是有限制的,一般标称为10万次但有人声称实验结果只有100次左祐。还好这个比较靠谱的实验测试结果是超过100万次,总之写入EEPROM时慎重
  3.3v/5v通用,接数字信号口使用DHT11这个库获得数据。DHT11精度不高若偠求高可使用DHT22(也叫AM2302)。
  6、同一段代码在两块板子上运行效果不同
  两块板子都是uno+sensor shield+nrf24l01其中一块运行完全正常,另一块无法接收到消息(可以发送消息)交换sensor shield(连同上面的nrf)无效,交换usb线无效接外接12v无效。最后发现如果在代码的loop()里加delay(100)则基本能接收到消息泹还有部分丢包。两块板子是从不同卖家处购买的看来还是有区别啊。
shield像这种),再把nrf24l01接到扩展板上则工作正常。仔细检查过连线沒有问题且分别替换过nano和nrf模块usb线等,都没有效果最后发现nano板子上的3.3v针脚电压不对,几乎是零联系卖家检查后说是nano上少一根线,要把usbロ背后的两个(C1和C7)靠近芯片的引脚短接照此方法问题解决。而扩展板上的3.3v针脚是用asm从5v降压得来所以没有这个问题。
  nano的官方文档說只有用usb供电时3.3v针脚才有电压但经实验,我手上的这一版(电容短接后)不论用usb供电还是通过vin供电3.3v针脚都有3.3v电压。
  上传时按reset按钮鈈起作用DTR线也已经连接。经过反复实验发现两个问题导致这个现象:1)arduino上的RX应该接ft232rl的TX,TX接RX我一开始接反了;2)一开始用的FTDI的驱动是朂新的2.0.8.30,在这个帖子的提示下降级到2.0.8.24后问题解决。PS.最好搜索并下载CDM20824_Setup.exe文件以便强制降级
  又测试了一下DTR线的作用,如果连接了DTR线直接上传程序就可以成功;如果不连接DTR线,在提示Uploading时立刻按一下arduino的reset按钮也可以上传成功,不按按钮则上传失败
mini了。这个帖子里有人提到茬DTR线上加一个100nF的电容是关键的一步但我手边没有这个电容,而且即使我不连接DTR线采用手动reset的方式仍然不行后来使用PL2303模块的下载线(只囿四个脚,与ft232rl相比少了DTR脚)配合手动reset方式可以正常上传程序到arduino
  Arduino的长整型是32位的,而Java里是64位互传数据时别搞错了。关于arduino里的数据类型10、电池供电方案
  我花了不少时间在研究各种供电方案上要平衡电池容量和带来的体积增加,还要考虑电池成本因素:
  方案1: 5號/7号干电池供电为达到至少3.3v的电压以便驱动arduino pro mini+nrf24l01,需要至少三节电池体积太大放弃;方案2:CR2032纽扣电池供电,同样电压不足(标称3V)实测3.2V泹后来会有电压下降,在3V左右arduino能启动但无线模块不正常;方案3:3.7V锂电池供电这是目前采用的方案,目标是让一块250mAh的锂聚合物电池能维持設备运行2个月以上为节约成本和体积,锂电池充电模块将采用外置的方式
  这段代码可以检测当前VCC脚的电压(仅支持328和168),有助于實现提示电池电量不足我在pro mini 5v上实测可用。
  11、减小工作电流
  目前采用arduino pro mini 5v/16MHz版本这个版本在tb上的售价为13元人民币左右,而3.3v/8MHz的版本要17元咗右实测5v版本用3.3v电源(输入VCC)仍然可用,只是这时核心频率可能会低于16MHz影响不大。
  为减小工作电流以获得尽可能长的工作时间設备绝大多数时间进入睡眠模式(使用LowPower库),利用watchdog周期性醒来发送数据然后立刻回到睡眠模式。参考链接nrf24l01模块也需要同时睡眠和醒来使用Mirf库里的powerDown()命令。
  传感器供电:如果直接将传感器接在5v或3v3上传感器会一直消耗电流。为了节电可以将对电流要求不高的传感器接在digital输出上,当arduino需要使用传感器时再对它通电参考链接1、参考链接212、TP4056充电板的充电电流问题
  tb上买的TP4056芯片的锂电池充电板,要更改嘚Rprog是在电路板下方中部(电路板上文字方向为正)的一个小贴片电阻出厂时阻值是1.2k。我需要90mA的充电电流按照说明,替换成15k左右的电阻
  测试充电电流时遇到一点问题:发现充电电流比预想的要低,77mA左右而且几乎一开始就缓慢下降,并不是恒流的查了一些资料后發现,我是把串接到BAT+口上的而万用表对这个电流造成了影响,因为使用不同的档位测出来的电流值不同高档位显示的电流比较高。实際应该串接到In+口或者测量Rprog电阻的电压然后(V/Rprog)*1200得到充电电流。参考链接13、analogRead(0)与analogRead(A0)的区别
  如果这个帖子所说属实,在Arduino IDE 0022以上这两個命令没有区别A0的值为14,而analogRead(0)等价于analogRead(14)补充:又找到一个帖子说的比较详细。
  14、搭建最小系统的问题
  a) 我在tb上买的usbaspvcc脚居然与gnd脚短接(!),vcc脚旁边的那个看不清字的脚有5v电压;后来仔细一看是文字距离对应的针脚太远,以致于串行了
ide版本不同的原因,原帖里的内容需要略作修改按照ide的错误提示来改即可。另一个帖子虽然我没实际试验,但也值得一看
  c) 顺便提醒一下用“面包板专用电源”的,要注意电源插针的极性——电源插在面包板两端时正负极刚好是反过来的
  d) 可能是面包板不太牢靠,在面包板仩搭的最小系统很不稳定后来焊到洞洞板上就没有问题。
  e) 如果使用programmer(例如usbasp)刷sketches到最小系统注意每刷一次EEPROM都会被清除,解决的办法是将EESAVE熔丝位设置为1

我要回帖

更多关于 单片机常见问题 的文章

 

随机推荐