?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{BLAME START}

library

?curdirlinks? -

Blame information for rev 6

Line No. Rev Author Line
1 6 kaklik //*****************************************************************************
2 // File Name : spyglasstest.c
3 //
4 // Title : example usage of the Spyglass I2C-controller user interface
5 // Revision : 1.0
6 // Notes :
7 // Target MCU : Atmel AVR series
8 // Editor Tabs : 4
9 //
10 // Revision History:
11 // When Who Description of change
12 // ----------- ----------- -----------------------
13 // 28-Aug-2005 pstang Created the program
14 //*****************************************************************************
15  
16 #include <avr/io.h>
17  
18 #include "global.h"
19 #include "timer.h"
20 #include "uart.h"
21 #include "rprintf.h"
22 #include "vt100.h"
23 #include "lcd.h"
24 #include "debug.h"
25 #include "i2c.h"
26 #include "spyglass.h"
27  
28 // defines
29 #define TIMER_PRESCALE 1024
30 #define TIMER_INTERVAL (F_CPU/TIMER_PRESCALE/100)
31  
32 // global variables
33 static volatile unsigned long UptimeMs;
34 u08 Contrast=0;
35  
36 // prototypes
37 void spyglassTest(void);
38 void systickHandler(void);
39 void i2cDeviceSearch(void);
40 void serviceLocal(void);
41  
42 int main(void)
43 {
44 timerInit(); // initializing timers
45 uartInit(); // initializing serial port
46 uartSetBaudRate(115200); // set serial port baud rate
47 rprintfInit(uartSendByte); // direct rprintf() output to go to serial port
48 timerPause(100); // wait for a moment
49  
50 // print welcome message
51 rprintf("\r\n\n\nWelcome to the Spyglass UI test.\r\n");
52  
53 // begin test application
54 spyglassTest();
55  
56 return 0;
57 }
58  
59 void spyglassTest(void)
60 {
61 // initializing Spyglass interface and I2C bus
62 rprintf("Initializing Spyglass communication...");
63 spyglassInit();
64 spyglassLcdInit();
65 rprintf("Done!\r\n");
66 rprintf("Printing 'Hello World!' message to spyglass LCD.\r\n");
67  
68 rprintfInit(spyglassLcdWriteChar);
69 spyglassLcdGotoXY(0,0);
70 rprintfProgStrM("Hello World!");
71 rprintfInit(uartSendByte);
72  
73 timerPause(1000);
74  
75 // initialize systick timer
76 rprintf("Initializing Periodic Timer\r\n");
77 timer2SetPrescaler(TIMERRTC_CLK_DIV1024);
78 // attach the 'systickHandler' so that it gets called every time Timer2 overflows
79 timerAttach(TIMER2OVERFLOW_INT, systickHandler);
80  
81 rprintf("Starting local command prompt. Type '?' to get help.\r\n");
82 rprintf("cmd>");
83  
84 while(1)
85 {
86 serviceLocal();
87 }
88 }
89  
90 void systickHandler(void)
91 {
92 u16 tms;
93 u08 ts,tm,th;
94 u08 pb;
95  
96 // set timer for 10ms interval
97 TCNT2 = (unsigned char)-TIMER_INTERVAL;
98 // count up on uptime
99 UptimeMs += 10;
100  
101 // if we at a 100ths millisecond interval, update the display
102 if(!(UptimeMs % 100))
103 {
104 // redirect rprintf() output to spyglass LCD
105 rprintfInit(spyglassLcdWriteChar);
106  
107 // print banner message
108 spyglassLcdGotoXY(0,0);
109 rprintfProgStrM("**** SpyglassUI ****");
110  
111 // read pushbuttons and take appropriate action
112 pb = spyglassGetPushbuttons();
113 spyglassLcdGotoXY(0,1);
114 rprintf("Buttons: ");
115 rprintfNum(2,8,FALSE,'0',pb);
116  
117 if((pb & 0x01) && (Contrast < 255))
118 Contrast++;
119 if((pb & 0x02) && (Contrast > 0))
120 Contrast--;
121 if(pb & 0x08)
122 spyglassSetLeds(0x01);
123 if(pb & 0x10)
124 spyglassSetLeds(0x02);
125  
126 // show display contrast
127 spyglassLcdGotoXY(0,2);
128 rprintf("LCD Contrast: ");
129 rprintfNum(10,3,FALSE,' ',Contrast);
130 spyglassSetLcdContrast(Contrast);
131  
132 // show time
133 tms = (UptimeMs)%1000;
134 ts = (UptimeMs/1000)%60;
135 tm = (UptimeMs/60000l)%60;
136 th = (UptimeMs/3600000l);
137 spyglassLcdGotoXY(0,3);
138 rprintf("Time:");
139 rprintfNum(10,3,FALSE,' ',th);
140 rprintfChar(':');
141 rprintfNum(10,2,FALSE,'0',tm);
142 rprintfChar(':');
143 rprintfNum(10,2,FALSE,'0',ts);
144 rprintfChar('.');
145 rprintfNum(10,3,FALSE,'0',tms);
146 rprintf("ms");
147  
148 // return rprintf() output to serial port
149 rprintfInit(uartSendByte);
150 }
151 }
152  
153 void serviceLocal(void)
154 {
155 int c;
156  
157 // a little command-prompt utility to play with the spyglass UI
158 // all commands are single characters
159  
160 if( (c = uartGetByte()) != -1)
161 {
162 // echo command to terminal
163 uartSendByte(c);
164 // process command
165 switch(c)
166 {
167 case 'i': spyglassLcdInit(); break;
168 case 'h':
169 rprintfInit(spyglassLcdWriteChar);
170 spyglassLcdGotoXY(0,0);
171 rprintf("*** HELLO WORLD ***");
172 rprintfInit(uartSendByte);
173 break;
174 case 'p':
175 rprintf("Pushbutton State: 0x%x\r\n", spyglassGetPushbuttons());
176 break;
177 case '+': if(Contrast<255) Contrast++; rprintf("\r\nLCD Contrast: %d\r\n", Contrast); spyglassSetLcdContrast(Contrast); break;
178 case '-': if(Contrast>0) Contrast--; rprintf("\r\nLCD Contrast: %d\r\n", Contrast); spyglassSetLcdContrast(Contrast); break;
179 case 'l': spyglassSetLeds(0x00); break;
180 case 'L': spyglassSetLeds(0xFF); break;
181 case 'b': spyglassSetBeeper(0); break;
182 case 'B': spyglassSetBeeper(1); break;
183 case 'x':
184 i2cDeviceSearch();
185 break;
186 case '?':
187 rprintfProgStrM("\r\n");
188 rprintfProgStrM("--- Spyglass Commands: ---\r\n");
189 rprintfProgStrM("(i) Initialize Spyglass LCD\r\n");
190 rprintfProgStrM("(h) Print 'Hello World' message to Spyglass LCD\r\n");
191 rprintfProgStrM("(p) Get Spyglass pushbutton state\r\n");
192 rprintfProgStrM("(+) Increase contrast number (lightens contrast)\r\n");
193 rprintfProgStrM("(-) Decrease contrast number (darkens contrast)\r\n");
194 rprintfProgStrM("(l) Set Spyglass User LEDs to OFF\r\n");
195 rprintfProgStrM("(L) Set Spyglass User LEDs to ON\r\n");
196 rprintfProgStrM("(b) Set Spyglass beeper to OFF\r\n");
197 rprintfProgStrM("(B) Set Spyglass beeper to ON\r\n");
198 rprintfProgStrM("--- General Commands: ---\r\n");
199 rprintfProgStrM("(x) Search for I2C devices on the bus\r\n");
200 rprintfProgStrM("(?) Help\r\n");
201 break;
202 case '\r':
203 default:
204 break;
205 }
206 // print new prompt
207 rprintfProgStrM("\r\ncmd>");
208 }
209 }
210  
211 void i2cDeviceSearch(void)
212 {
213 u08 i2cAddr;
214 u08 i2cStat;
215  
216 // this function searches all device addresses on the I2C bus
217 // and returns addresses that are live (have a device)
218  
219 rprintf("\r\nSearching for I2c devices on bus\r\n");
220  
221 for(i2cAddr = 0; i2cAddr<0x80; i2cAddr+=2)
222 {
223 i2cStat = i2cMasterSendNI(i2cAddr, 0, 0);
224 if(i2cStat == I2C_OK)
225 rprintf("Device present at address 0x%x\r\n", i2cAddr);
226 }
227 rprintf("Search complete.\r\n");
228 }
{BLAME END}
{FOOTER START}

Powered by WebSVN v2.8.3