CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

HX711 with 16F887 problem

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
rosiley



Joined: 29 May 2014
Posts: 18
Location: Brasil

View user's profile Send private message

HX711 with 16F887 problem
PostPosted: Sat Feb 03, 2018 10:19 am     Reply with quote

Hello guys,


I'm using an HX711 with a 16F887 to read a torque cell where it must report the values in both directions, time and counterclockwise. I searched the net and found nothing that could help me to get out of scratch, like drivers for hx711 and even how to start the code to read the sensor. All this information should be sent to the pc and also to an LCD display and another 7 segment display. This part I already know how to do and I already have the circuit ready and working. The problem is in the hx711 how to make it work.
Ttelmah



Joined: 11 Mar 2010
Posts: 19539

View user's profile Send private message

PostPosted: Sat Feb 03, 2018 1:04 pm     Reply with quote

It's just SPI mode 1.
The only special thing is the data in pin to the PIC has to be monitored before he transfer to know that data is ready.
You read the pin which you have already setup with #USE SPI as the data input, and when it drops, just do a three byte SPI read.
temtronic



Joined: 01 Jul 2010
Posts: 9243
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Sat Feb 03, 2018 1:32 pm     Reply with quote

Best place to start is the mfr's website and download the datasheet. It'll have the register tables and commands. SPI is of course easy with the CCS compiler,so it's just a matter of sending the correct 'setup parameters' for whatever loadcell you're using.
I'd start with a simple program to confirm you've got the hardware correct, then test for various inputs.
When posting questions like this you should supply a link to the appropriate datasheet. For instance I have no idea whether this is a 5v device, 3 v device or programmable ?

Jay
Ttelmah



Joined: 11 Mar 2010
Posts: 19539

View user's profile Send private message

PostPosted: Sat Feb 03, 2018 2:13 pm     Reply with quote

I've used the chip.
No registers to set up.
You just wait for the data line to drop, and then read three bytes. These give the 24bit data the chip returns. The line goes high when you finish, and then drops again when the chip has another reading ready. It really is a 'doddle' to do. Smile
MikeW



Joined: 15 Sep 2003
Posts: 184
Location: Warrington UK

View user's profile Send private message

PostPosted: Sat Feb 03, 2018 2:27 pm     Reply with quote

I used the HX711 without any problems
cant remember if I used the SPI though

// SPI port

#pin_select SDO1=PIN_B10
#pin_select SDI1=PIN_B11
#pin_select SCK1OUT=PIN_B13
#pin_select SS1OUT=PIN_B12

#use spi( SPI1, FORCE_HW, BITS=8, stream=SPI_STREAM)


#define HX711_CLK pin_B3
#define HX711_DAT pin_B2

unsigned int32 Get_Load_Cell_Values()
{

unsigned int32 Count;
unsigned char i;
signed int32 Count_C;

Output_low(HX711_CLK);
Count=0;

while(Input(HX711_DAT));
for (i=0;i<24;i++)
{

Output_High(HX711_CLK);

Count=Count<<1;
Output_low(HX711_CLK);

if(Input(HX711_DAT)) Count++;
}
Output_High(HX711_CLK);
Count=Count^0x800000;

Output_Low(HX711_CLK);


return(Count);


} // end of function
temtronic



Joined: 01 Jul 2010
Posts: 9243
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Sat Feb 03, 2018 2:32 pm     Reply with quote

hmmm..
No registers to set up
hmmmm.

so how does one select either A or B load cell input and the 'programmable gain' ? I did find a 9 page PDF..kinda missing a few 'minor' details...

edit: yeesh I finally really read the data sheet, page 4 ..variable SPI to program the device !!?? huh ?? still trying to figure that one out. Depending on # of clks the next data will be one of 3 available.

I can buy a loadcell and chip/module for $10..seems like a great deal...

Jay
MikeW



Joined: 15 Sep 2003
Posts: 184
Location: Warrington UK

View user's profile Send private message

PostPosted: Sun Feb 04, 2018 1:30 am     Reply with quote

I guess I only used the A input, and the defaults were OK.

It certainly worked, and worked well.

I didnt use the HX711 in the end, due to its lack of availability of a distributor in the UK.

But it certainly worked.

It should certainly get @rosiley off the ground
Ttelmah



Joined: 11 Mar 2010
Posts: 19539

View user's profile Send private message

PostPosted: Sun Feb 04, 2018 2:21 am     Reply with quote

Exactly like Mike. Just for the default reading.

You can select what you want using external pins.

From the data sheet:
Quote:

There is no programming needed for the
internal registers. All controls to the HX711 are
through the pins.


The number of clock pulses you send controls the gain. You can set this with #USE SPI now (in the past you could not do this), or if you want just clock manually. You need to be using software SPI to give the option for this.
Ttelmah



Joined: 11 Mar 2010
Posts: 19539

View user's profile Send private message

PostPosted: Sun Feb 04, 2018 7:36 am     Reply with quote

Just to expand (looked up my notes), if you send 25 clocks, the next conversion is of channel A with a gain of 128. Send 26, and it gives you channel B with a gain of 32. Send 27 and it gives channel A with a gain of 64.
Understand it always controls the _next_ reading, and the data comes in on the first 24 clocks.
So potentially:
Code:

#USE SPI (FORCE_SW, DI=YOUR_DATA_PIN, CLK=YOUR_CK_PIN, MODE=1, stream = HX)

//Then use
   while (YOUR_DATA_IN==1)
       ; //wait for chip
   val32=spi_xfer(HH,0,26); //select 26, 27 or 28 for what you want
//This will switch the chip to the specified mode.
//Default on wake up is CHA gain 128

//Then when you want to read:
   while (YOUR_DATA_IN==1)
       ; //wait for chip
   val32=spi_xfer(HX,0,24);

//val32 will now contain the 24bit reading from the chip


I remember this as being one of the most simple chips to drive I have ever met!..
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group