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

MAX6675 driver

 
Post new topic   Reply to topic    CCS Forum Index -> Code Library
View previous topic :: View next topic  
Author Message
JBM



Joined: 12 May 2004
Posts: 54
Location: edinburgh, Scotland

View user's profile Send private message

MAX6675 driver
PostPosted: Sun Feb 26, 2006 4:33 pm     Reply with quote

Below is my driver for the MAX6675, a chip which interfaces to a K-type thermocouple over a simple SPI bus.

The driver implements a software SPI port, so there is no need for dedicateed hardware- any 3 GPIO pins can be used.

Notice I am releasing this under the GPL, so make sure you understand what rights and responsibilites this gives you before including it in your own projects. It is free software (as in freedom), just make sure you abide by the terms of the lisence.

-JBM

Code:

/**************************************************************************************
*   max6675.c - communicates with a MAX6675 thermcouple interface chip                *
*   Copyright Jimbob's Ma 2006                                                        *
*                                                                                     *
*   This program is free software; you can redistribute it and/or                     *
*   modify it under the terms of the GNU General Public License                       *
*   as published by the Free Software Foundation version 2                            *
*   of the License.                                                                   *
*                                                                                     *
*   This program is distributed in the hope that it will be useful,                   *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of                    *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     *
*   GNU General Public License for more details.                                      *
*                                                                                     *
*   You should have received a copy of the GNU General Public License                 *
*   along with this program; if not, write to the Free Software                       *
*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   *
**************************************************************************************/

/*
This is a diver for the MAX6675 K-type thermocouple interface chip. It implements an SPI
bus without the need for dedicated hardware (aka a bit-banged interface). The result from
toFloat_TC() is the temperature in degrees celcius of the thermocouple tip. The rest should
be self-evident. Have a look at the end of the file for example usage.
*/

#ifndef TC_CLK
   #define TC_CLK               PIN_B1            //edit these pins as necessary
#endif

#ifndef TC_CS
   #define TC_CS               PIN_B2
#endif

#ifndef TC_DATA
   #define TC_DATA               PIN_B3
#endif


int1 thermocouple_error;         //a handy dandy global error flag to tell you if a thermocouple is connected or not

void init_TC(void)
{
   output_low(TC_CLK);
   output_low(TC_DATA);
   output_high(TC_CS);            //if we idle high, the chip keeps doing conversions. Change this if you like
}

int16 read_TC(void)               //It takes 200ms (ish) for the MAX6675 to perform a conversion
{
   int8 i;
   int16 data;

   output_low(TC_CS);            //stop any conversion processes
   delay_us(1);               //and give it some time to power up (not very much, admittedly)

   for (i=0;i<16;i++){
      shift_left(&data,2,input(TC_DATA));      //reads in 2 bytes to data from the pin TC_DATA
      output_high(TC_CLK);
      output_low(TC_CLK);
   }

   thermocouple_error=bit_test(data,2);      //this is the thermocouple status bit
      
   output_high(TC_CS);
   return(data);
}

int16 sortout(int16 raw)
{
    return(0x0FFF & (raw>>3));      //returns only the bits converning temperature
}

float toFloat_TC(int16 tmp)
{
   return((float)tmp/4.0);      //adjusts data to floating point format, and accounts for the decimal point
}

float do_everything(void)
{
   init_TC();
   delay_ms(200);               //200ms is a long time to be doing nothing. use a timer interrupt to avoid wasting time here
   return(toFloat_TC(sortout(read_TC())));
}


/*

//example program

#define TC_CLK               PIN_B2
#define TC_CS               PIN_B2
#define TC_DATA               PIN_B1

#include "max6675.c"

void main()
{
   char msg[32];
   delay_ms(50);      //allow oscillator to stabilise

   while(1){
      delay_ms(800);
      sprintf(msg,"%01.2f%cC\r\n",do_everything(),0xB0);
      
      if(thermocouple_error)
         printf("Thermocouple not connected\r\n");   
      else
         printf("%s",msg);
   }
}

*/
deniska_gus



Joined: 11 Jul 2006
Posts: 42
Location: Minden, Germany

View user's profile Send private message

PostPosted: Tue Jul 11, 2006 7:48 am     Reply with quote

Hello! I have just one question. I need to connect this max6675 with rs232. I use pic16f877 and i have no idea, how i can do it. Could you please help me?

Regards. Dennis
kender



Joined: 09 Aug 2004
Posts: 768
Location: Silicon Valley

View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger

PostPosted: Tue Jul 11, 2006 2:13 pm     Reply with quote

deniska_gus wrote:
I need to connect this max6675 with rs232. I use pic16f877 and i have no idea, how i can do it. Could you please help me? **


If all you need to do is to connect MAX6675 to a computer, you can do it via parallel port with minimum hardware and without microcontroller. The approach is shown in this app note by maxim http://www.maxim-ic.com/appnotes.cfm/appnote_number/980

---------
** This type of a request is for the General Forum rather than for the Code Library.
Analyzer



Joined: 07 Sep 2003
Posts: 32

View user's profile Send private message

PostPosted: Sun Nov 05, 2006 3:48 pm     Reply with quote

Hi there,

I used this code and simulated at Proteus 6.9 SP5 This code didnt worked. Could you check it please where i am wrong? :

http://rapidshare.com/files/2148392/6675.rar.html

Analyzer
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> Code Library 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