n00b SPI problem

I'm running this code on a Funnel IO from Sparkfun, which is a 3.3v/8MHz Arduino.

I'm getting good serial communications, but all 0's when I run the code. (Every once in a while, I get random numbers).

Any ideas?

So it's now working (hurray!)

UPDATED: Scratch that, it was actually a bad wiring problem on my part.

UPDATED 2: I'm getting weird readings, like:

MSB = 0x5
LSB = 0xFFFFE6F0

Which means my pressure is 0x5FFFFE6F0, which just seems a bit high for 1000ft above sea level?

My temperature is reasonable (currently 22.8C), and adjusts accordingly, and my Pressure reading has jitter in it of about the right magnitude.

The 0xFFFF in the first half of the LSB is suspicious to me, but I'm running verbatim the code posted above.

Just as an update, I have it working now!

Here's the code I needed to do to make it work:

pressure_lsb = read_register16(PRESSURE_LSB);
pressure_lsb &= 0x0000FFFF;

Does this make any sense at all?

My read_register16 function looks thus:

float read_register16(char register_name)
{
    byte in_byte1;
    byte in_byte2;
    float in_word;
    
    register_name <<= 2;
    register_name &= B11111100; //Read command

    digitalWrite(SLAVESELECT,LOW); //Select SPI Device
    spi_transfer(register_name); //Write byte to device
    in_byte1 = spi_transfer(0x00);    
    in_byte2 = spi_transfer(0x00);
    digitalWrite(SLAVESELECT,HIGH);
    in_word = UBLB(in_byte1,in_byte2);
    return(in_word);
}

Could this be because of the cast from float to unsigned long? I'm using Arduino 0013, did the types change between then and now?

Hello,

I'm trying to get Temp and Pressure with a SCP1000 using the code above.

I've got
PRESSURE [123007]
TEMP F [21]
PRESSURE [123007]
TEMP F [21]

Strange values.

Below is the wiring to Arduino Pro Mini
SCK -> pin 13
MISO -> pin 12
MOSI -> pin 11
Now I got a doubt. From the program above :
SLAVESELECT 10

What is SLAVESELECT from the SCP1000. I'm using Sparkfun breadk out, and got only CSB / DRDY.
How should I connect SLAVESELECT ?

Thanks for your help.

Mersing.

Is it possible to use 2 scp1000 sensors with a single arduino? If so, how do you identify which is which?

MOSI, MISO, and SCK are buses, but the chip select is unique for each device. If the device is a correctly designed SPI device, just wire the second one up identical to the first, except use a different line for chip select.

-j

What is SLAVESELECT from the SCP1000. I'm using Sparkfun breadk out, and got only CSB / DRDY.
How should I connect SLAVESELECT ?

CSB should be connected to SLAVESELECT.

Does someone have the Sparkfun break out version working?

I got values like this:
PRESSURE [1073741760]
TEMP C [38]

PS: My room temp is no more then 23C

Thx
Geko

Hello everybody,

(Excuse my english, I'm french)

I have tried your code with a "Seeduino", and it works very fine.
But I need a smaller board for my project .

I 'm trying despairingly this code on a "Stickduino" or a "Pro mini" (5V with a regulator, but I have tried also with the supply of the Pro mini 3V)
Impossible to obtain correct values (it's always '0')

I have verified all the solders, all the wires....Nothing !!

Please anay idea or suggestion...?

Hi,
I just thought I'd add something to this old thread. It seems some people have been having trouble getting the code to work. I too had my fair share of problems and have posted them below in an effort to help others in the future who may have similar problems. I'm not sure if the problems of the previous 2 poster are related to mine, but perhaps they have found a solution at this stage.

Anyway, I bought the SCP1000 breakout board from sparkfun and tried to interface it to an arduino duemilnova. The first problem was the 5V I/O pins on the arduino and the 3.3V pins on the SCP1000. To overcome this I got the logic level converters also from sparkfun and wired them up. Still the code did not work. The details provided by sparkfun for the logic level converters are a little misleading if not read carefully, on the low voltage side you will get half of the voltage on the high side, and not the actual low voltage. The problem I had was that I was driving 2.5V to the SCP1000 I/O pins and had the SCP1000 powered of a 3.3V supply. There is mention in the datasheet for the SCP1000 that Vcc cannot differ from the I/O voltages by more than a certain amount. (I don't have to hand the exact values). So the solution was to power the SCP1000 of 2.5V. This actually produces less error comapared to a higher voltage according to the datasheet also, which is a bonus. I have been getting what seem to be acuarate readings of pressure and temperature ever since.

Anyway hopfully this post will save somebody some time in getting their sensor to work.

High all,

I'm new to Arduino, this Forum and how to use them, but you have to start somewhere.

I bought the Arduino Duemilanove and SCP1000 (pressure sensor from Sparkfun.) I've been reading this thread, but what I need is also a schematic how to connect the SCP1000 to the Arduino

Can anyone help me with a schematic and code for the Duemilanove.

Many thanks, DOSER.

For those who are reading this Post. This is about my Arduino Duemilanove working with a Sparkfun SPC1000 Pressure Sensor.

The code listed beneath in this Post is working OK. Except that the temp in C is a bit high. If you devide by 30 instead of 20 it is more realistic.

temp_in = read_register16(TEMP);
temp_in = temp_in / 30;
// temp_in = ((1.8) *temp_in) + 32; Add this to measure in Fahrenheit.
Serial.print("TEMP C ["); // Change C in F if above is applied.
Serial.print(temp_in , DEC);
Serial.println("]");

As a remark on the 3.3V. It has to be added to the Sensor.
But if you use a LD1117V33 voltage regulator you can support this with the 5V from the Arduino board and has 3.3V available for the SPC1000.

connect the following SPC1000 ports to the Arduino Duemilanove
DRDY - not connected
CSB - I/O port 10
MISO - I/O port 12
MOSI - I/O port 11
SCK - I/O port 13
3.3V - Vout of the LD1117V33
GND - Groud

I've had it running in 15 min. Great. :smiley: :smiley:

Greatings from the Netherlands.

DOSER.

Hi,

Just one question.... I obtain something like this for the pressure:
PRESSURE [1073741760]
in what units? 1073,741760 mbar? or...
Thanks!

Hi there,

normally the world pressure will be between 980 hPa and 1040 hPa. A value of 1073 hPa or the older value of mBar is way to high. Maybe with a the addition of a constant like 1073 x 0.95 = 1020 to get a realistic value.

In my setup I got the exact pressure in Pascal and had to convert it to hPa, by adding a constant of 0,01.

Temperature was a bigger problem, I got something of 30 degrees C on a 20 degrees C day, so there I had to adjust this value.

Normally is works OK.

Good luck.

Thanks Doser,

However, Why 0.95? why not 0.8 or 0.9? What i mean is is there an specification on the datasheet. I didn´t see that.... is 0.95 a tested value?

Thanks for your help and comments!

Hi there,

0.95 is not a tested value. If you got a series of readings every 2 or 5 or 10 seconds, what you might require, you need to correct it to your local value. At this point in the Netherlands it's about 1031 hPa. If you got values around 1073 I suggest you take 0.9608.

Although you could be better looking for the reason why you have 1073, because if you use a Sparkfun SPC1000 Pressure Sensor is should be calibrated anyway, and no adjustment is needed.

Good luck.

I am using the same code that was proposed here, and also the different improvements. So,idon´t know why i have this result...

By the way, is there any library for SCP1000 to made more simple the code?
And, could somebody post here a running code? Here there are proposed different modifications, and now i am lost.

Thanks

Hello I am new at arduino, and I'm trying to use the scp1000, with the code of that topic my arduino send me this information:

TEMP F [104]

PRESSURE [1073738714]

TEMP F [104]

PRESSURE [1073738699]

TEMP F [104]

PRESSURE [1073738747]

TEMP F [104]

PRESSURE [1073738722]

TEMP F [104]

PRESSURE [1073738747]

TEMP F [104]

PRESSURE [1073738740]

It's correct values in here?, the pressure is a very large number, isn't it?

I think that could be wrong, please help me and sorry for my bad english

I have my Arduino MEGA plugged with a SCP1000 P01. the 3.3V are from the Arduino. I have already tried the codes present here in this post and nothing happens it just writes what is in the Serial.println() instruction of the setup and does nothing more! I've already read the code about 100 times and didn't find anything wrong!

Could Someone help me! :cry:

Regards

Andre, You may have already figured it out as you posted the question a while ago. The Arduino Mega uses different pins than the other Arduinos. So you have to change the conections and pin definitions in the code to reflect that. In fact, if you want to use the SPI library you will have to change the pin definitions in the .h file that comes with that as it doesn't support the Mega yet. Here are the pins you need on the Mega.

#define SCK_PIN 52
#define MISO_PIN 50
#define MOSI_PIN 51
#define SS_PIN 53