shuixx 5 years ago
parent
commit
e9ca82542c
2 changed files with 28 additions and 11 deletions
  1. 12 0
      dev.sh
  2. 16 11
      ds18b20.c

+ 12 - 0
dev.sh

@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ -n "$1" ];then
+    rmmod ds18b20_224
+    make -j 2
+    insmod ds18b20_224.ko
+    sleep 2
+fi
+for i in `seq 1 10`
+do
+    show-temp
+done

+ 16 - 11
ds18b20.c

@@ -27,14 +27,14 @@ int init_DS18B20(void)
 	unsigned int result;
 	DQ_OUT;
 	DQ_L;
-	udelay(480); //480~960
+	udelay(480);
 	DQ_H;
-	udelay(15); //15-60
 	DQ_IN;
-	udelay(60);//60-240
+	udelay(65);
 	result = DQ_V;
-	udelay(405);
-    printk("ds18b20 init result %d", result);
+	udelay(240);
+    printk("ds18b20 init result %d,%d", result, DQ_V);
+	udelay(180);
     return result;
 }
 
@@ -53,7 +53,7 @@ unsigned char read_char(void)
 		udelay(2);
 		dat >>= 1;
         DQ_IN;
-		udelay(15);
+		udelay(12);
         if (DQ_V)
             dat |= 0x80;
         udelay(50);
@@ -103,6 +103,14 @@ int initDs18b20(unsigned int gpioNum)
 /*读取数据*/
 void readDs18b20Data(unsigned char *value)
 {
+    if (sizeof(&value) > 1){
+        value[0] = 0xff;
+        value[1] = 0xff;
+    }
+    else
+    {
+        return;
+    }
     if (init_DS18B20())
     {
         return;
@@ -119,11 +127,8 @@ void readDs18b20Data(unsigned char *value)
     write_char(0xCC);
     write_char(0xBE);
 
-    if (sizeof(&value) > 1)
-    {
-        value[0] = read_char();
-        value[1] = read_char();
-    }
+    value[0] = read_char();
+    value[1] = read_char();
 }
 
 void freeDs18b20(void)