打印
[菜农助学交流]

CN(菜鸟)之250助学板-->玩玩1820,就是爽啊...

[复制链接]
3459|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天利用周末的时间,把1820弄出来了。
先还是小小的总结下吧。首先由于我在网上下载的助学板电路图可能没有更新吧,所以就把IO都弄错了,今天老是协议没有正确。后来仔细观察板子才发现自己错了。。。。。
看来以后应该仔细啊。
这次用的东西也还是板上的资源。还有个就是大叔的互联卫士。这个工具没得说的,很强大。不过我由于第一次用uart还不知道怎么原理呢。按照神龙前辈的例程来弄的.
而且跑例程都用了点时间呢。首先就是串口的设置要统一,串口助手和,软件设置要对位。然后就没有什么要注意的了。我用的是串口工具哈!
不是助学板上的东东。
如图:(直接连接,然后把右边的开关按钮选择打开就行了。使用很简单)


好了工具介绍完毕,
看看我主要的程序吧。
main程序
 
#include"nuc1xx.h"
#include"ds18b20.h"
#include"drvuart.h"
#include"drvgpio.h"
#include"drvsys.h"
#include"stdio.h"
void sysinit()
{
  UNLOCKREG();               //unlock IC
     SYSCLK->PWRCON.XTL12M_EN = 1;           //set clk
     DrvSYS_Delay(5000);             //wait
  DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT);                                //  设置GPB10端口为输出模式
     DrvGPIO_ClrBit(E_GPB, 10);                                        //  清GPB10端口  蜂鸣器不叫唤
  outpw(&SYS->GPAMFP, inpw(&SYS->GPBMFP) & ~(0x1<<4));     //gpb5 is IO
  GPIOB->PMD.PMD4=3;
  {
  STR_UART_T param;
  
  DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);    //  使能UART时钟
  DrvGPIO_InitFunction(E_FUNC_UART0);        //  复用功能引脚设置
   
  param.u32BaudRate        = 115200;        //  波特率
  param.u8cDataBits        = DRVUART_DATABITS_8;     //  数据位
  param.u8cStopBits        = DRVUART_STOPBITS_1;     //  停止位
  param.u8cParity          = DRVUART_PARITY_NONE;     //  校验位
  param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;     //  FIFO存储深度 1 字节
  param.u8TimeOut          = 0;         //  FIFO超时设定
  DrvUART_Open(UART_PORT0, &param);        //  串口开启、结构体整体赋值
  }
}
void delay0(int i)
{
int j,k;
for(j=0;j<i;j++)
  for(k=0;k<5000;k++);
}
main()
{
float tm;int i=1;   
sysinit();
while(1)
{
if(i==1)
printf("请输入刺激信号:\n");

while(UART0->ISR.RDA_IF==0);
UART0->FCR.RFR=1;
i++;
if(i%2==0)
{i=0;
printf("正在检测你的信号\n");
printf("......\n");
delay0(500);
printf("检测出信号,计算温度中.....\n");
delay0(500);
printf("稍后....\n");
delay0(600);
printf("OK\n\n");
  
tm=readtemp();
printf("现在温度是:%6.4f°C\n",tm);
printf("1820寄存器数据-->   低八位是:templ=%xH",templ);
printf("      ");
printf("高八位是:temph=%xH\n",temph);
printf("温度计算公式:T=(temph*256+templ)*0.06125=(%xH*256+%xH)*0.0625=%6.4f\n\n",temph,templ,(temph*256+templ)*0.0625);
delay0(500);
}
else
;
}
}




还有就是1820的通信哈,大家可以借鉴下。可行的哈!!!
 
#include"nuc1xx.h"
#include"drvgpio.h"
#include"ds18b20.h"
unsigned char templ;
unsigned char temph;
float temp;

void delay(int time)       //delay 5*i us
{
int n;
n=0;
while(n<time)n++;
return;
}
unsigned char init_1820(void)
{unsigned char x;
CLR_1820;
delay(1200);
SET_1820;
delay(50);
x=GET_1820;
delay(900);
return x;
}
unsigned char readone(void)
{
int i,m;
unsigned char dat=0;
for(i=0;i<8;i++)
  {
   CLR_1820;
   dat>>=1;
   SET_1820;
   delay(30);
   m=GET_1820;
   if(m)dat|=0x80;
   delay(75);
  }
  return (dat);
}
void writeone(unsigned char dat)
{
int i;
for(i=0;i<8;i++)
  {   
   CLR_1820;
   delay(18);
   if(dat&0x01)
    SET_1820;
  else
   CLR_1820;
   delay(120);
   SET_1820;
   dat>>=1;
  }
  delay(40);
}
float readtemp(void)
{

init_1820();
writeone(0xcc);
writeone(0x44);
delay(125);
init_1820();
writeone(0xcc);
writeone(0xbe);
templ=readone();
temph=readone();
temp=(temph*256+templ)*0.0625;
delay(200);
return temp;  
}



其他就没有什么了
最后看看工程吧。

所有的东东都上来了....
相信你应该也可以试试了吧。只要你有助学板,就可以测试温度了。显示用串口工具。
最后还是来个总结吧!

总的来说这次熟悉了下串口工具怎么用,虽然还不知道怎么弄的,不知道为什么直接printf就出来数据了。了解熟悉了1820的通信,发现了书上的问题(本来是按照书上的来写1820通信,后来发现不行。书上的是扯蛋。完全不行,可能是片子不同吧)。按照书上的来,1820都不能初始化复位.....
那是相当的纠结啊....
还有个发现就是,在调试某个通信段的时候示波器有用,最后看结果。貌似示波器看不到差别。比如我写个初始化复位。1820应该最后拉低,能看见效果。写个数据给1820也能看出写的什么。但是协议完成后。加到main再用示波器看就发现电平一直是高....
但是结果1820计算是对的,温度我测试的是24摄氏度。这回用了uart,下次继续弄那个温度电阻吧。等有时间买个显示器。以前有个山寨手机的显示器。貌似不会用,线好细...
没资料。。。。。
对了
最后看看程序运行说明哈
首先如图打开hotisp

然后按下助学板上的复位按钮。

提示输入刺激:
就是在串口助手里面发送任意的东东。然后通过检测到有输入就会显示温度。
而且其中也有说明计算过程
和1820中的数据。如图:

你可以把程序copy去看看是不是一样的,有什么问题call me!
thank you!!!!

相关帖子

沙发
lixiaoxu2meng| | 2011-9-24 16:41 | 只看该作者
顶 这个还没做 有时间 玩玩

使用特权

评论回复
板凳
hotpower| | 2011-9-24 17:35 | 只看该作者
新的HotISP可以在助学板的栏目中直接调试~~~

使用特权

评论回复
地板
123jj| | 2011-9-25 14:44 | 只看该作者
弄的不错哈,支持~~~

使用特权

评论回复
5
chinacn1989|  楼主 | 2011-9-26 08:46 | 只看该作者
4# 123jj
谢谢123姐姐的鼓励!
我会再接再厉....

使用特权

评论回复
6
hotpower| | 2011-9-26 09:09 | 只看该作者
老版本hotisp需要右上角的串口控制和内嵌的串口助学调试。
点击dtr就是助学板上的复位,rts就是助学板的key1。

新版本的hotisp下面的虚拟控制台可以直接操作助学板!

点击图片上的复位和key1键即可操作。
它自带了一个小的串口助手。

使用特权

评论回复
7
hotpower| | 2011-9-26 09:11 | 只看该作者
新版本的hotisp可以在腾讯微群的群共享里下载。http://qun.t.qq.com/78184763/share

使用特权

评论回复
8
chinacn1989|  楼主 | 2011-9-26 13:24 | 只看该作者
哦,了解了大叔...
我今天试了下!
ok...

使用特权

评论回复
9
hotpower| | 2011-9-27 09:54 | 只看该作者
请参见老师的ds18b20的例程,

助学板的电路可以用串口1来实现“硬件单总线控制器”

使用特权

评论回复
10
老鱼探戈| | 2011-9-27 19:34 | 只看该作者
没有18b20也可以用?

使用特权

评论回复
11
chinacn1989|  楼主 | 2011-9-28 09:38 | 只看该作者
没有18b20也可以用?
老鱼探戈 发表于 2011-9-27 19:34

没有1820也可以用什么?

使用特权

评论回复
12
ddjrz| | 2011-9-28 10:42 | 只看该作者
楼主的x=GET_1820;是什么意思,看样子并不是一个函数,怎么会返回8比特数的

使用特权

评论回复
13
chinacn1989|  楼主 | 2011-9-29 08:25 | 只看该作者
本帖最后由 chinacn1989 于 2011-9-29 08:28 编辑

12# ddjrz
 
#ifndef __DS18B20__H
#define __DS18B20__H
#include"nuc1xx.h"
#include"drvgpio.h"
#define CLR_1820     DrvGPIO_ClrBit(E_GPB,4)            //SET  DQ
#define SET_1820     DrvGPIO_SetBit(E_GPB,4)            //CLS  DQ
#define GET_1820  DrvGPIO_GetBit(E_GPB,4)   //GET  DQ
extern float readtemp(void);
extern void writeone(unsigned char dat);
extern unsigned char init_1820(void);
extern unsigned char readone(void);
extern void delay(int time);
extern unsigned char templ;
extern unsigned char temph;
extern float temp;
#endif

就是这里的哈
我定义了的,get——1820就是获取现在总线的IO状态!
至于8bit的数据,因为函数返回值是1或者0.
所以8bit已经足够了!

使用特权

评论回复
14
mbydyjj| | 2011-9-30 13:18 | 只看该作者
下次我也把18B20g弄出来

使用特权

评论回复
15
mbydyjj| | 2011-9-30 13:18 | 只看该作者
下次我也把18B20g弄出来

使用特权

评论回复
16
hotpower| | 2011-12-3 01:13 | 只看该作者
单总线控制器不错的,李老师的DS18b20的例程大家好好看看

使用特权

评论回复
17
dong_abc| | 2011-12-3 19:18 | 只看该作者
单总线控制器

使用特权

评论回复
18
chinacn1989|  楼主 | 2013-7-25 13:40 | 只看该作者
ddjrz 发表于 2011-9-28 10:42
楼主的x=GET_1820;是什么意思,看样子并不是一个函数,怎么会返回8比特数的

GET_1820是读取总线的状态(0or1),
那里书循环8次
所以就是八位了!

使用特权

评论回复
19
缥缈九哥| | 2014-8-9 22:26 | 只看该作者
顶起

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:努力奋斗,努力学! 努力学习,努力帖! 学=学习;帖=发帖! 学习好了,就发帖和大家分享! 共同学习...

6

主题

272

帖子

0

粉丝