Automatic commit at Wed Jul 25 15:50:05 WST 2012
[matches/honours.git] / research / TCS / apparatus / source_code / dac.c
1 #include "timer.h"\r
2 #include "dac.h"\r
3 #include "usart.h"\r
4 #include "main.h"\r
5 \r
6 \r
7 //static int prevDDR;\r
8 //static int prevPORT;\r
9 \r
10 /*\r
11  * @file dac.h\r
12  * @author Sam Moore\r
13  * @purpose driver for DAC (efmini mcp4922)\r
14  */\r
15 \r
16 /**\r
17  * Initialise the DAC\r
18  */\r
19 \r
20 void DAC_Init(void)\r
21 {\r
22         //prevDDR = DAC_DDR;\r
23         //prevPORT = DAC_PORT;\r
24 \r
25         DAC_DDR = 0xFF & ~(1<<PORTB6);\r
26         DAC_PORT = 0xFF | (1<<PORTB6);\r
27 \r
28         DAC_PORT = (1<<CS) | (1<<LDAC) | (1<<SHDN) | (1<<PORTB6);\r
29         //runningDAC = TRUE;\r
30 }\r
31 \r
32 void DAC_Set(int output)\r
33 {\r
34         DAC_Init();\r
35         \r
36         while (SCK_ON);\r
37                 \r
38         DAC_PORT |= (1<<CS) | (1<<LDAC);\r
39 \r
40         while (SCK_OFF);\r
41         while (SCK_ON);\r
42         \r
43         //Wait for clock off\r
44 \r
45         //Set CS low\r
46         DAC_PORT &= ~(1<<CS);\r
47 \r
48         //Configuration bits:\r
49 \r
50         //A/B\r
51         DAC_PORT &= ~(1<<SDI); //Select DAC A\r
52 \r
53         while (SCK_OFF);\r
54         while (SCK_ON);\r
55 \r
56         //BUF\r
57         DAC_PORT |= (1<<SDI); //Select buffered reference voltage\r
58 \r
59         while (SCK_OFF);\r
60         while (SCK_ON);\r
61 \r
62         //GA\r
63         if (output > 0xFFF)\r
64         {\r
65                 DAC_PORT &= ~(1<<SDI); //Select 2x gain\r
66                 output = output / 2;\r
67         }\r
68         else\r
69                 DAC_PORT |= (1<<SDI); //Select 1x gain\r
70 \r
71         while (SCK_OFF);\r
72         while (SCK_ON);\r
73 \r
74         //SHDN\r
75         DAC_PORT |= (1<<SDI); //DAC is turned on!\r
76 \r
77         while (SCK_OFF);\r
78         while (SCK_ON);\r
79 \r
80         //Now send the 12 data bits\r
81         for (int i=1; i <= 12; ++i)\r
82         {\r
83                 if ((output & (1<<(12-i))) == 0x00)\r
84                         DAC_PORT &= ~(1<<SDI);\r
85                 else\r
86                         DAC_PORT |= (1<<SDI);\r
87 \r
88         \r
89                 while (SCK_OFF);\r
90                 while (SCK_ON);\r
91         }\r
92 \r
93         // Set CS to 1\r
94         DAC_PORT |= (1<<CS);\r
95 \r
96         while (SCK_OFF);\r
97         while (SCK_ON);\r
98 \r
99         //Toggle LDAC\r
100         DAC_PORT &= ~(1<<LDAC);\r
101 \r
102         while (SCK_OFF);\r
103         while (SCK_ON);\r
104 \r
105         DAC_PORT |= (1<<LDAC);\r
106 \r
107         while (SCK_OFF);\r
108         while (SCK_ON);\r
109 }\r
110 \r
111 \r
112 \r
113 //EOF\r
114 \r

UCC git Repository :: git.ucc.asn.au