Library to communicate with Maxim OneWire protocol devices Modified timings and IRQ overrides

Dependents:   RdGasUseMonitor

Fork of Onewire by Simon Barker

Files at this revision

API Documentation at this revision

Comitter:
Bobty
Date:
Mon Sep 28 10:31:58 2015 +0000
Parent:
4:b678c7c8203c
Child:
6:d2452e9b169b
Commit message:
Added IRQ handling code; Changed timings a little

Changed in this revision

Onewire.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Onewire.cpp	Sat Feb 21 18:01:10 2015 +0000
+++ b/Onewire.cpp	Mon Sep 28 10:31:58 2015 +0000
@@ -12,13 +12,14 @@
 
 void Onewire::writeBit(int bit) 
 {
+    __disable_irq();
     bit = bit & 0x01;
     if (bit) 
     {
         // Write '1' bit
         oneBus_.output();
         oneBus_ = 0;
-        wait_us(5);
+        wait_us(12);
         oneBus_.input();
         wait_us(60);
     }
@@ -27,23 +28,26 @@
         // Write '0' bit
         oneBus_.output();
         oneBus_ = 0;
-        wait_us(70);
+        wait_us(60);
         oneBus_.input();
-        wait_us(2);
+        wait_us(12);
     }
+    __enable_irq();
 }
 
 int Onewire::readBit() 
 {
     char result;
 
+    __disable_irq();
     oneBus_.output();
     oneBus_ = 0;
-    wait_us(1);
+    wait_us(5);
     oneBus_.input();
-    wait_us(5);
+    wait_us(7);
     result = oneBus_.read();
-    wait_us(55);
+    wait_us(60);
+    __enable_irq();
     return result;
 }
 
@@ -52,13 +56,16 @@
     oneBus_.output();
     oneBus_ = 0;
     wait_us(480);
+    __disable_irq();
     oneBus_.input();
     wait_us(60);
     if (oneBus_.read() == 0) 
     {
-        wait(0.0001);
+        __enable_irq();
+        wait_us(100);
         return 1;
     }
+    __enable_irq();
     return 0;
 }