Browse code

Power saving changes, add new fonts, bitmaps and screens

Nils Faerber authored on 19/05/2013 00:07:04
Showing 1 changed files
... ...
@@ -82,7 +82,7 @@ uint8_t mw_get_battery_percentage_from_val(unsigned int BattVal)
82 82
 	return (unsigned char)BattVal;
83 83
 }
84 84
 
85
-unsigned int mw_get_amblight_adc_val(void)
85
+uint16_t mw_get_amblight_adc_val(void)
86 86
 { 
87 87
 	LIGHT_SENSE_ENABLE();
88 88
 
Browse code

Maybe a little sniff mode, add ambient light adc (not working), fix accelerometer display orientation

Nils Faerber authored on 06/05/2013 23:39:18
Showing 1 changed files
... ...
@@ -58,17 +58,18 @@ unsigned int mw_get_battery_adc_val(void)
58 58
 	ENABLE_ADC();
59 59
 
60 60
 	/* WaitForAdcBusy(); */
61
-	while (ADC12CTL1 & ADC12BUSY);
61
+	while (ADC12CTL1 & ADC12BUSY)
62
+		nop();
62 63
 
63
-	/* Convert the ADC count for the battery input into a voltage 
64
+	/* Convert the ADC count for the battery input into a voltage
64 65
 	 * ADC12MEM1: Counts Battery Voltage in ADC counts
65 66
 	 * Result: Battery voltage in millivolts */
66 67
 	BATTERY_SENSE_DISABLE();
67 68
 
68
-	return (unsigned int)(CONVERSION_FACTOR_BATTERY * (double)ADC12MEM1);  
69
+	return (unsigned int)(CONVERSION_FACTOR_BATTERY * (double)ADC12MEM1);
69 70
 }
70 71
 
71
-unsigned char mw_get_battery_percentage_from_val(unsigned int BattVal)
72
+uint8_t mw_get_battery_percentage_from_val(unsigned int BattVal)
72 73
 {
73 74
 	if (BattVal > BATTERY_FULL_LEVEL)
74 75
 		BattVal = BATTERY_FULL_LEVEL;
... ...
@@ -81,3 +82,20 @@ unsigned char mw_get_battery_percentage_from_val(unsigned int BattVal)
81 82
 	return (unsigned char)BattVal;
82 83
 }
83 84
 
85
+unsigned int mw_get_amblight_adc_val(void)
86
+{ 
87
+	LIGHT_SENSE_ENABLE();
88
+
89
+	CLEAR_START_ADDR();
90
+	ADC12CTL1 |= ADC12CSTARTADD_2;
91
+	ENABLE_ADC();
92
+
93
+	/* WaitForAdcBusy(); */
94
+	while (ADC12CTL1 & ADC12BUSY)
95
+		nop();
96
+
97
+	LIGHT_SENSE_DISABLE();
98
+
99
+	return ADC12MEM2;
100
+}
101
+
Browse code

Here we are! MetaWatch support in Oswald!

Nils Faerber authored on 27/04/2013 20:22:32
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,83 @@
1
+#include <msp430.h>
2
+#include <msp430xgeneric.h>
3
+#include <stdint.h>
4
+
5
+#include "mw_main.h"
6
+
7
+#define HARDWARE_CFG_INPUT_CHANNEL  ( ADC12INCH_13 )
8
+#define BATTERY_SENSE_INPUT_CHANNEL ( ADC12INCH_15 )
9
+#define LIGHT_SENSE_INPUT_CHANNEL   ( ADC12INCH_1 )
10
+
11
+#define ENABLE_ADC()		{ ADC12CTL0 |= ADC12ON; ADC12CTL0 |= ADC12ENC + ADC12SC; }
12
+#define DISABLE_ADC()		{ ADC12CTL0 &= ~ADC12ENC; ADC12CTL0 &= ~ADC12ON; }
13
+#define CLEAR_START_ADDR()	{ ADC12CTL1 &= 0x0FFF; }
14
+
15
+const double CONVERSION_FACTOR_BATTERY = ((24300.0+38300.0)*2.5*1000.0)/(4095.0*24300.0);
16
+#define BATTERY_FULL_LEVEL		(4140)
17
+#define BATTERY_CRITICAL_LEVEL		(3300)
18
+#define BATTERY_LEVEL_RANGE		(BATTERY_FULL_LEVEL - BATTERY_CRITICAL_LEVEL)
19
+
20
+/*! conversion factor */
21
+const double CONVERSION_FACTOR =  2.5*10000.0/4096.0;
22
+
23
+
24
+void mw_init_adc(void)
25
+{
26
+	REFCTL0 = REFMSTR | REFTCOFF; 
27
+
28
+	LIGHT_SENSE_INIT();
29
+	BATTERY_SENSE_INIT();
30
+	HARDWARE_CFG_SENSE_INIT();
31
+ 
32
+	/* allow conditional request for modosc */
33
+	UCSCTL8 |= MODOSCREQEN;
34
+
35
+	/* select ADC12SC bit as sample and hold source (00) 
36
+	 * and use pulse mode
37
+	 * use modosc / 8 because frequency must be 0.45 MHz to 2.7 MHz (0.625 MHz)
38
+	 */
39
+	ADC12CTL1 = ADC12CSTARTADD_0 + ADC12SHP + ADC12SSEL_0 + ADC12DIV_7; 
40
+
41
+	/* 12 bit resolution, only use reference when doing a conversion */
42
+	ADC12CTL2 = ADC12TCOFF + ADC12RES_2 + ADC12REFBURST;
43
+
44
+	/* setup input channels */
45
+	ADC12MCTL0 = HARDWARE_CFG_INPUT_CHANNEL + ADC12EOS;
46
+	ADC12MCTL1 = BATTERY_SENSE_INPUT_CHANNEL + ADC12EOS;
47
+	ADC12MCTL2 = LIGHT_SENSE_INPUT_CHANNEL + ADC12EOS;
48
+}
49
+
50
+unsigned int mw_get_battery_adc_val(void)
51
+{ 
52
+	BATTERY_SENSE_ENABLE();
53
+
54
+	/* low_bat_en assertion to bat_sense valid is ~100 ns */
55
+	/* Start battery sense conversion */
56
+	CLEAR_START_ADDR();
57
+	ADC12CTL1 |= ADC12CSTARTADD_1;
58
+	ENABLE_ADC();
59
+
60
+	/* WaitForAdcBusy(); */
61
+	while (ADC12CTL1 & ADC12BUSY);
62
+
63
+	/* Convert the ADC count for the battery input into a voltage 
64
+	 * ADC12MEM1: Counts Battery Voltage in ADC counts
65
+	 * Result: Battery voltage in millivolts */
66
+	BATTERY_SENSE_DISABLE();
67
+
68
+	return (unsigned int)(CONVERSION_FACTOR_BATTERY * (double)ADC12MEM1);  
69
+}
70
+
71
+unsigned char mw_get_battery_percentage_from_val(unsigned int BattVal)
72
+{
73
+	if (BattVal > BATTERY_FULL_LEVEL)
74
+		BattVal = BATTERY_FULL_LEVEL;
75
+	if (BattVal < BATTERY_CRITICAL_LEVEL)
76
+		BattVal = 0;
77
+	else
78
+		BattVal -= BATTERY_CRITICAL_LEVEL;
79
+	BattVal = (BattVal > 0) ? (BattVal * 10 / (BATTERY_LEVEL_RANGE / 10)) : 0;
80
+
81
+	return (unsigned char)BattVal;
82
+}
83
+