搜索
bottom↓
回复: 9

一条奇怪的指令搞定ATTINY85

[复制链接]
(231808187)

出0入0汤圆

发表于 2014-5-19 04:26:47 | 显示全部楼层 |阅读模式
本帖最后由 biying 于 2014-5-19 09:45 编辑

在用马潮老师的avr学习板制作单键密码锁时,用M16实验通过的程序,移植到ATTINY85上后(只是改下端口,主要的程序没有动),输入按键端口居然表现出长按闪灯6次就认为是输入6位密码了,我闪为是不是ATTINY85用片内8M时钟,导致端口不稳定,于是在按键状态机函数扫描中增加了一条1毫秒的延时后,延时效果居然和M16g一样了,也就是说长按按键后闪灯的次数就是你想要输入的密码了。问题解决了,好开心!可是到底是什么原因导致这个故障呢?没有ATTINY85的仿真器,不好进一步找原因了,我想试试片内6.4M,或者更低时钟,还有片外晶振。希望知道原因的朋友能指点一下!

  1. unsigned char read_key_n(void)
  2.   {
  3.     static unsigned char key_state = 0, key_time = 0;
  4.     unsigned char key_press, key_return = 0;   
  5.     duankouPORTD |=( 1<<key_LED_fu);   //置位
  6.     duankouPORTD &=~( 1<<key_LED_zheng);  //清零
  7.     duankouDDRD &=~( 1<<key_LED_fu);      
  8.     #asm("nop")      //端口操作后插入空指令能正确读端口     
  9.     delay_ms(1);   // 如果没有这条延时的话,长按按键,闪一次灯就表现出 key_return = 5;的现象,也就是说闪6次后等于输入了6个密码1。
  10.     key_press = key_input;                // 读按键I/O电平
  11.     switch (key_state)
复制代码



补充一下:如果不加那条1毫秒的延时,把PB1口直接对电源负极,输入密码效果是正常的

这是上面问题的ATTINY85程序包


这是M16的程序包,调试通过的

本帖子中包含更多资源

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

x
(231794187)

出0入0汤圆

发表于 2014-5-19 08:20:07 | 显示全部楼层
按键都不消抖的啊,有时会让你死得很惨
(231791184)

出0入0汤圆

 楼主| 发表于 2014-5-19 09:10:10 | 显示全部楼层
waothom 发表于 2014-5-19 08:20
按键都不消抖的啊,有时会让你死得很惨

有消抖呢!以上只是部分代码,请你下载压缩包来看!帮帮忙分析一下吧!这个程序我都搞一个多月了
(231789420)

出0入0汤圆

发表于 2014-5-19 09:39:34 | 显示全部楼层
没有太明白你的问题??
(231788671)

出0入0汤圆

 楼主| 发表于 2014-5-19 09:52:03 | 显示全部楼层
rantingting 发表于 2014-5-19 09:39
没有太明白你的问题??

谢谢你,这么快就来答复了。这是我要实现的功能:初学单片机-单键密码锁制作日志-遇到问题
http://www.amobbs.com/thread-5576508-1-1.html
(出处: amoBBS 阿莫电子论坛)


我现在改成长按按键,通过数闪灯的次数来完成密码输入,用M16调试是通过了的程序,移植到TINY85后,这个两线按键中的“地线”就不稳定了,闪一个次灯后感觉就不是负极,从而导致程序认为输入了一个1就完成一位密码输入了。得加条延时才能正常的输入这6位密码
(231787944)

出0入0汤圆

发表于 2014-5-19 10:04:10 | 显示全部楼层
biying 发表于 2014-5-19 09:52
谢谢你,这么快就来答复了。这是我要实现的功能:初学单片机-单键密码锁制作日志-遇到问题
http://www.am ...

地线不稳地?硬件问题?
(231787735)

出0入0汤圆

 楼主| 发表于 2014-5-19 10:07:39 | 显示全部楼层
rantingting 发表于 2014-5-19 10:04
地线不稳地?硬件问题?

我是把PB1设置为输入,PB0设置为输出0(当做电源负极),然后串接到按键和LED灯上,从效果上看是PB0有规律的不输出0,因为把PB1直接接负极的话密码输入是正常的
(231781991)

出0入0汤圆

发表于 2014-5-19 11:43:23 | 显示全部楼层
biying 发表于 2014-5-19 10:07
我是把PB1设置为输入,PB0设置为输出0(当做电源负极),然后串接到按键和LED灯上,从效果上看是PB0有规 ...

你这个电路搞的不太对,这样对单片机不太好,为什么不用直接接地或者电源,这样出现不稳地不足为奇
(231781721)

出0入0汤圆

 楼主| 发表于 2014-5-19 11:47:53 | 显示全部楼层
本帖最后由 biying 于 2014-5-19 11:48 编辑
rantingting 发表于 2014-5-19 11:43
你这个电路搞的不太对,这样对单片机不太好,为什么不用直接接地或者电源,这样出现不稳地不足为奇 ...


但是M16很稳定啊!tiny85加了这条延时也就稳定了。因为安装限制,只能有两根线接到一个按键上,这个按键还肩负显示密码的功能(并接有一个LED灯),而且得使用IO口尽量少的芯片以方便集成到门控电路板上。闪灯的时候要改变端口,扫描按键的时候也要改变端口,为什么这样对单片机不好?
(231777041)

出0入0汤圆

发表于 2014-5-19 13:05:53 | 显示全部楼层
biying 发表于 2014-5-19 11:47
但是M16很稳定啊!tiny85加了这条延时也就稳定了。因为安装限制,只能有两根线接到一个按键上,这个按键 ...

很少有人这样干吧,如果是自己玩的话没问题,作为量产产品的话,不推荐使用。你这个现在的问题具体我也不好说,有可能可硬件有关系,或许硬件还是存在区别,你可以查看一下M16和tiny的硬件指标,是否有区别,慢慢排查问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-9-22 03:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表