这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » chenhaixin “51 DIY” 进程贴

共9条 1/1 1 跳转至

chenhaixin “51 DIY” 进程贴

菜鸟
2014-05-06 00:44:11     打赏

先说问题,论坛老问题,程序下不进去,有可能是D10的问题,感觉还是电路设计的不好,用USB转232一点问题没有,照片都准备好了,一点一点贴。


1.stc自动下载(3L)

2.自动下载视频

3.DS18B20

4.18B20结合数码管



菜鸟
2014-05-06 00:53:53     打赏
2楼

板载USB转串口下载及其不好用,经常出现串口号丢失的问题。于是利用STC15F104E 8脚芯片制作了一个自动下载配件。

对目标单片机进行冷启动,实现断电、再上电,可以用三极管作为电子开关实现。必须注意到的是,三极管的最大可通过电流不要小于单片机电路的所需电流。如果三极管仅作为单片机供电的开关,由于STC89系列单片机的正常丁作模式功耗为2~7 mA,90系列三极管通常情况下可以满足需求。但在某些情况下,单片机的串口上电后会给单片机供电,使单片机各引脚电平处于不确定的状态,因而必须对目标电路板整体进行冷启动,三极管必须满足目标电路板的总电流需求。由于三极管8550的最大可通过电流为1.5 A,可以满足绝大多数电路的供电需求。所以选择三极管8550连接到目标单片机STC89C52RC的VCC脚,作为对其冷启动的开关。

/********************************************************************************/

视频可能需要上传,可能要审核得等几天,先传一张照片

——回复可见内容——



菜鸟
2014-05-06 00:53:59     打赏
3楼
上一张今天电路板火光四溅浓烟滚滚的照片

菜鸟
2014-05-06 00:54:04     打赏
4楼

DS18B20:
正确的接线方法:左负右正,一旦接反就会立刻发热,有可能烧毁!接反是导致该传感器总是显示85℃的原因。面对着扁平的那一面,左负右正。

    DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢

    型号多种多样,有LTM8877,LTM8874等等。主要应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。


经过单线接口访问 DS1820 的协议 如下~~
   1. 初始化
   2. ROM 操作命令
   3. 存贮器操作命令
   4. 处理/数据

首先,我们对18B20进行操作,我们要对其初始化,

初始化:单线总线上的所有处理均从初始化序列开始 初始化序列包括总线主机发出一复位脉冲 接着
由从属器件送出存在脉冲

 

初始化子程序:
Init_DS18B20(void) 
{
unsigned char x=0;定义一个变量判断是否初始化程序
DQ=1; //DQ先置高 
delay(8); //稍延时
DQ=0; //发送复位脉冲 
delay(80); //延时(>480us)                                                             
DQ=1; //拉高数据线 
delay(5); //等待(15~60us) 
x=DQ; //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 
delay(20); 
}

ROM操作命令:

写操作:
当主机总线 t o 时刻从高拉至低电平时 就产生写时间隙 见图


从 to 时刻开始 15us 之内应将所需写的位送到总线上 DSl820 在 t 后15-60us间对总线
采样 若低电平 写入的位是 0 见图 2 25 3 若高电平 写入的位是 1 见图 2 25 4
连续写 2 位间的间隙应大于 1us 即必须有1us以上的高电平恢复期。

写数据子程序

WriteOneChar(unsigned char dat)    //unsigned char dat 定义存控制命令;以下对命令操作
{

unsigned char i=0;

for(i=8;i>0;i--) //因为写一个字节 ,所以要循环八次

{

    DQ=1;            //置高电平
   _nop_();       //在开始另一个写周期前必须有1us以上的高电平恢复期。
   DQ=0;            //进入写开始
   _nop_();   

DQ=dat&0x01; //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0。 
   delay(5);        //向1-Wire总线写1bit至少需要60μs 
    dat>>=1;        //因为写数据是从低位到高位,高位逐位的往右移

}


读操作
     见图2 25 5 主机总线 to 时刻从高拉至低电平时 总线只须保持低电平 l 7ts 之后
在 t1 时刻将总线拉高 产生读时间隙 读时间隙在 t1 时刻后 t 2 时刻前有效 t z 距 to 为15
捍 s 也就是说 t z 时刻前主机必须完成读位 并在 t o 后的60尸 s 一 120 fzs 内释放总线 
读位子程序(读得的位到 C 中)  

 

void ReadOneChar() //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0; //首先初始化dat
for (i=8;i>0;i--) //一个字节有8位 ,所以循环八次
{
DQ=1; 
delay(1); 
DQ=0;      //从高拉至低电平时 总线只须保持低电平 l 7ts 
dat>>=1;   // 读出来的数据要一位一位的移进去

DQ=1;      //将总线拉高 产生读时间隙
_nop_();
if(DQ)       //判断DQ是1还是0
dat|=0x80; //是1的话dat就高位1或,因为读数据是从低位读取 delay(4);

return(dat); //返回读出来的一个字节数据
}




菜鸟
2014-05-06 00:54:19     打赏
5楼
这一层是数码管,这个板子使用的芯片是595,是一款将串行信号变换成并行信号的芯片,非常节省I/O.直接上图。是关于上一层18B20的.

菜鸟
2014-05-09 12:38:41     打赏
6楼

菜鸟
2014-05-11 22:39:30     打赏
7楼

液晶12864

画画以及任意位置打点必备图表.

(成功)12864液晶ST7920控制--画温度曲线.zip





12864也就这样了,过几天写一个VB的上位机把18B20也结了


菜鸟
2014-05-18 23:15:28     打赏
8楼
我这块板子一直有各种格样的问题,一直就不好好工作,想法也发不了呀

菜鸟
2014-06-05 23:33:47     打赏
9楼

传一个用VB写的关于温度计的上位机,配合单片机串口程序在电脑端实时显示温度曲线


Public sina As Variant
Public sinb As Variant
Public sinc As Variant
Public sind As Variant
Public sine As Variant
Public i As Variant
Private Sub Command1_Click()
If Command1.Caption = "关闭串口" Then
        MSComm1.PortOpen = False
        Command1.Caption = "打开串口"
        Timer1.Enabled = False
    Else
        Command1.Caption = "关闭串口"
        MSComm1.CommPort = Combo1.Text
        MSComm1.Settings = "" '"Combo2.text"'","'" combo3.text  "'", "'"  combo4.text   "'" , "'"combo5.text "'""
        MSComm1.InputMode = 0
       MSComm1.PortOpen = True
       Timer1.Enabled = True
    End If
End Sub

Private Sub Form_Load()
Dim i As Integer '生成串口号
For i = 1 To 20
With Combo1
  .AddItem i
End With
Next
Combo2.AddItem "600"
Combo2.AddItem "1200"
Combo2.AddItem "2400"
Combo2.AddItem "4800"
Combo2.AddItem "9600"
Combo2.AddItem "57600"
Combo2.AddItem "115200"
Combo3.AddItem "n"
Combo3.AddItem "e"
Combo3.AddItem "o"
Combo3.AddItem "s"
Combo3.AddItem "m"
Combo4.AddItem "8"
Combo4.AddItem "9"
Combo5.AddItem "1"
Combo5.AddItem "1.5"
Combo5.AddItem "2"
i = 100
sina = 0
sind = 1400
sinc = 0
End Sub
Private Sub Timer1_Timer()
Dim buf$
Dim v As Double
buf = Trim(MSComm1.Input)
If Len(buf) <> 0 Then
    sina = sinc
    sinb = sind
    v = Asc(buf) + 256  '只传了低八位,所以直接加256,相当于把接受的数据& 0001 0000 0000  
    v = v / 10
    Text1.Text = Text1.Text + Str(v) + Chr(13) + Chr(10)
    sinc = (sina + 100)
    sind = (Asc(buf) * 20)
    sine = Val(2000)
    Form1.Picture1.Line (sina, 5000 - sinb)-(sinc, 5000 - sind), sine
    If sinc = 10000 Then
    Picture1.Cls
    sina = 0
    sinc = 0
    End If
    End If
End Sub
Private Sub cmdquite_chick()
MSComm1.PortOpen = False
Unload Me
End Sub


等一会再传一个EXE可执行文件

com.zip

程序数据处理比较特殊

uint tmp()               //get the temperature
{
  float tt;
  uchar a,b;
  dsreset();
  delay(1);
  tmpwritebyte(0xcc);
  tmpwritebyte(0xbe);
  a=tmpread();
  b=tmpread();
  temp=b;
  temp<<=8;             //two byte  compose a int variable
  temp=temp|a;
  tt=temp*0.0625;
  temp=tt*10+0.5;
  return temp;
}

 这个是单片机读18B20,传感器是12数据,但是我们只传送了低八位,因为常温状态下第九位为1,所以加256

   	ii =tmp();
	
//   SBUF=ii>>8;
//   while(TI==0);//????????
//	TI=0;//??????
//	
   SBUF=ii;
   while(TI==0);//????????
	TI=0;//??????

 




共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]