##// END OF EJS Templates
update de firmware timegine. RTC terminado
aaguilar -
r196:197
parent child
Show More
@@ -0,0 +1,101
1 /*
2 * fixpoint<T>.h
3 *
4 * Created on: Feb 24, 2015
5 * Author: aras
6 */
7
8 #ifndef FIXPOINT_H_
9 #define FIXPOINT_H_
10
11 #include <inttypes.h>
12 #include <math.h>
13 #include <typeinfo>
14 #include <cstdio>
15
16 typedef fixpoint<int32_t> fix19_12;
17 #define N43_20 fixpoint<int64_t>
18 #define N9_23 fixpoint<int32_t>
19
20 #define FAC64 20
21 #define FAC32 12
22
23 template<class T>
24 class fixpoint {
25
26 private:
27 uint8_t factor;
28 T value;
29
30 public:
31 fixpoint<T>();
32 fixpoint<T>(T num);
33
34 void set_from_float(float num){value=T(num*(1<<factor));}
35 void set(T val){value = val;}
36 float tofloat();
37
38
39 friend inline fixpoint<T> operator-(const fixpoint<T> &num1, const fixpoint<T> &num2){
40 return fixpoint<T>(num1.value-num2.value);
41 }
42 friend inline fixpoint<T> operator+(const fixpoint<T> &num1, const fixpoint<T> &num2){
43 return fixpoint<T>(num1.value+num2.value);
44 }
45 friend inline fixpoint<T> operator*(const fixpoint<T> &num1, const fixpoint<T> &num2){
46 int64_t aux = (int64_t(num1.value)*int64_t(num2.value))>>num1.factor;
47 return fixpoint<T>(aux);
48 }
49 friend inline fixpoint<T> operator/(const fixpoint<T> &num1, const fixpoint<T> &num2){
50 int64_t aux = (int64_t(num1.value)<<num1.factor);
51 return fixpoint<T>(aux/num2.value);
52 }
53
54
55 inline fixpoint<T> power();
56 inline fixpoint<T> sqroot();
57 };
58
59 template<class T>
60 fixpoint<T>::fixpoint(){
61 if(typeid(T)==typeid(int32_t)){
62 factor=FAC32;
63 }
64 else{
65 factor=FAC64;
66 }
67 value=0;
68 }
69
70 template<class T>
71 fixpoint<T>::fixpoint(T num){
72 if(typeid(T)==typeid(int32_t)){
73 factor=FAC32;
74 }
75 else{
76 factor=FAC64;
77 }
78 value=num;
79 }
80
81
82 template<class T>
83 float fixpoint<T>::tofloat(){
84 return float(value)/(1<<factor);
85 }
86
87 template<class T>
88 fixpoint<T> fixpoint<T>::power(){
89 int64_t aux = (int64_t(value)*int64_t(value))>>factor;
90 return fixpoint<T>(aux);
91 }
92
93 template<class T>
94 fixpoint<T> fixpoint<T>::sqroot(){
95 T aux = sqrt(value);
96 return fixpoint<T>(aux<<(factor/2));
97 }
98
99
100
101 #endif /* FIXPOINT_H_ */
@@ -1,35 +1,33
1 /*
1 /*
2 * gnss.cpp
2 * gnss.cpp
3 *
3 *
4 * Created on: Dec 29, 2014
4 * Created on: Dec 29, 2014
5 * Author: aras
5 * Author: aras
6 */
6 */
7
7
8 #include <gnss.h>
8 #include <gnss.h>
9
9
10 namespace te_gnss {
10 namespace te_gnss {
11
11
12 bool configure(gnss_config_struct* cs){
12 bool te_gnss_configure(gnss_config_struct &gcs){
13 return true;
13 return true;
14 }
14 }
15
15
16 bool activate(){
16 bool te_gnss_activate(){
17 return true;
17 return true;
18 }
18 }
19
19
20 bool deactivate(){
20 bool te_gnss_deactivate(){
21 return true;
21 return true;
22 }
22 }
23
23
24 bool sync_pps(){
24 bool te_gnss_sync_pps(){
25 return true;
25 return true;
26 }
26 }
27
27
28 bool get_time_info(gnss_precise_time* pt){
29 return true;
30 }
31
28
32 bool is_locked(){
29
30 bool te_gnss_is_locked(){
33 return true;
31 return true;
34 }
32 }
35 }
33 }
@@ -1,28 +1,39
1 /*
1 /*
2 * gnss.h
2 * gnss.h
3 *
3 *
4 * Created on: Dec 29, 2014
4 * Created on: Dec 29, 2014
5 * Author: aras
5 * Author: aras
6 */
6 */
7
7
8 #ifndef LIBTE_GNSS_H_
8 #ifndef LIBTE_GNSS_H_
9 #define LIBTE_GNSS_H_
9 #define LIBTE_GNSS_H_
10
10
11 #include "te_structs.h"
11 #include "te_structs.h"
12
12
13 namespace te_gnss {
13
14 //pin ports to GNSS
14 //pin ports to GNSS
15 #define PPS 2 /*!< PE4 AVR <> 2 Arduino */
15 #define PPS 2 /*!< PE4 AVR <> 2 Arduino */
16 #define ENB 5 /*!< PE3 AVR <> 5 Arduino */
16 #define ENB 5 /*!< PE3 AVR <> 5 Arduino */
17 #define RX0_GNSS RX0
17 #define RX0_GNSS RX0
18 #define TX0_GNSS TX0 PE1
18 #define TX0_GNSS TX0 PE1
19
19
20 bool configure(gnss_config_struct*);
20 bool te_gnss_configure(gnss_config_struct &gcs);
21 bool activate();
21 bool te_gnss_activate();
22 bool deactivate();
22 bool te_gnss_deactivate();
23 bool sync_pps();
23 bool te_gnss_sync_pps();
24 bool get_time_info(gnss_precise_time*);
25 bool is_locked();
26
24
27 }
25 void te_gnss_set_baudrate(uint16_t baud);
26 void te_gnss_scan_baudrate();
27 void te_gnss_scan_baud_func();
28
29
30 void te_gnss_wait_to_be_locked();
31 void te_gnss_scan_lock_func();
32 bool te_gnss_is_locked();
33
34 void te_gnss_get_pps_data();
35 void te_gnss_get_pps_data_funct();
36
37 void te_gnss_set_position(N9_22);
38
28 #endif /* LIBTE_GNSS_H_ */
39 #endif /* LIBTE_GNSS_H_ */
@@ -1,184 +1,163
1 /*
1 /*
2 * rtc1308.cpp
2 * rtc1308.cpp
3 *
3 *
4 * Created on: Nov 4, 2014
4 * Created on: Nov 4, 2014
5 * Author: Alan Aguilar Sologuren
5 * Author: Alan Aguilar Sologuren
6 */
6 */
7
7
8 #include <rtc1308.h>
8 #include <rtc1308.h>
9 #include <Wire.h>
9 #include <Wire.h>
10
10
11 namespace te_rtc{
12
11
13 /*!
12 /*!
14 * \fn initialization
13 * \fn initialization
15 * \brief Inicializacion del modulo que controlara al RTC DS1308.
14 * \brief Inicializacion del modulo que controlara al RTC DS1308.
16 */
15 */
17 void initialization(void) {
16 bool te_rtc_initialization(void) {
18
17
19 pinMode(CLKIN,OUTPUT);
18 pinMode(CLKIN,OUTPUT);
20 attachInterrupt(PPS,ISR_gnss_pps, RISING);
19 attachInterrupt(PPS,ISR_gnss_pps, RISING);
21 }
20 }
21
22
22
23
23 /*!
24 /*!
24 * \fn configure
25 * \fn configure
25 * \brief Configura el IC DS1308 para operacion con un PPS de GNSS como tick.
26 * \brief Configura el IC DS1308 para operacion con un PPS de GNSS como tick.
26 * \param rtc estructura que contien informacion de configuracion.
27 * \param rtc estructura que contien informacion de configuracion.
27 * \see rtc_config_struct
28 * \see rtc_config_struct
28 */
29 */
29 void configure(rtc_config_struct &rtc) {
30 bool te_rtc_configure(rtc_config_struct &rtc) {
30
31
31 uint8_t *ctl_byte = (uint8_t*)&rtc.ctl_byte;
32 uint8_t *ctl_byte = (uint8_t*)&rtc.ctl_byte;
32 uint8_t *clk_halt = (uint8_t*)&rtc.clk_halt;
33 uint8_t *clk_halt = (uint8_t*)&rtc.clk_halt;
33
34
34 Wire.beginTransmission(DS1308_CTRL_ID);
35 Wire.beginTransmission(DS1308_CTRL_ID);
35 Wire.write(DS1308_CTL_ADD);
36 Wire.write(DS1308_CTL_ADD);
36 Wire.write(*clk_halt);
37 Wire.write(*clk_halt);
37 Wire.endTransmission();
38 Wire.endTransmission();
38
39
39 Wire.beginTransmission(DS1308_CTRL_ID);
40 Wire.beginTransmission(DS1308_CTRL_ID);
40 Wire.write(DS1308_CTL_ADD);
41 Wire.write(DS1308_CTL_ADD);
41 // CLKIN com 1Hz de entrada (1PPS)
42 // CLKIN com 1Hz de entrada (1PPS)
42 Wire.write(*ctl_byte);
43 Wire.write(*ctl_byte);
43 //Wire.write(1<<ECLK|0<<OSF|0<<LOS|0<<BBCLK|0<<RS1|0<<RS0);
44 //Wire.write(1<<ECLK|0<<OSF|0<<LOS|0<<BBCLK|0<<RS1|0<<RS0);
44 Wire.endTransmission();
45 Wire.endTransmission();
46 return true;
45 }
47 }
48
49
50 /*!
51 * \fn activate_pps
52 * \brief Activa la generacion de una senal de 1Hz (PPS) desde el RTC DS1308. Este
53 * PPS debe estar sincronizado con el PPS del GNSS.
54 */
55 bool te_rtc_activate_pps(bool actv) {
56 uint8_t value;
57 value = actv?(1<<ECLK):0x00;
58 return te_rtc_write_reg(DS1308_CTL_ADD,&value,1)==0;
59 }
60
46
61
47 /*!
62 /*!
48 * \fn set_time
63 * \fn set_time
49 * \brief Setea el tiempo especificado en tm, en el IC DS1308.
64 * \brief Setea el tiempo especificado en tm, en el IC DS1308.
50 * \param tm estructura que contien informacion de tiempo.
65 * \param tm estructura que contien informacion de tiempo.
51 * \see tmElements_t
66 * \see tmElements_t
52 */
67 */
53 void set_time(tmElements_t &tm) {
68 bool te_rtc_set_date_time(gnss_precise_time &gt) {
54
69 uint8_t ptrvalues[7];
55 Wire.beginTransmission(DS1308_CTRL_ID);
70 ptrvalues[0] = dec2bcd(gt.sec);
56 // start with Clock Control and the Seconds register
71 ptrvalues[1] = dec2bcd(gt.minu);
57 Wire.write(DS1308_SEC_ADD);
72 ptrvalues[2] = dec2bcd(gt.hour);
58 Wire.write((uint8_t)0x80); // Set clock control bit to 1. This stops the clock
73 ptrvalues[3] = dec2bcd(0);
59 Wire.write(dec2bcd(tm.Minute));
74 ptrvalues[4] = dec2bcd(gt.day);
60 Wire.write(dec2bcd(tm.Hour)); // sets 24 hour format
75 ptrvalues[5] = dec2bcd(gt.month);
61 Wire.write(dec2bcd(tm.Wday));
76 ptrvalues[6] = dec2bcd(tmYearToY2k(gt.year-2000));
62 Wire.write(dec2bcd(tm.Day));
77 return te_rtc_write_reg(DS1308_SEC_ADD, ptrvalues, 7)==0;
63 Wire.write(dec2bcd(tm.Month));
64 Wire.write(dec2bcd(tmYearToY2k(tm.Year)));
65 Wire.endTransmission();
66
67 Wire.beginTransmission(DS1308_CTRL_ID);
68 // Address the Clock Control and the Seconds register
69 Wire.write(DS1308_SEC_ADD);
70 // Set clock control bit to 0 and number of seconds. This starts the clock
71 Wire.write(dec2bcd(tm.Second));
72 Wire.endTransmission();
73 }
78 }
74
79
75 /*!
80 bool te_rtc_read_date_time(gnss_precise_time &gt){
76 * \fn activate_pps
81 uint8_t ptrvalues[7];
77 * \brief Activa la generacion de una senal de 1Hz (PPS) desde el RTC DS1308. Este
82 bool ret =te_rtc_read_reg(DS1308_SEC_ADD, ptrvalues, 7)==7;
78 * PPS debe estar sincronizado con el PPS del GNSS.
83 gt.sec = bcd2dec(ptrvalues[0]);
79 */
84 gt.minu = bcd2dec(ptrvalues[1]);
80 void activate_pps(void) {
85 gt.hour = bcd2dec(ptrvalues[2]);
81 Wire.beginTransmission(DS1308_CTRL_ID);
86 gt.day = bcd2dec(ptrvalues[4]);
82 Wire.write(DS1308_CTL_ADD);
87 gt.month = bcd2dec(ptrvalues[5]);
83 // CLKIN com 1Hz de salida (1PPS)
88 gt.year = bcd2dec(y2kYearToTm(ptrvalues[6]))+2000;
84 Wire.write(0<<ECLK|0<<OSF|1<<SQWE|0<<LOS|0<<BBCLK|0<<RS1|0<<RS0);
89 return ret;
85 Wire.endTransmission();
86 }
90 }
87
88 ///////////////////////////////////////////////////////////////////////////////
91 ///////////////////////////////////////////////////////////////////////////////
89
92
90
93
91 /*!
94 /*!
92 * \fn read_ram
95 * \fn read_ram
93 * \brief Lee un buffer de la memoria RAM interna del RTC DS1308, de la
96 * \brief Lee un buffer de la memoria RAM interna del RTC DS1308, de la
94 * direccion especificada.
97 * direccion especificada.
95 * \param addr direccion relativa a la RAM (0 es la primera) del registro
98 * \param addr direccion relativa a la RAM (0 es la primera) del registro
96 * en DS1308.
99 * en DS1308.
97 * \param buff Direccion del buffer al cual se copiaran los valores.
100 * \param buff Direccion del buffer al cual se copiaran los valores.
98 * \param cnt Numero de elementos acpiar del DS1308.
101 * \param cnt Numero de elementos acpiar del DS1308.
99 * \return estatus
102 * \return estatus
100 * 0 success
103 * 0 success
101 * 2 error: address send, nack received
104 * 2 error: address send, nack received
102 * 3 error: data send, nack received
105 * 3 error: data send, nack received
103 * 4 other twi error
106 * 4 other twi error
104 */
107 */
105 uint8_t read_ram(uint8_t regaddr, uint8_t *pbuf, uint8_t cnt) {
108 uint8_t te_rtc_read_reg(uint8_t regaddr, uint8_t *pbuf, uint8_t cnt) {
106
109
107 uint8_t nread=0;
110 uint8_t nread=0;
108 while( (cnt > 0) && ( regaddr < DS1308_RAM_REGS ) ) {
111 while(cnt > 0 ) {
109 Wire.beginTransmission(DS1308_CTRL_ID);
112 Wire.beginTransmission(DS1308_CTRL_ID);
110 Wire.write(regaddr+DS1308_RAM_BASE);
113 Wire.write(regaddr);
111 Wire.endTransmission();
114 Wire.endTransmission();
112 Wire.requestFrom((uint8_t)DS1308_CTRL_ID, cnt);
115 Wire.requestFrom((uint8_t)DS1308_CTRL_ID, cnt);
113 while(Wire.available() && (cnt > 0) && (regaddr < DS1308_RAM_REGS) ) {
116 while(Wire.available() && (cnt > 0) ) {
114 pbuf[nread] = Wire.read();
117 pbuf[nread] = Wire.read();
115 nread++; cnt--; regaddr++;
118 nread++; cnt--; regaddr++;
116 } /* while */
119 } /* while */
117 }
120 }
118 return (nread);
121 return (nread);
119 }
122 }
120
123
121 /*!
122 * \fn write_ram
123 * \brief Escribe un valor en la memoria RAM interna del RTC DS1308, en la
124 * direccion especificada.
125 * \param addr direccion relativa a la RAM (0 es la primera) del registro
126 * en DS1308.
127 * \param val valor que se desea escribir en el registro.
128 * \return estatus
129 * 0 success
130 * 2 error: address send, nack received
131 * 3 error: data send, nack received
132 * 4 other twi error
133 */
134 uint8_t write_ram(uint8_t regaddr, uint8_t val) {
135
124
136 uint8_t rc=0;
137 if (regaddr >= DS1308_RAM_REGS) return (DS1308_RAM_REGS); // 0 thru 51
138 Wire.beginTransmission(DS1308_CTRL_ID);
139 Wire.write(regaddr+DS1308_RAM_BASE);
140 Wire.write(val);
141 rc = Wire.endTransmission();
142 return(rc);
143 }
144
125
145 /*!
126 /*!
146 * \fn write_ram
127 * \fn write_ram
147 * \brief Escribe el contenido de un buffer de cnt elementos en la memoria
128 * \brief Escribe el contenido de un buffer de cnt elementos en la memoria
148 * RAM interna del RTC DS1308, en la direccion especificada.
129 * RAM interna del RTC DS1308, en la direccion especificada.
149 * \param addr direccion relativa a la RAM (0 es la primera) del inicio del
130 * \param addr direccion relativa a la RAM (0 es la primera) del inicio del
150 * buffer en DS1308.
131 * buffer en DS1308.
151 * \param pbuf direccion del buffer a copiar en la RAM del DS1308.
132 * \param pbuf direccion del buffer a copiar en la RAM del DS1308.
152 * \param cnt Numero de elementos a copiar.
133 * \param cnt Numero de elementos a copiar.
153 * \return estatus
134 * \return estatus
154 * 0 success
135 * 0 success
155 * 2 error: address send, nack received
136 * 2 error: address send, nack received
156 * 3 error: data send, nack received
137 * 3 error: data send, nack received
157 * 4 other twi error
138 * 4 other twi error
158 */
139 */
159 uint8_t write_ram(uint8_t regaddr, const uint8_t *pbuf,uint8_t cnt) {
140 uint8_t te_rtc_write_reg(uint8_t regaddr,uint8_t *pbuf,uint8_t cnt) {
160
161 uint8_t nbytes, rc=0;
141 uint8_t nbytes, rc=0;
162 if (regaddr >= DS1308_RAM_REGS) return (DS1308_RAM_REGS); // 0 thru 55
163 if (regaddr+cnt > DS1308_RAM_REGS) cnt = DS1308_RAM_REGS-regaddr;
164 while (cnt > 0) {
142 while (cnt > 0) {
165 nbytes = min(cnt, BUFFER_LENGTH-1);
143 nbytes = cnt;
166 Wire.beginTransmission(DS1308_CTRL_ID);
144 Wire.beginTransmission(DS1308_CTRL_ID);
167 Wire.write(regaddr+DS1308_RAM_BASE);
145 Wire.write(regaddr);
168 Wire.write((uint8_t*)pbuf, nbytes);
146 Wire.write((uint8_t*)pbuf, nbytes);
169 rc = Wire.endTransmission();
147 rc = Wire.endTransmission();
170 cnt -=nbytes;
148 cnt -=nbytes;
171 regaddr+=nbytes;
149 regaddr+=nbytes;
172 pbuf +=nbytes;
150 pbuf +=nbytes;
173 }
151 }
174 return(rc);
152 return rc;
175 }
153 }
176
154
177
155
178 // Convert Decimal to Binary Coded Decimal (BCD). 2 digits only
156 // Convert Decimal to Binary Coded Decimal (BCD). 2 digits only
179 inline uint8_t dec2bcd(uint8_t val) {
157 inline uint8_t dec2bcd(uint8_t val) {
180 return val + 6 * (val / 10);
158 return val + 6 * (val / 10);
181 }
159 }
182
160
183
161 inline uint8_t bcd2dec(uint8_t val){
184 }// end namespace rtc
162 return (val>>4)*10 + (val&0x0f);
163 }
@@ -1,65 +1,64
1 /*
1 /*
2 * rtc1308.h
2 * rtc1308.h
3 *
3 *
4 * Created on: Nov 4, 2014
4 * Created on: Nov 4, 2014
5 * Author: Alan Aguilar Sologuren
5 * Author: Alan Aguilar Sologuren
6 */
6 */
7
7
8 #ifndef RTC1308_H_
8 #ifndef RTC1308_H_
9 #define RTC1308_H_
9 #define RTC1308_H_
10
10
11 #include <Arduino.h>
11 #include <Arduino.h>
12 #include <pins_arduino.h>
12 #include <pins_arduino.h>
13 #include <Wire.h>
13 #include <Wire.h>
14 #include <Time.h>
14 #include <Time.h>
15 #include <te_structs.h>
15 #include <te_structs.h>
16
16
17 extern void ISR_gnss_pps(void);
17 extern void ISR_gnss_pps(void);
18
19 namespace te_rtc{
20
18
21 #define DS1308_CTRL_ID 0x68
19 #define DS1308_CTRL_ID 0x68
22 #define DS1308_RAM_BASE 0x08 /*!< Direccion base de la memoria RAM */
20 #define DS1308_RAM_BASE 0x08 /*!< Direccion base de la memoria RAM */
23 #define DS1308_RAM_MAX 0x37 /*!< Direccion del final de la RAM */
21 #define DS1308_RAM_MAX 0x37 /*!< Direccion del final de la RAM */
24 #define DS1308_RAM_REGS (DS1308_RAM_MAX - DS1308_RAM_BASE + 1)
22 #define DS1308_RAM_REGS (DS1308_RAM_MAX - DS1308_RAM_BASE + 1)
25
23
26 #define DS1308_SEC_ADD 0x00 /*!< Direccion de registro de configuracion de segundos */
24 #define DS1308_SEC_ADD 0x00 /*!< Direccion de registro de configuracion de segundos */
27 #define DS1308_MIN_ADD 0x01 /*!< Direccion de registro de configuracion de minutos */
25 #define DS1308_MIN_ADD 0x01 /*!< Direccion de registro de configuracion de minutos */
28 #define DS1308_HOU_ADD 0x02 /*!< Direccion de registro de configuracion de horas */
26 #define DS1308_HOU_ADD 0x02 /*!< Direccion de registro de configuracion de horas */
29 #define DS1308_DOW_ADD 0x03 /*!< Direccion de registro de configuracion de dia de la semana */
27 #define DS1308_DOW_ADD 0x03 /*!< Direccion de registro de configuracion de dia de la semana */
30 #define DS1308_DAT_ADD 0x04 /*!< Direccion de registro de configuracion de dia del mes */
28 #define DS1308_DAT_ADD 0x04 /*!< Direccion de registro de configuracion de dia del mes */
31 #define DS1308_MON_ADD 0x05 /*!< Direccion de registro de configuracion de mes */
29 #define DS1308_MON_ADD 0x05 /*!< Direccion de registro de configuracion de mes */
32 #define DS1308_YEA_ADD 0x06 /*!< Direccion de registro de configuracion de ahno */
30 #define DS1308_YEA_ADD 0x06 /*!< Direccion de registro de configuracion de ahno */
33 #define DS1308_CTL_ADD 0x07 /*!< Direccion de registro de control */
31 #define DS1308_CTL_ADD 0x07 /*!< Direccion de registro de control */
34
32
35
33
36 #define OUT 7 /*!< Bit 7 en DS1308_CTL_ADD */
34 #define OUT 7 /*!< Bit 7 en DS1308_CTL_ADD */
37 #define ECLK 6 /*!< Bit 6 en DS1308_CTL_ADD */
35 #define ECLK 6 /*!< Bit 6 en DS1308_CTL_ADD */
38 #define OSF 5 /*!< Bit 5 en DS1308_CTL_ADD */
36 #define OSF 5 /*!< Bit 5 en DS1308_CTL_ADD */
39 #define SQWE 4 /*!< Bit 4 en DS1308_CTL_ADD */
37 #define SQWE 4 /*!< Bit 4 en DS1308_CTL_ADD */
40 #define LOS 3 /*!< Bit 3 en DS1308_CTL_ADD */
38 #define LOS 3 /*!< Bit 3 en DS1308_CTL_ADD */
41 #define BBCLK 2 /*!< Bit 2 en DS1308_CTL_ADD */
39 #define BBCLK 2 /*!< Bit 2 en DS1308_CTL_ADD */
42 #define RS1 1 /*!< Bit 1 en DS1308_CTL_ADD */
40 #define RS1 1 /*!< Bit 1 en DS1308_CTL_ADD */
43 #define RS0 0 /*!< Bit 0 en DS1308_CTL_ADD */
41 #define RS0 0 /*!< Bit 0 en DS1308_CTL_ADD */
44
42
45 //pin ports
43 //pin ports
46 #define CLKIN 38 /*!< internal PPS output PD7 AVR <> 38 ARDUINO MEGA */
44 #define CLKIN 38 /*!< internal PPS output PD7 AVR <> 38 ARDUINO MEGA */
47 #define PPS 0 /*|< GNSS receptor PPS signal interrupt int0, port 2 (Arduino i/o), pe4 (avr i/o) */
45 #define PPS 0 /*|< GNSS receptor PPS signal interrupt int0, port 2 (Arduino i/o), pe4 (avr i/o) */
48
46
47 uint8_t te_rtc_write_reg(uint8_t regaddr, uint8_t *ptrvalues, uint8_t nregs);
48 uint8_t te_rtc_read_reg(uint8_t regaddr, uint8_t *ptrvalues, uint8_t nregs);
49
49
50 void initialization(void);
51 void configure(rtc_config_struct &rtc);
52 void set_time(tmElements_t &tm);
53 void activate_pps(void);
54
50
55 uint8_t read_ram(uint8_t regaddr, uint8_t *pbuf, uint8_t cnt);
51 bool te_rtc_initialization(void);
56 uint8_t write_ram(uint8_t regaddr, uint8_t val);
52 bool te_rtc_configure(rtc_config_struct &rtc);
57 uint8_t write_ram(uint8_t regaddr, const uint8_t *pbuf,uint8_t cnt);
53 bool te_rtc_activate_pps(bool actv);
58
54 bool te_rtc_set_date_time(gnss_precise_time &gt);
59 inline uint8_t dec2bcd(uint8_t val);
55 bool te_rtc_read_date_time(gnss_precise_time &gt);
60
56
61
57
62
58
63 }
59
60 // TODO a utils
61 inline uint8_t dec2bcd(uint8_t val);
62 inline uint8_t bcd2dec(uint8_t val);
64
63
65 #endif /* RTC1308_H_ */
64 #endif /* RTC1308_H_ */
@@ -1,20 +1,20
1 /*
1 /*
2 * te2saig.h
2 * te2saig.h
3 *
3 *
4 * Created on: Nov 4, 2014
4 * Created on: Nov 4, 2014
5 * Author: Alan Aguilar Sologuren
5 * Author: Alan Aguilar Sologuren
6 */
6 */
7
7
8 #ifndef TE2SAIG_H_
8 #ifndef TE2SAIG_H_
9 #define TE2SAIG_H_
9 #define TE2SAIG_H_
10
10
11 // pin ports to Raspberry Pi
11 // pin ports to Raspberry Pi
12 #define RX2_RBP RXD2
12 #define RX2_RBP RXD2
13 #define TX2_RBP TXD2
13 #define TX2_RBP TXD2
14
14
15 //pin ports to system
15 //pin ports to system
16 #define LOCK 42 /*!< GNSS receptor LOCK signal PL7 AVR <> 42 ARDUINO MEGA */
16 #define LOCK 42 /*!< GNSS receptor LOCK signal PL7 AVR <> 42 ARDUINO MEGA */
17
17
18
18 //
19
19
20 #endif /* TE2SAIG_H_ */
20 #endif /* TE2SAIG_H_ */
General Comments 0
You need to be logged in to leave comments. Login now