Lynxmotion Tech Support

www.lynxmotion.com
Join the Accelerator Program
It is currently Wed Jun 19, 2013 7:18 pm

All times are UTC - 6 hours [ DST ]




Post new topic Reply to topic  [ 16 posts ]  Go to page Previous  1, 2
Author Message
PostPosted: Mon May 31, 2010 10:49 pm 
Offline
Roboteer

Joined: Sat Mar 21, 2009 3:36 pm
Posts: 208
They do have a C# sample on the Melexis (manufacturer site).

SMBus/PWM communication implementation on STC-MCU
This is software for a MCU with 8051 architecture for communication with the MLX90614 using the SMBus or PWM interface.
It includes:
Basic SMBus protocol setup;
Reading measurements from the MLX90614 with the SMBus and calculating the temperature;
Adjusting programmable settings (SMBus address, emissivity) of the MLX90614;
Detecting the PWM signal from a MLX90614 and calculating the temperature.


Current Revision: 1.1
File Type: Software & Tools
File Size: 298.0 KB
http://melexis-rf-ics.com/Asset/SMBusPW ... _5880.aspx

This appears to be the code that shows the timing for the PWM. Not sure how to convert this to BAP.

Code:
//----------------------------------------------------------------------------------------------------------------------------------------//
//Head files
//----------------------------------------------------------------------------------------------------------------------------------------//
#include <STC12C5410AD.H>
#include "stdio.h"
#include "math.h"
#include "intrins.h"
#include "string.h"
#include "PWM_display.h"                  //Including PWM_display.h (showing temperature on digital LEDs)
//----------------------------------------------------------------------------------------------------------------------------------------//
//Macro definition of I/O ports
//----------------------------------------------------------------------------------------------------------------------------------------//
  sbit P3_3=P3^3;   
//utilize MCU external interrupt source 1£¨INT1£©to measure PWM pulse on SDA pin of MLX90614
//----------------------------------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------------------------------//
//Function: Calculate Temperature according PWM pulse width and period£¨Duty cycle£©
//----------------------------------------------------------------------------------------------------------------------------------------//
int Calculate(unsigned int t1pwm, unsigned int T1pwm)
{
 
   int DC;
   long int T;
   int T1;
   int K;
   int T1max=120;                                      //The maximum object temperature, saved in EEPROM 00h
   int T1min=-20;                                      //The minimum object temperature, saved in EEPROM 01h
   K=2*(T1max-T1min);

   DC=t1pwm*100000/T1pwm;               
   //Calculate Duty cycle, times 100,000 shifts the fixed point 5 position to the right
 
   T=(DC-0.125*100000)*K+T1min*100000;
  //calculate object temperature, DC is duty cycle
   T1=T/1000;                                         
  //To truncate the resolution to 0.01¡æ, a division by 1000 is done on the results
   return T1;

}
//----------------------------------------------------------------------------------------------------------------------------------------//
//Name£ºmain
//Function£ºUse STC MCU external interrupt source port 1¡¢Timer 0 and 1 to measure PWM pulse width and period
//----------------------------------------------------------------------------------------------------------------------------------------//
void main(void)
{
   unsigned int A;
   unsigned int B;
   unsigned int C;
   unsigned int D;
   unsigned int Data1;
   unsigned int Data2;
   int Data;

   TMOD=0x19;                                 //Set timer 0£¨GATE=1£©and Timer 1£¨ GATE=0£©work in mode 1
   TH0=0x00;                                  //Clear TH0, TL0
   TL0=0x00;
   ET0=1;                                     //Open Timer 0 interrupt enable
   ET1=1;                                     //Open Timer 1 interrupt enable
   EA=1;                                      //Open overall interrupt enable
   TL1=0x00;                                  //Clear TH1, TL1
   TH1=0x00;
   EX1=0;                                     //Turn-off INT1 interrupt

while(P3_3==1)                            //Wait INT1 low pulse
{;}
while(P3_3==0)                            //Wait INT1 high pulse
{;}
TR0=1;                                        //Open timer 0
TR1=1;                               //Open timer 1
while(P3_3==1)                            //Wait INT1 low pulse
{;}
TR0=0;                                        //Clear timer 0
C=TL0;                                        //T0 Low byte sends to C
D=TH0;                                        //T0 High byte sends to D
while(P3_3==0)                            //Wait INT1 high pulse
{;}           
TR1=0;                                        //Clear timer 1
A=TL1;                                        //T1 Low byte sends to A
B=TH1;                                        //T1 High byte sends to B
Data2=(D<<8)+C;
Data1=(B<<8)+A;

Data=Calculate(Data2,Data1);                  //Calculate temperature based on counter value
display(Data);                                //Show temperature
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 16 posts ]  Go to page Previous  1, 2

All times are UTC - 6 hours [ DST ]


Who is online

Users browsing this forum: No registered users and 2 guests


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 post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group