test code for our MBED board

Dependencies:   mbed lwip

Committer:
lolpcc
Date:
Tue Jan 12 16:49:56 2010 +0000
Revision:
0:9edfcca7cd25
Child:
1:6877bb99aa17

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lolpcc 0:9edfcca7cd25 1 #include "mbed.h"
lolpcc 0:9edfcca7cd25 2 #include "diags.h"
lolpcc 0:9edfcca7cd25 3
lolpcc 0:9edfcca7cd25 4 I2C i2c(p9, p10); // sda, scl
lolpcc 0:9edfcca7cd25 5
lolpcc 0:9edfcca7cd25 6 #define LCD 0xC6
lolpcc 0:9edfcca7cd25 7 #define SEVEN_SEG 0x70
lolpcc 0:9edfcca7cd25 8 #define PIO 0x40
lolpcc 0:9edfcca7cd25 9 /******************************************/
lolpcc 0:9edfcca7cd25 10 /* */
lolpcc 0:9edfcca7cd25 11 /* Probe the I2C bus, and show the */
lolpcc 0:9edfcca7cd25 12 /* user what we have found */
lolpcc 0:9edfcca7cd25 13 /* */
lolpcc 0:9edfcca7cd25 14 /* */
lolpcc 0:9edfcca7cd25 15 /* */
lolpcc 0:9edfcca7cd25 16 /******************************************/
lolpcc 0:9edfcca7cd25 17 void i2c_probe(void)
lolpcc 0:9edfcca7cd25 18 {
lolpcc 0:9edfcca7cd25 19 char buf[0x60];
lolpcc 0:9edfcca7cd25 20 sprintf(buf,"Searching for I2C devices...\n\r");
lolpcc 0:9edfcca7cd25 21 serial_output_string(buf);
lolpcc 0:9edfcca7cd25 22
lolpcc 0:9edfcca7cd25 23 int count = 0;
lolpcc 0:9edfcca7cd25 24 for (int address=4; address<256; address+=2) {
lolpcc 0:9edfcca7cd25 25 if (!i2c.write(address, NULL, 0)) { // 0 returned is ok
lolpcc 0:9edfcca7cd25 26 sprintf(buf," - I2C device found at address 0x%02X\n\r", address);
lolpcc 0:9edfcca7cd25 27 serial_output_string(buf);
lolpcc 0:9edfcca7cd25 28 count++;
lolpcc 0:9edfcca7cd25 29 }
lolpcc 0:9edfcca7cd25 30 }
lolpcc 0:9edfcca7cd25 31 sprintf(buf,"%d devices found\n\r", count);
lolpcc 0:9edfcca7cd25 32 serial_output_string(buf);
lolpcc 0:9edfcca7cd25 33 }
lolpcc 0:9edfcca7cd25 34
lolpcc 0:9edfcca7cd25 35 /******************************************/
lolpcc 0:9edfcca7cd25 36 /* */
lolpcc 0:9edfcca7cd25 37 /* Should display some basic data */
lolpcc 0:9edfcca7cd25 38 /* on the LCD interface */
lolpcc 0:9edfcca7cd25 39 /* */
lolpcc 0:9edfcca7cd25 40 /* */
lolpcc 0:9edfcca7cd25 41 /* */
lolpcc 0:9edfcca7cd25 42 /******************************************/
lolpcc 0:9edfcca7cd25 43 /* LCD tests */
lolpcc 0:9edfcca7cd25 44 void test_lcd(char t)
lolpcc 0:9edfcca7cd25 45 {
lolpcc 0:9edfcca7cd25 46 init_lcd();
lolpcc 0:9edfcca7cd25 47 clear_lcd();
lolpcc 0:9edfcca7cd25 48 write_lcd("this is a test");
lolpcc 0:9edfcca7cd25 49 }
lolpcc 0:9edfcca7cd25 50
lolpcc 0:9edfcca7cd25 51 char init_lcd(void)
lolpcc 0:9edfcca7cd25 52 {
lolpcc 0:9edfcca7cd25 53 char buf[4];
lolpcc 0:9edfcca7cd25 54 buf[0]=0;
lolpcc 0:9edfcca7cd25 55 buf[1]=19;
lolpcc 0:9edfcca7cd25 56 return(i2c.write(LCD,buf,2));
lolpcc 0:9edfcca7cd25 57 }
lolpcc 0:9edfcca7cd25 58 char clear_lcd(void)
lolpcc 0:9edfcca7cd25 59 {
lolpcc 0:9edfcca7cd25 60 char buf[4];
lolpcc 0:9edfcca7cd25 61 buf[0]=0;
lolpcc 0:9edfcca7cd25 62 buf[1]=12;
lolpcc 0:9edfcca7cd25 63 return(i2c.write(LCD,buf,2));
lolpcc 0:9edfcca7cd25 64 }
lolpcc 0:9edfcca7cd25 65 char set_lcd(char line, char col)
lolpcc 0:9edfcca7cd25 66 {
lolpcc 0:9edfcca7cd25 67 char buf[4];
lolpcc 0:9edfcca7cd25 68 buf[0]=0;
lolpcc 0:9edfcca7cd25 69 buf[1]=3;
lolpcc 0:9edfcca7cd25 70 buf[2]=line;
lolpcc 0:9edfcca7cd25 71 buf[3]=col;
lolpcc 0:9edfcca7cd25 72 return(i2c.write(LCD,buf,4));
lolpcc 0:9edfcca7cd25 73 }
lolpcc 0:9edfcca7cd25 74 char write_lcd(char *str)
lolpcc 0:9edfcca7cd25 75 {
lolpcc 0:9edfcca7cd25 76 char buf[0x60];
lolpcc 0:9edfcca7cd25 77 if(strlen(str)>50){
lolpcc 0:9edfcca7cd25 78 printf("Line length to long\n\r");
lolpcc 0:9edfcca7cd25 79 return(0);
lolpcc 0:9edfcca7cd25 80 }
lolpcc 0:9edfcca7cd25 81 sprintf(buf,"%c%s",'\0',str);
lolpcc 0:9edfcca7cd25 82 buf[0]=0;
lolpcc 0:9edfcca7cd25 83 return(i2c.write(LCD,buf,strlen(str)+1));
lolpcc 0:9edfcca7cd25 84 }
lolpcc 0:9edfcca7cd25 85 /******************************************/
lolpcc 0:9edfcca7cd25 86 /* */
lolpcc 0:9edfcca7cd25 87 /* Shoudl get some keys from the user */
lolpcc 0:9edfcca7cd25 88 /* pressing keys on the keypad */
lolpcc 0:9edfcca7cd25 89 /* and display this data on the LCD */
lolpcc 0:9edfcca7cd25 90 /* */
lolpcc 0:9edfcca7cd25 91 /* */
lolpcc 0:9edfcca7cd25 92 /******************************************/
lolpcc 0:9edfcca7cd25 93 /* Keyboard test code here */
lolpcc 0:9edfcca7cd25 94 void test_kbd(void)
lolpcc 0:9edfcca7cd25 95 {
lolpcc 0:9edfcca7cd25 96 }
lolpcc 0:9edfcca7cd25 97 char read_keyboard(void)
lolpcc 0:9edfcca7cd25 98 {
lolpcc 0:9edfcca7cd25 99 char buf[10];
lolpcc 0:9edfcca7cd25 100 i2c.read(LCD,buf,4);
lolpcc 0:9edfcca7cd25 101 if(buf[1]!=0){
lolpcc 0:9edfcca7cd25 102 switch(buf[1]){
lolpcc 0:9edfcca7cd25 103 case 0x01 :
lolpcc 0:9edfcca7cd25 104 return('1');
lolpcc 0:9edfcca7cd25 105 case 0x02 :
lolpcc 0:9edfcca7cd25 106 return('2');
lolpcc 0:9edfcca7cd25 107 case 0x04 :
lolpcc 0:9edfcca7cd25 108 return('3');
lolpcc 0:9edfcca7cd25 109 case 0x08 :
lolpcc 0:9edfcca7cd25 110 return('4');
lolpcc 0:9edfcca7cd25 111 case 0x10 :
lolpcc 0:9edfcca7cd25 112 return('5');
lolpcc 0:9edfcca7cd25 113 case 0x20 :
lolpcc 0:9edfcca7cd25 114 return('6');
lolpcc 0:9edfcca7cd25 115 case 0x40 :
lolpcc 0:9edfcca7cd25 116 return('7');
lolpcc 0:9edfcca7cd25 117 case 0x80 :
lolpcc 0:9edfcca7cd25 118 return('8');
lolpcc 0:9edfcca7cd25 119 }
lolpcc 0:9edfcca7cd25 120 }
lolpcc 0:9edfcca7cd25 121 if(buf[2]!=0){
lolpcc 0:9edfcca7cd25 122 switch(buf[2]){
lolpcc 0:9edfcca7cd25 123 case 0x01 :
lolpcc 0:9edfcca7cd25 124 return('9');
lolpcc 0:9edfcca7cd25 125 case 0x02 :
lolpcc 0:9edfcca7cd25 126 return('*');
lolpcc 0:9edfcca7cd25 127 case 0x04 :
lolpcc 0:9edfcca7cd25 128 return('0');
lolpcc 0:9edfcca7cd25 129 case 0x08 :
lolpcc 0:9edfcca7cd25 130 return('#');
lolpcc 0:9edfcca7cd25 131 }
lolpcc 0:9edfcca7cd25 132 }
lolpcc 0:9edfcca7cd25 133 return('\0');
lolpcc 0:9edfcca7cd25 134 }
lolpcc 0:9edfcca7cd25 135 /******************************************/
lolpcc 0:9edfcca7cd25 136 /* */
lolpcc 0:9edfcca7cd25 137 /* Should read and write data on the */
lolpcc 0:9edfcca7cd25 138 /* PCF8574 I/O expander, maybe with */
lolpcc 0:9edfcca7cd25 139 /* a loop back connector in time */
lolpcc 0:9edfcca7cd25 140 /* */
lolpcc 0:9edfcca7cd25 141 /* */
lolpcc 0:9edfcca7cd25 142 /******************************************/
lolpcc 0:9edfcca7cd25 143 /* PCF8574 tests */
lolpcc 0:9edfcca7cd25 144 void test_pio(char t)
lolpcc 0:9edfcca7cd25 145 {
lolpcc 0:9edfcca7cd25 146 }
lolpcc 0:9edfcca7cd25 147 /******************************************/
lolpcc 0:9edfcca7cd25 148 /* */
lolpcc 0:9edfcca7cd25 149 /* Send some data to the seven segment */
lolpcc 0:9edfcca7cd25 150 /* display device, showing the user */
lolpcc 0:9edfcca7cd25 151 /* what the SAA1064 can do */
lolpcc 0:9edfcca7cd25 152 /* */
lolpcc 0:9edfcca7cd25 153 /* */
lolpcc 0:9edfcca7cd25 154 /******************************************/
lolpcc 0:9edfcca7cd25 155
lolpcc 0:9edfcca7cd25 156 /* mapping of bit pattern to number 0-9 */
lolpcc 0:9edfcca7cd25 157 char sseg_map[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67};
lolpcc 0:9edfcca7cd25 158
lolpcc 0:9edfcca7cd25 159 void test_seven_seg(char loop)
lolpcc 0:9edfcca7cd25 160 {
lolpcc 0:9edfcca7cd25 161 unsigned char buf[10];
lolpcc 0:9edfcca7cd25 162 char a,b,c;
lolpcc 0:9edfcca7cd25 163
lolpcc 0:9edfcca7cd25 164 buf[0]=0;
lolpcc 0:9edfcca7cd25 165 buf[1]=0x27;
lolpcc 0:9edfcca7cd25 166 c=0;
lolpcc 0:9edfcca7cd25 167 i2c.write(SEVEN_SEG,(char *)buf,7);
lolpcc 0:9edfcca7cd25 168 while(c!=loop){
lolpcc 0:9edfcca7cd25 169 a = 1;
lolpcc 0:9edfcca7cd25 170 b = 0;
lolpcc 0:9edfcca7cd25 171 while(b!=8){
lolpcc 0:9edfcca7cd25 172 buf[2]=a<<b;
lolpcc 0:9edfcca7cd25 173 buf[3]=a<<b;
lolpcc 0:9edfcca7cd25 174 buf[4]=a<<b;
lolpcc 0:9edfcca7cd25 175 buf[5]=a<<b;
lolpcc 0:9edfcca7cd25 176 i2c.write(SEVEN_SEG,(char *)buf,7);
lolpcc 0:9edfcca7cd25 177 wait(0.5);
lolpcc 0:9edfcca7cd25 178 b++;
lolpcc 0:9edfcca7cd25 179 }
lolpcc 0:9edfcca7cd25 180 c++;
lolpcc 0:9edfcca7cd25 181 }
lolpcc 0:9edfcca7cd25 182 }
lolpcc 0:9edfcca7cd25 183
lolpcc 0:9edfcca7cd25 184 void print_seven_seg(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
lolpcc 0:9edfcca7cd25 185 {
lolpcc 0:9edfcca7cd25 186 unsigned char buf[10];
lolpcc 0:9edfcca7cd25 187
lolpcc 0:9edfcca7cd25 188 buf[0]=0;
lolpcc 0:9edfcca7cd25 189 buf[1]=0x27;
lolpcc 0:9edfcca7cd25 190 buf[2]=a;
lolpcc 0:9edfcca7cd25 191 buf[3]=b;
lolpcc 0:9edfcca7cd25 192 buf[4]=d; /* Digits 3 and 4 are the wrong way round */
lolpcc 0:9edfcca7cd25 193 buf[5]=c;
lolpcc 0:9edfcca7cd25 194 i2c.write(SEVEN_SEG,(char *)buf,7);
lolpcc 0:9edfcca7cd25 195 }
lolpcc 0:9edfcca7cd25 196
lolpcc 0:9edfcca7cd25 197 void sseg_ticker_test(int t)
lolpcc 0:9edfcca7cd25 198 {
lolpcc 0:9edfcca7cd25 199 char a,b,c,d;
lolpcc 0:9edfcca7cd25 200 int z;
lolpcc 0:9edfcca7cd25 201
lolpcc 0:9edfcca7cd25 202 a = sseg_map[t/1000];
lolpcc 0:9edfcca7cd25 203 z = t%1000;
lolpcc 0:9edfcca7cd25 204 b = sseg_map[z/100];
lolpcc 0:9edfcca7cd25 205 z = z%100;
lolpcc 0:9edfcca7cd25 206 c = sseg_map[z/10];
lolpcc 0:9edfcca7cd25 207 z = z%10;
lolpcc 0:9edfcca7cd25 208 d = sseg_map[z];
lolpcc 0:9edfcca7cd25 209 print_seven_seg(a,b,c,d);
lolpcc 0:9edfcca7cd25 210 }