onewire.c
Go to the documentation of this file.
1 
23 #include <app.h>
24 
25 #define PWR_ON_PIN RA1
26 #define PWR_ON_DIR TRISA1
27 
28 #define ID_DQ_PIN RB0
29 #define ID_DQ_DIR TRISB0
30 
31 #define OneWire_PinHI() TRISB0 = DIR_IN
32 #define OneWire_PinLO() { RB0 = 0x00; TRISB0 = DIR_OUT; }
33 #define W_CELL 4
34 #define W_INIT 50
35 #define W_WAIT 2000
36 
44 {
45  BYTE count, crc;
46  ID_DQ_DIR = DIR_IN;
47 
48  if(OneWire_Init()==0)
49  return W1_FOUND;
50 
51  OneWire_Write(0x33); // read ROM
52 
53  for (count=0; count<8; count++)
54  {
55  buff[count]=OneWire_Read();
56  }
57  ID_DQ_DIR = DIR_IN;
58 
59  crc=0;
60  for (count = 0; count < 8; count++) crc = OneWire_Crc8(buff[count], crc);
61  if( crc ) return W1_CRC;
62  return W1_OK;
63 }
64 
70 {
71  WORD w;
72  BYTE is;
73  OneWire_PinHI();
74  OneWire_PinLO();
76  OneWire_PinHI();
77  w = W_WAIT;
78  is=0;
79  while(w)
80  {
81  if( bittst(gFlags,FN_PCMD) )
82  return 0; // pending command or in process
83  --w;
84  if( !ID_DQ_PIN ) is=1;
85  }
86  return is;
87 }
88 
94 {
95  BYTE n, i_byte;
96  for (n=0; n<8; n++)
97  {
98  RB0=0x00;
99  TRISB0=DIR_OUT;
100  TRISB0=DIR_IN;
101  #asm
102  clrwdt
103  nop
104  nop
105  #endasm
106  if (RB0)
107  {
108  i_byte=(i_byte>>1) | 0x80; // least sig bit first
109  }
110  else
111  {
112  i_byte=i_byte >> 1;
113  }
115  }
116  return(i_byte);
117 }
118 
125 {
126  BYTE n;
127  for(n=0; n<8; n++)
128  {
129  if (d&0x01)
130  {
131  RB0=0;
132  TRISB0=DIR_OUT; // momentary low
133  TRISB0=DIR_IN;
135  }
136 
137  else
138  {
139  RB0=0;
140  TRISB0=DIR_OUT;
142  TRISB0=DIR_IN;
143  }
144  d=d>>1;
145  }
146 }
147 
155 {
156 BYTE i, f;
157 
158  for (i = 0; i < 8; i++)
159  {
160  f = 1 & (Data ^ Accum);
161  Accum >>= 1;
162  Data >>= 1;
163  if (f) Accum ^= 0x8c; // b10001100 es la palabra del CRC (x8 + x5 + x4 + 1)
164  // 7..43..0 junto con el 1 aplicado a f.
165  }
166  return Accum;
167 }
168 //*****************************************************************************[ENDL]***************
169 
170 
171 
172 
173 
BYTE OneWire_GetID(BYTE *buff)
Definition: onewire.c:43
BYTE OneWire_Read(void)
Definition: onewire.c:93
void delay_10us(unsigned char x)
Definition: delay.c:29
#define W_INIT
Definition: onewire.c:34
#define FN_PCMD
Definition: app.h:78
BYTE OneWire_Crc8(BYTE Data, BYTE Accum)
Definition: onewire.c:154
BYTE OneWire_Init(void)
Definition: onewire.c:69
#define W_CELL
Definition: onewire.c:33
#define bittst(var, bitno)
Definition: pgrl.h:83
#define ID_DQ_DIR
Definition: onewire.c:29
#define W1_OK
Function call success.
Definition: onewire.h:26
#define OneWire_PinHI()
Definition: onewire.c:31
#define OneWire_PinLO()
Definition: onewire.c:32
#define ID_DQ_PIN
RB.0 - DQ for DS2401.
Definition: onewire.c:28
#define DIR_OUT
Definition: pgrl.h:105
volatile BYTE gFlags
Definition: jadeku.c:81
unsigned char BYTE
Definition: pgrl.h:38
#define DIR_IN
Definition: pgrl.h:106
unsigned int WORD
Definition: pgrl.h:45
JADEKU project defines and dependency headers.
#define W1_FOUND
No device found.
Definition: onewire.h:28
void OneWire_Write(BYTE d)
Definition: onewire.c:124
#define W1_CRC
CRC verification fail.
Definition: onewire.h:27
#define W_WAIT
Definition: onewire.c:35