I am trying to interface DS1620 with Arduino ( Diecimela).
Arduino <--------------->DS1620
digital Pin5------------- pin 1 ( Dq pin )
digital Pin6------------- pin 2 ( clk pin )
digital Pin7------------- pin 3 ( rst pin )
I modified the shiftIn and shiftOut in order to do LSBFIRST as well as the clock pin setting 'falling edge'
The code kept reading value 0 celcius.
Anybody has any clue with the problem of my code ?
I suspect it has to do with my clock setting because I do not have an understanding of this setting.
Thanks for any advice or correction.
samira
int ledPin = 13 ;
int dqPin = 5 ;
int clkPin = 6 ;
int rstPin = 7 ;
byte data ;
int i ;
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(clkPin, OUTPUT);
pinMode(rstPin, OUTPUT);
Serial.begin ( 9600 ) ;
// write to config register
pinMode ( dqPin, OUTPUT) ; // set it as output
// request write config registger
// send write config command ( ox0C )
myShiftOut ( dqPin, clkPin, 0x0C );
//send command cpu & continuous ( 0x02)
myShiftOut( dqPin, clkPin, 0x02 ) ;
// send command "start convert" 0xee
myShiftOut ( dqPin, clkPin, 0xEE ) ;
}
void loop()
{
int myTemp ;
// request read temp (0xAA)
myShiftOut ( dqPin, clkPin, 0xAA);
// set dq pin to input for reading
pinMode ( dqPin, INPUT) ;
myTemp = shiftIn( dqPin, clkPin);
Serial.print ("temp = ") ;
Serial.print ( myTemp, DEC ) ;
Serial.println ( " Celcius");
delay (1000);
}
byte shiftIn(int myDataPin, int myClockPin ) {
int i;
int temp = 0;
int data ;
pinMode(myDataPin, INPUT);
pinMode ( myClockPin, OUTPUT) ;
data = 0 ;
digitalWrite ( rstPin, HIGH ) ;
digitalWrite ( myClockPin, HIGH);
for (i=0; i<= 7; i++)
{
digitalWrite(myClockPin, HIGH );
temp = digitalRead(myDataPin);
delayMicroseconds(50);
if (temp) {
data = data | (1 << i);
}
digitalWrite(myClockPin, LOW );
}
digitalWrite ( rstPin, LOW );
return data / 2;
}
void myShiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out LSB first,
//on the falling edge of the clock,
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
digitalWrite ( rstPin, HIGH) ;
//clear everything out just in case to
//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
digitalWrite ( myClockPin, 1) ;
for (i= 0 ; i <= 7 ; i++ ) {
digitalWrite(myClockPin, 0);
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
// Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
// register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
// zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
//stop shifting
digitalWrite(myClockPin, 1);
digitalWrite ( rstPin, LOW ) ;
}