Hallo. Ein Anfänger braucht Hilfe!
Ich habe 2 Picdem Z boards und möchte einen intergrierten Sensor (TC77)
abfragen. Ich möchte diese Funktion in das Demoprogramm einbinden. Im
Mikrochip Forum habe ich eine Funktion (C-Programm) gefunden, die ich
nutzen will. Die Funktion sieht wie folgt aus: (Frage hierzu folgt im
Anschluss)
------------------------------------------------------------------------
-
#include "generic.h"
#include "TC77.h"
#include "Console.h"
#include "string.h"
#include "MSPI.h"
#define TC77_CS LATA2
/*********************************************************************
* Function: BYTE GetTC77String( char *buffer )
*
* PreCondition: None
*
* Input: buffer - pointer where to store the string.
*
* Output: The length of the returned string.
*
* Side Effects: None
*
* Overview: This function reads the TC77 and returns a
formatted
* temperature value at *buffer. If we get a 0x00
* or 0xFF, we report that we are having a problem
* with the temperature sensor.
*
* Note:
********************************************************************/
BYTE GetTC77String( char *buffer )
{
typedef union _SIGNED_WORD_VAL
{
unsigned int uVal;
int Val;
struct
{
BYTE LSB;
BYTE MSB;
} byte;
} SIGNED_WORD_VAL;
BYTE GIEHsave;
char *ptr;
char *pTempString;
SIGNED_WORD_VAL RawTemp;
signed long ScaledTemp;
BYTE strLen;
char tempString[10];
// Read the temperature from the TC77
//
// The TC77 gives a left aligned 13 bit signed integer
// where 0 = 0 degrees Celcius, 1 = 0.0625 degrees,
// 2 = 0.125 degrees, -1 = -0.0625 degrees,
// -2 = -0.125 degrees, 400 = 25 degrees, etc.
// To convert it to a usable value, one should
// right align it and then sign extend it. For human
// display purposes, one should either convert it to a
// floating point number and multiply it by 0.0625
// degrees C. Alternatively, it may be left as an integer
// and multiplied by 625. The result would be scaled by
// a factor of 10,000.
// Disable interrupts while we talk to the temperature sensor.
GIEHsave = GIEH;
GIEH = 0;
// Read data from the TC77
TC77_CS = 0; // Select TC77
RawTemp.byte.MSB = SPIGet(); // Get high 8 bits
RawTemp.byte.LSB = SPIGet(); // Get low 5 bits + "Bit 2" + 2
don't care bits (LSb side)
TC77_CS = 1; // Unselect TC77
// Restore interrupts.
GIEH = GIEHsave;
if ((RawTemp.uVal == 0x0000) || (RawTemp.uVal == 0xFFFF))
{
strcpypgm2ram( buffer, (rom char *)"Problem reading TC77." );
}
else
{
// Right align the 13 bit temperature reading
RawTemp.uVal >>= 3;
// Sign extend the value from 13 bits to 16 bits
if(((BYTE_VAL*)&RawTemp.byte.MSB)->bits.b4)
{
RawTemp.byte.MSB |= 0xE0;
}
// Convert the TC77 integer to a scaled one with units 0.0001
degrees C
ScaledTemp = (long)RawTemp.Val * (long)625;
// Convert the integer to a string and find its length
pTempString = ltoa( ScaledTemp, tempString );
strLen = strlen( tempString );
// Write the negative sign if needed. We are going to
// format small negative numbers a little differently.
ptr = buffer;
if(tempString[0] == '-')
{
*ptr++ = '-';
strLen--;
pTempString++;
}
// Write "0." and then the number if this number is too close
to zero; eg: 0, 0.0625, -0.125
if(strLen < 5)
{
*ptr++ = '0';
*ptr++ = '.';
memcpy( (void *)ptr, (void *)tempString, strLen );
*ptr += strLen;
}
// Otherwise, write the full number and write
// the decimal place in digit 5's position;
// eg: 24.1250
else
{
for(;strLen >= 5; strLen--)
*ptr++ = *pTempString++;
*ptr++ = '.';
for(;strLen > 0; strLen--)
*ptr++ = *pTempString++;
}
// Write °C"
*ptr++ = ' ';
*ptr++ = 'C';
*ptr = '\0';
}
return strlen( buffer );
}
--------------------------------------------
Meine Frage: Wie baue ich die Funktion in das Programm ein? Also wie
rufe ich diese Funktion auf? Ich muss doch einen Wert in die Funktion
geben (char *buffer), ich weiss aber nicht wie das aussehen soll. Ich
bin erst am Anfang bezüglich meiner Programmierfähigkeiten.
Ich hoffe ihr könnt mir helfen. Ich bedanke mich schonmal im vorraus.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.