-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
198 lines (164 loc) · 4.49 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/*
* File: main_fullProjectCloudSalud.c
* Author: MiguelAlejandro
*
* Created on 3 de noviembre de 2015, 06:15 PM
*/
//Smart Shirt V0.0
//Env�o de se�al de ECG muestreada a 250 Hz
//Captura de temperatura
//Calculo de frecuencia cardiaca, deficiente.
//Identificacion de caidas
// Miguel Chavarin Hernandez
// Leonid
// Guillermo Barrag�n
#define _XTAL_FREQ 32000000
#define USE_AND_MASKS
#include <xc.h>
#include "config.h"
#include <stdio.h>
#include <math.h>
#include <plib/timers.h>
#include <plib/usart.h>
#include <plib/adc.h>
#include "XBeeAPI16Bits.h"
#include "ADC_Config.h"
#include "Temp_RTD.h"
#include "ECG.h"
#include "Utilities.h"
#include "Interrupt_manager.h"
#include "LariaProtV0.h"
#include "myI2C.h"
#include "adxl345.h"
// Declaraciones
#define USE_I2C 0
unsigned char Timer0Config;
void SetupInit(void);
void SetupClock(void);
void Setup_USART2XBAPI();
void SetupTimer0(unsigned char T,unsigned char M);
void putch(char data);
void SetupPorts();
void Sekunde(void);
//Tiempo
unsigned char Seg=0,Min=0;
unsigned int CuartoSeg=0;
unsigned int MilSeg=0;
unsigned int MilSegMin=0;
main()
{
__delay_ms(1);
SetupInit(); //Inicializar sensores y procesos.
SISOProtInit(); // Inicio protocolo SISO
//printf("Smart Shirt v1.0");
while(1)
{
StsChng(); //Cambio de estado en protocolo
if(FlagPaqRx1==1)
{
SISOMelken();
//for(unsigned char i=0;i<=PaqXBAPILen+3;i++)
// PutByteUART1(BufferRxUART[i]);
//printf("Rx Pack. \tPack #%d\tLenght:%d\tiRx:%d\n",NoPaqXBAPI,PaqXBAPILen,iRx1XBAPI);
FlagPaqRx1=0;
}
}
}
void SetupTimer0(unsigned char T,unsigned char N) //Configuracion de interrupci0n del timer
{
switch (T)
{
case 1: //Opcion para 1 Segundo
Timer0Config = TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256 ;
Load=0x85ED; //1 Seg. FOSC 32 MHz
break;
case 2: //Opcion para 1 ms
Timer0Config = TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_PS_1_256 ;
Load=0xE5; //E8;
break;
}
if(T==0)
CloseTimer0();
else
{
OpenTimer0(Timer0Config);
WriteTimer0(Load);
INTCONbits.TMR0IF = 0;
}
}
void SetupInit() //Funci�n de inicializaci�n de funciones y procesos.
{
SetupClock();
SetupPorts();
Setup_USART1XBAPI();
SetupTimer0(2,0);
INTERRUPT_Initialize();
Init_ADC();
setupI2C();
unsigned char r = initADXL345();
PEIE = 1;
INTCONbits.GIE = 1;
}
void SetupClock() //Configuraci�n de reloj.
{
OSCCONbits.IRCF0 = 1;
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF2 = 1;
}
void SetupPorts() //Configuraci�n de puertos
{
ANSELCbits.ANSC6=0;
ANSELCbits.ANSC7=0;
TRISCbits.RC6=0; //TX es salida
TRISCbits.RC7=1; //RX es entrada
ANSELCbits.ANSC2=0;
TRISCbits.RC2 = 0;
PORTCbits.RC2=0;
TRISAbits.RA3=0;
PORTAbits.RA3=0;
TRISBbits.RB4=1;
ANSELBbits.ANSB4=1;
TRISBbits.RB5=1;
ANSELBbits.ANSB5=1; //RB5 Entrada ADC para sensor de temperatura.
TRISBbits.RB0=1;
ANSELBbits.ANSB0=0;
PORTBbits.RB0=0;
}
void Sekunde(void) //Rutina de interrupcion para pulso de muestreo
{
//Variables globales de tiempo
MilSeg++;
CuartoSeg++;
//Conteo de Tiempo
if(MilSeg>=1000) //Segundo
{
GetTemp();
////printf("\n\t Temp: %f\tFC:%d\t Pos: %d ",TempExt,FC_Send,getPosition());
//SendLarPackTFP(TempExt,FC_Send,getPosition());
if(FlagMonitor==1)
{
TFP_API16Send(TempExt,FC_Send,getPosition());
}
Seg++;
MilSeg=0;
SegCntr1++; //Contador Auxiliar 1 de SISO
if(SegCntr1>=255){SegCntr1=0;}
SegCntr2++; //Contador Auxiliar 2 de SISO
if(SegCntr2>=255){SegCntr2=0;}
SegCntr3++; //Contador Auxiliar 3 de SISO
if(SegCntr3>=255){SegCntr3=0;}
SegCntr4++; //Contador Auxiliar 4 de SISO
if(SegCntr4>=255){SegCntr4=0;}
}
//conteo para fecuencia de muestreo
if(CuartoSeg == 4) // 250 Milisegundos
{
ECG(); //Cálculo de ECG
CuartoSeg=0;
}
if(Seg==60)
{
Min++;
Seg=0;
}
}