请问如何用一节3伏纽扣电池给8051供电?

[复制链接]
7781|23
 楼主| sky657 发表于 2013-4-29 21:35 | 显示全部楼层 |阅读模式
本帖最后由 sky657 于 2013-4-30 11:45 编辑

如果不行的话有没有什么便宜的类似芯片可以代替呢?芯片是用来控制adxl345倾斜角传感器(占两个I/O口)和振动电机、两个发光二极管的。如果不用msp430代替呢(要重新学,先就用8051).
lyjian 发表于 2013-4-29 21:37 | 显示全部楼层
C8051F9xx系列可以,功耗比较低
 楼主| sky657 发表于 2013-4-29 21:50 | 显示全部楼层
这个系列好像要十元左右,80c52只要3元

评论

额,好便宜,看来我上次被坑了,AT80c51上次那人卖我7块,好吧,都是欺负新人啊  发表于 2013-4-29 22:03
 楼主| sky657 发表于 2013-4-29 21:56 | 显示全部楼层
msp430行吗
NE5532 发表于 2013-4-30 07:37 | 显示全部楼层
要看你用的51的工作电压范围是多少,如果低到2.8就可以,但是51的功耗都比较大,这个应用建议你用PIC或者430
ningling_21 发表于 2013-4-30 08:32 | 显示全部楼层
sky657 发表于 2013-4-29 21:56
msp430行吗

那要看430能否在3V工作。

C8051F9XX倒是可以
 楼主| sky657 发表于 2013-4-30 11:46 | 显示全部楼层
如果就用8051呢?
huangxz 发表于 2013-4-30 11:58 | 显示全部楼层
sky657 发表于 2013-4-30 11:46
如果就用8051呢?

买一个DCDC(3->5V)模块,淘宝上有10多块钱。
wlq_9 发表于 2013-4-30 12:13 | 显示全部楼层
用低功耗的低压单片机可以.象430可以到1.8V.
DCDC不可能的事情,钮扣电池几十个maH的容量,能折腾几回?
huang51 发表于 2013-4-30 15:28 | 显示全部楼层
最侍选择MSP430 G系列,相对价格低,功耗低,足以满足你的需求
 楼主| sky657 发表于 2013-4-30 15:44 | 显示全部楼层
我发现松翰系列单片机更便宜,比如sn8p2711A只要两元,就是不知道怎么烧录和编程,它的c语言好像有点不一样
yingdea 发表于 2013-4-30 21:18 | 显示全部楼层
pic单片机有功耗很低的版本,可以用着看看。而且都是C编程,上手很快啊~
西门看雪 发表于 2013-5-1 08:25 | 显示全部楼层
wlq_9 发表于 2013-4-30 12:13
用低功耗的低压单片机可以.象430可以到1.8V.
DCDC不可能的事情,钮扣电池几十个maH的容量,能折腾几回? ...

可以整个电荷泵哇,比如LTC1516或者MAX619之类的,2V ~ 5.5V --> 5V 标准状态下器件本身只需要消耗十几个uA的电流就OK了。不过有点小贵了,要十几块RMB一片...

评论

那就用SGM3110吧,不到1元的价格,可以提供100mA的电流  发表于 2013-5-2 12:52
logokfu 发表于 2013-5-1 09:14 | 显示全部楼层
sky657 发表于 2013-4-30 15:44
我发现松翰系列单片机更便宜,比如sn8p2711A只要两元,就是不知道怎么烧录和编程,它的c语言好像有点不一样 ...

那个是OTP的,得有专门的烧录器,和仿真器。可以用C语言编程的。
 楼主| sky657 发表于 2013-5-1 20:27 | 显示全部楼层
**kfu 发表于 2013-5-1 09:14
那个是OTP的,得有专门的烧录器,和仿真器。可以用C语言编程的。

如果需要控制8个led灯,rom空间4kb,选什么型号的?如果还要再控制5个8字lcd又选什么型号呢?
logokfu 发表于 2013-5-1 20:38 | 显示全部楼层
sky657 发表于 2013-5-1 20:27
如果需要控制8个led灯,rom空间4kb,选什么型号的?如果还要再控制5个8字lcd又选什么型号呢? ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| sky657 发表于 2013-5-1 21:38 | 显示全部楼层
**kfu 发表于 2013-5-1 20:38

请问一下有没有松翰的学习视频或pdf资料啊,麻烦你传到论坛上,或者传到我qq,谢谢!
我是买松翰的烧写器+仿真器还是只买仿真器(好像带仿真)就行?
646539222@qq.com   谢谢!
logokfu 发表于 2013-5-2 09:12 | 显示全部楼层
sky657 发表于 2013-5-1 21:38
请问一下有没有松翰的学习视频或pdf资料啊,麻烦你传到论坛上,或者传到我qq,谢谢!
我是买松翰的烧写器 ...

松翰的仿真器和烧录器是分开的,都得有才行啊,仿真器+烧录器大概得1500大洋吧。

没有学习视频,PDF资料你可以上官网下载啊。就是个datasheet。编程语言就是C语言操作下寄存器而已。没什么复杂的。
logokfu 发表于 2013-5-2 09:14 | 显示全部楼层
当然松翰主推的是汇编,毕竟空间太小,不过一般的应用用C还是写的下的。呵呵。
logokfu 发表于 2013-5-2 09:44 | 显示全部楼层
本帖最后由 **kfu 于 2013-5-2 09:47 编辑


这个是个简单的eeprom读写测试程序的完整工程。你可以试试。
  1. /**
  2. ******************************************************************************
  3. * @filesn8p_eeprom.c
  4. * [url=home.php?mod=space&uid=187600]@author[/url] gdw
  5. * [url=home.php?mod=space&uid=895143]@version[/url] V1.0
  6. * [url=home.php?mod=space&uid=212281]@date[/url] 2013.3.22
  7. * [url=home.php?mod=space&uid=247401]@brief[/url]  eeprom read&wirte
  8. ******************************************************************************
  9. * @attention
  10. * sn8p2711 Fcpu=Fosc/4=16MHz/4=4MHz 测试通过
  11. * 通信速率:100KHz
  12. ******************************************************************************
  13. */



  14. #include"sn8p_eeprom.h"

  15. bit error;

  16. static void delay5us(void)
  17. {
  18. __asm{
  19. JMP $+1;
  20. JMP $+1;
  21. JMP $+1;
  22. JMP $+1;
  23. JMP $+1;
  24. JMP $+1;
  25. JMP $+1;
  26. }
  27. }


  28. static void start(void) //开始信号
  29. {
  30. sdam=1;
  31. sclm=1;
  32. sda=1;
  33. scl=1;
  34. delay5us();
  35. sda=0;
  36. delay5us();
  37. scl=0;
  38. }

  39. static void stop(void) //停止
  40. {
  41. sdam=1;
  42. sclm=1;
  43. sda=0;
  44. delay5us();
  45. scl=1;
  46. delay5us();
  47. sda=1;
  48. delay5us();
  49. }

  50. static void ack(void) //应答
  51. {
  52. uchar i=0;
  53. sdam=1;
  54. sclm=1;


  55. sda=1;//释放sda数据总线
  56. sdam=0;
  57. delay5us();
  58. scl=1;

  59. delay5us();


  60. while((sda==1)&&(i<8))
  61. {
  62. i++;
  63. }
  64. if(i>5)
  65. {
  66. i=0;
  67. error=true;
  68. //SLEEPMODE;
  69. }
  70. scl=0;
  71. }

  72. static void MasterAck(void)
  73. {
  74. sclm = 1;
  75. sdam = 1;
  76. scl = 0;
  77. sda = 0;//MasterAck
  78. delay5us();
  79. scl = 1;
  80. delay5us();
  81. // sda = 1; //出现问题点
  82. sdam =0;
  83. scl = 0;
  84. }


  85. static void Write_Byte(uchar data)
  86. {
  87. uchar i;
  88. sclm=1;
  89. sdam=1;
  90. for(i=0;i<8;i++)
  91. {
  92. if(data&0x80>>i)
  93. {
  94. sda=1;
  95. }
  96. else
  97. {
  98. sda=0;
  99. }
  100. delay5us();
  101. scl=1;
  102. delay5us();
  103. scl=0;
  104. }
  105. }



  106. static uchar Read_Byte(void)
  107. {
  108. uchar i,b=0;

  109. sdam=0;
  110. sclm=1;

  111. for(i=0;i<8;i++)
  112. {
  113. scl=1;
  114. delay5us();
  115. b=(b<<1)|sda;
  116. scl=0;
  117. delay5us();
  118. }
  119. sda =0;
  120. sdam=1;

  121. return b;
  122. }


  123. /****************************************************************************
  124. * _______ _ _ _ _ _ _ _ _ _ ______
  125. *SCL \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
  126. *
  127. * start| 1 0 1 0 0 0 0 0 |ack |stop
  128. * ____ ___ ___ ___
  129. *SDA \___/ \___/ \___________________/___\___/
  130. *
  131. *****************************************************************************
  132. * _______ _ _ _ _ _ _ _ _ _____
  133. *SCL \___/ \___/ \___/ \___/ \___/ \___/ \___/ \___/ \___/
  134. *
  135. * start| 1 0 1 0 0 0 0 |ack |stop
  136. * ____ _____ _____ ___
  137. *SDA \____/ \_____/ \_______________________/_____\_____/
  138. *
  139. *****************************************************************************
  140. */

  141. /*
  142. function: 页写入
  143. in: DeviceAddress 设备地址
  144. DataAddress 数据写入的起始地址
  145. DataBuffer 数据所在的buffer地址
  146. DataSize 数据大小
  147. out:
  148. */
  149. void ByteWrite(uchar DeviceAddress , uchar DataAddress , uchar data)
  150. {
  151. start();
  152. Write_Byte(DeviceAddress + 0);//Write
  153. ack();
  154. Write_Byte(DataAddress);
  155. ack();
  156. Write_Byte(data);
  157. ack();
  158. stop();
  159. }


  160. /*
  161. function: 页写入
  162. in: DeviceAddress 设备地址
  163. DataAddress 数据写入的起始地址
  164. DataBuffer 数据所在的buffer地址
  165. DataSize 数据大小
  166. out:
  167. */
  168. void PageWrite(uchar DeviceAddress , \
  169. uchar DataAddress , uchar *DataBuffer ,uchar DataSize)
  170. {
  171. uchar p_offset;
  172. start();
  173. Write_Byte(DeviceAddress);
  174. ack();
  175. Write_Byte(DataAddress);
  176. ack();

  177. for(p_offset=0;p_offset<DataSize;p_offset++)
  178. {
  179. Write_Byte(*(DataBuffer+p_offset));
  180. ack();
  181. }

  182. stop();

  183. }


  184. /*
  185. function: 连续地址读
  186. in: data ,保存数据的buffer地址
  187. out:
  188. */
  189. void SequentialRead(uchar DeviceAddress , \
  190. uchar DataAddress , uchar *DataBuffer, uchar NumDataRead)
  191. {
  192. uchar i;

  193. start();
  194. Write_Byte(DeviceAddress+0);//Write
  195. ack();
  196. Write_Byte(DataAddress);
  197. ack();

  198. start();
  199. Write_Byte(DeviceAddress + 1);//Read
  200. ack();
  201. for(i=0;i<NumDataRead;i++)
  202. {
  203. *(DataBuffer+i)=Read_Byte();

  204. MasterAck();
  205. }
  206. //NoAck
  207. stop();
  208. }


  209. /*
  210. function: 任意地址读
  211. in: address
  212. out: data

  213. */
  214. uchar RandomRead(uchar DeviceAddress , uchar DataAddress)
  215. {
  216. uchar data;
  217. start();
  218. Write_Byte(DeviceAddress+0);//Write
  219. ack();
  220. Write_Byte(DataAddress);
  221. ack();

  222. start();
  223. Write_Byte(DeviceAddress+1);//Read
  224. ack();
  225. data=Read_Byte();
  226. //NO ACK
  227. stop();
  228. return data;
  229. }
  230. /******************************sn8p_eeprom.c END*********************************/









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

158

主题

409

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部