Electrónica para un moderno América del Sur

Usted está aquí:  Home > Supporte > Arduino con TSic306,TSic506 y TSic716

Arduino con TSic306,TSic506 y TSic716

Arduino maneja Sensores TSic306,TSic506 y TSic716

Las siguientes rutinas estan hechas para el manejo de los Sensores TSic306,TSic506 y TSic716. Los códigos actualmente publicados no son estables. La explicación del código fuente esta en inglés. La implementación se ha realizado de manera sencilla para modificar y adaptar con facilidad las rutinas.
Primero se debe llamar la routina initTSic() para inicializar los puertos. Con la función getTSicTemp () lees la temperatura del sensor. Y con las funciones convertTSic506Temp ,convertTSic306Temp y convertTSic716Temp haces la conversión de la temperatura en grados centigrados. Recuerda que la variable dataTSic contiene los resultados de la lectura del Sensor.

Los sensores en América del Sur los puedes comprar del distribuidor oficial:

Andean Electronic
Av. Lima 508 - Vallecito
Arequipa - Peru

Tel. ++51 54 -796701
Fax ++49-30-20235995-0
Correo electronico: info@andeanelectronic.com

Codico fuente ejemplo:

#include LiquidCrystal lcd( 13,10,9, 7, 6, 5, 4);

int tsicData = 2 ; // Data Port of TSic Sensor
int tsicPower = 1 ; // Power Pin for TSIC Sensor
int dataTSic = 0 ; // Hold raw data temperature after a call of getTSicTemp()

int StatusTSic = 0 ;
int tsictestpin = 8 ;

void setup(){
initTSic() ;
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor");
lcd.setCursor(0, 1);
lcd.print("TSIC");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("lectura de");
lcd.setCursor(0, 1);
lcd.print("datos");
delay(2000);
pinMode(tsictestpin,OUTPUT);
digitalWrite(tsictestpin, LOW);
}

void loop(){
lcd.clear();
StatusTSic = getTSicTemp ();
lcd.setCursor(0,1);
lcd.print("Status: ");
lcd.print(StatusTSic );
if ( StatusTSic < 1 ){
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(convertTSic716Temp(dataTSic) );
lcd.print("C");
}
delay(1000);
}

/* **************************************************************************
Call this Routine in Setup part to initalisize the TSIC Sensor
or if you change the Port to select another tSic Sensor

***************************************************************************
*/

void initTSic() {
pinMode(tsicData,INPUT);
pinMode(tsicPower,OUTPUT) ;
digitalWrite(tsicPower,LOW);
}

/* **************************************************************************
Function to get a datapackage from TSic Sensor of IST-AG

You have to declare the following global variables:

int tsicData = 2 ; // Data PIN of TSic Sensor
int tsicPower = 1 ; // Power PIN for TSIC Sensor
int dataTSic = 0 ; // Hold raw data temperature after a call of getTSicTemp()

***************************************************************************
*/

// Errorcodes:
// 0 = OK
// 1 - 8 = Timeout's
// 9 + 10 = Parity Error

int getTSicTemp (){

int firstbyte = 0 ; // first databyte
int secoundbyte = 0 ; // secound databyte
int dutycycle = 0 ; // Baudrate of transmission, used for timeout
int errorcounter = 0 ; // Timeout timer
int parity = 0; // Parity Byte

digitalWrite(tsicPower,LOW); // Powers TSIC Off and wait a moment
delay(5);
digitalWrite(tsicPower,HIGH); // Powers TSIC ON
delay(10) ; // Wait some time before start to read
// Wait for falling Edge
errorcounter = 0 ;
while (digitalRead(tsicData)) { // Wait for TStrobe that can not be longer then 100mS
++errorcounter; // increment error Counter
if (errorcounter > 14000 ) return 1 ; // Wait aprox. up to 90 mS for Signal else there is something
// Possible you have to chage this value for lower CU frequency
delayMicroseconds(1); // Here is an error in ZacWire Datasheet: Sensor is sending fist datapackage
// after aprox. 39 mS !!!
}
errorcounter = 0 ;

// Wait for rising Edge and calculate TS
while (!digitalRead(tsicData)) { // Wait for TStrobe goes high
++errorcounter; // increment error Counter
if ( errorcounter > 66 ) return 2 ; // Change value of timeout if you are using a CPU
} // frequency lower then 6 MHZ.
while (digitalRead(tsicData)) {
++errorcounter; // increment error Counter
if ( errorcounter > 66 ) return 3 ;
}
dutycycle = errorcounter * 2 ; // Set Dutycycle when // Calculates from T-Strobe transmit rate
errorcounter = 0 ;
// Now start to read TSIC Sensor
for (int i = 0; i < 9; i++) { // Starts to read forst Byte
errorcounter = 0 ;
delayMicroseconds(dutycycle); // From sample routine we know that error counter runs with 8uS
if (digitalRead(tsicData)){
firstbyte |= 1 << (8-i); // Set the Bit
}
else
{
while (!digitalRead(tsicData)) {
++errorcounter; // increment error Counter
if ( errorcounter > 66 ) return 4 ; // Calculates from T-Strobe transmit rate
}
}
while (digitalRead(tsicData)){ // Now wait Line goes high for next Byte
++errorcounter; // increment error counter
if ( errorcounter > ( dutycycle + 30 )) return 4 ; // Something goes wrong, so break readout
}
}

// Now reads secound byte

// Wait for falling Edge
errorcounter = 0 ;
while (!digitalRead(tsicData)) {
++errorcounter;
if (errorcounter > ( 66 ) ) return 5 ;
}

// Wait for rising Edge
errorcounter = 0 ;
while (digitalRead(tsicData)) { // Wait for TStrobe goes high
++errorcounter; // increment error Counter
if ( errorcounter > ( 66 ) ) return 6 ;
}

// Now start to read secound byte
for (int i = 0; i < 9; i++) { // Starts to read forst Byte
errorcounter = 0 ;
delayMicroseconds(dutycycle); // From sample routine we know that error counter runs with aprox.8uS
if (digitalRead(tsicData)){
secoundbyte |= 1 << (8-i); // Set the Bit
}
else
{
while (!digitalRead(tsicData)) {
++errorcounter; // increment error Counter
if ( errorcounter > 66 ) return 8 ; // Calculates from T-Strobe transmit rate
}
}
if (i <8 ) { // After Bit 9 finish ready ! Otherwise timeout error
while (digitalRead(tsicData)){ // Now wait Line goes high for next Byte
++errorcounter; // increment error counter
if ( errorcounter > ( dutycycle + 30 )) return 8 ; // Somethink goes wrong, so breakreadout
}
}
}

parity = 0; // Check the parity Bit of Data packages
for (int i = 0; i < 9; i++)
if (firstbyte & (1 << i))
parity++;
if (parity % 2)
return 9;

parity = 0;
for (int i = 0; i < 9; i++)
if (secoundbyte & (1 << i))
parity++;
if (parity % 2)
return 10;

firstbyte >>= 1; // Delete the parity Bits
secoundbyte >>= 1;
dataTSic = (firstbyte << 8) | secoundbyte;
digitalWrite(tsicPower,LOW); // Powers TSIC OFF
return 0 ; // Return Errorstatus 0 = OK
}

// This routines give the value in centigrados back. Depends of Sensortype

// Sensor TSic506
float convertTSic516Temp (int rawdata){
float celsius = 0 ;
celsius = (float)rawdata / 2047 * (60+10) - 10 ;
return celsius;
}

// Sensor TSic306
float convertTSic306Temp (int rawdata){
float celsius = 0 ;
celsius = (float)rawdata / 2047 * (150+50) - 50 ;
return celsius;
}

// Sensor TSic 716
float convertTSic716Temp (int rawdata){
float celsius = 0 ;
celsius = (float)rawdata / 16383 * (60+10) - 10 ;
return celsius;
}

 

Emergencias

Llama al

054-608054

++51-54-608054

Distribuidor y Servicio Tecnico autorizado para el Sur de America

top_eng.png

Calidad en Maquinas de electroerosión de Taiwàn

 

Distribuidor y Servicio Tecnico autorizado para Peru

fzlogo.jpg 

Centros Mecanizado, Corte por Hilo y Máquinas de electroerosión de perforación al alcance de todos

 

Distribuidor y Servicio Tecnico autorizado para Peru

tmtlogo.png Taiwan Machine Tool Co.,LTD

Calidad, innovación y el mejor servicio en Tornos CNC  y Centros Mecanizados de Taiwán

 

Distribuidor y Servicio Tecnico autorizado para Peru

JIANN SHENG MACHINERY & ELECTRIC INDUSTRIAL CO., LTD.JIANN SHENG MACHINER CO., LTD.

Electroerosión, Corte por Hilo y EDM-Perforación de Taiwam

 

Servicio Tecnico con repuesto originales

fanuc.png FANUC

Reparación y repotensacion ( RETROFIT) de controles de CNC

 

Distribuidor y Servicio Tecnico

Mitsubishi.gif
Mitsubishi Electric Automation

Instalación, reparación y modernización de controles Numérico CNC y PLC

 

 

Powered by CMSimple| Template: ge-webdesign.de| html| css| Login