搜索
bottom↓
回复: 6

有谁用过CVAVR里面的DS18B20啊

[复制链接]

出0入0汤圆

发表于 2012-9-12 18:33:19 | 显示全部楼层 |阅读模式
这个库应该怎么用啊,网上大多是DS1820的不是DS18B20的.
有这几个函数:
unsigned char ds18b20_select(unsigned char *addr);
unsigned char ds18b20_read_spd(unsigned char *addr);
float ds18b20_temperature(unsigned char *addr);
unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,
unsigned char resolution);

具体怎么用啊.
假如传感器接在PORTA.0;
是不是
.equ __w1_port=0x1b //PORTA
.equ __w1_bit=1
然后程序里面在
ds18b20_init(0,1,90,DS18B20_12BIT_RES);
temp=ds18b20_temperature(0);

这样就行了???

反正我这样没读出来..

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-9-12 19:05:59 | 显示全部楼层
为什么ds18b20_init的返回总是0呢....

出0入0汤圆

 楼主| 发表于 2012-9-12 21:22:34 | 显示全部楼层
俄...没人用过么..

出0入0汤圆

发表于 2012-9-12 21:24:37 | 显示全部楼层
不行就自己 写下 不是很难

出0入0汤圆

发表于 2012-9-12 18:33:20 | 显示全部楼层
10莫元估计米有达人来回答,我给你个例程吧:我自己编的
cvavr2.039    1602液晶显示的,4线
============================
/*****************************************************
file name               : use codewizardAVR to complete 1602 and ds18b20
Chip type               : ATmega16L
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
hardware connect        :
//                  -----------------                                   //
//              /|\|             PA.5|-->  ds18b20                      //
//               | |             PB.0|-->  RS                           //
//               --|RST          PB.1|-->  RW                           //
//                 |             PB.2|-->  E                            //
//                 |             PB.4|-->  DB4                          //
//                 |             PB.5|-->  DB5                          //
//                 |RST          PB.6|-->  DB6                          //
//                 |             PB.7|-->  DB7                          //
//                  -----------------                                   //
*****************************************************/

#include <mega16.h>
#include <delay.h>
unsigned char rom_code[4][9];
unsigned char alarm_rom_code[4][9];
flash unsigned char dis_str[]="0123456789";


// 1 Wire Bus functions
#asm
   .equ __w1_port=0x1B ;PORTA
   .equ __w1_bit=5
#endasm
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds18b20.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTB
#endasm
#include <lcd.h>

// Declare your global variables here

void main(void)
{
unsigned char i,devices;
float temp1;
int temp2,temp3,temp4;

PORTA=0x00;
DDRA=0x00;


PORTB=0x00;
DDRB=0x00;


PORTC=0x00;
DDRC=0x00;


PORTD=0x00;
DDRD=0x00;


TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;


TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;


MCUCR=0x00;
MCUCSR=0x00;


TIMSK=0x00;


ACSR=0x80;
SFIOR=0x00;

// 1 Wire Bus initialization
w1_init();

// LCD module initialization
lcd_init(16);
lcd_clear();  
while (1)
{
    devices=w1_search(0xf0,rom_code);
    lcd_gotoxy(0,0);
    lcd_putsf("num:");
    lcd_gotoxy(4,0);
    lcd_putchar(dis_str[devices]);                     
    temp1=ds18b20_temperature(&rom_code[0][0]);
    temp1*=10;
    lcd_gotoxy(0,1);
    lcd_putchar(dis_str[(int)temp1/100]);
    lcd_gotoxy(1,1);
    lcd_putchar(dis_str[(int)temp1%100/10]);
    lcd_gotoxy(2,1);
    lcd_putchar(dis_str[(int)temp1%10]);
   
    temp2=ds18b20_temperature(&rom_code[1][0]);  
    temp2*=10;
    lcd_gotoxy(4,1);
    lcd_putchar(dis_str[(int)temp2/100]);
    lcd_gotoxy(5,1);
    lcd_putchar(dis_str[(int)temp2%100/10]);
    lcd_gotoxy(6,1);
    lcd_putchar(dis_str[(int)temp2%10]);   
   
    temp3=ds18b20_temperature(&rom_code[2][0]);
    temp3*=10;
    lcd_gotoxy(8,1);
    lcd_putchar(dis_str[(int)temp3/100]);
    lcd_gotoxy(9,1);
    lcd_putchar(dis_str[(int)temp3%100/10]);
    lcd_gotoxy(10,1);
    lcd_putchar(dis_str[(int)temp3%10]);
   
    temp4=ds18b20_temperature(&rom_code[3][0]);
    temp4*=10;
    lcd_gotoxy(12,1);
    lcd_putchar(dis_str[(int)temp4/100]);
    lcd_gotoxy(13,1);
    lcd_putchar(dis_str[(int)temp4%100/10]);
    lcd_gotoxy(14,1);
    lcd_putchar(dis_str[(int)temp4%10]);
     
   for(i=0;i<4;i++)
    {
        if (ds18b20_init(&rom_code[i][0],20,28,DS18B20_12BIT_RES)&&devices==4)
        {
            lcd_gotoxy(6,0);
            lcd_putsf("ok^_^");   
        }                  
        else
        {
            lcd_gotoxy(6,0);
            lcd_putsf("error");
        }
    }  
    lcd_gotoxy(12,0);
    lcd_putsf("FL:");                        
    lcd_gotoxy(15,0);
    lcd_putchar(dis_str[w1_search(0xec,alarm_rom_code)]);
};
}

出0入0汤圆

发表于 2012-9-13 06:43:18 | 显示全部楼层
上面的例程是读一根线上的4个18B20

出0入0汤圆

 楼主| 发表于 2012-9-13 08:50:29 | 显示全部楼层
zhaoxukiller 发表于 2012-9-12 18:33
10莫元估计米有达人来回答,我给你个例程吧:我自己编的
cvavr2.039    1602液晶显示的,4线
============= ...

你好,我想问问,一定要执行1wire init()么,还有问什么不执行ds18b20_init()呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 06:22

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

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