VFD command test program

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002 
00003 mbed VFD Control for GP1059A01
00004 
00005 ===============
00006 Status LED
00007 -----------
00008 LED1: 
00009 LED2: 
00010 LED3: 
00011 LED4: 
00012 
00013 ===============
00014 GP1059A01 INTERFACE CONNECTION
00015 ---------------
00016 1  D0   2  D1
00017 3  D2   4  D3
00018 5  D4   6  D5
00019 7  D6   8  D7
00020 9  GND  10 INT
00021 11 WR   12 RD
00022 13 CS   14 C/D
00023 15 5V   16 5V
00024 17 5V   18 GND
00025 19 GND  20 ebb(+70V)
00026 
00027 
00028 
00029 =====================
00030 mbed CONNECTION
00031 ---------------------
00032 mbed   GP1059A01(I/O)
00033 ---------------------
00034 p5     1 (D0)  I/O
00035 p6     2 (D1)  I/O
00036 p7     3 (D2)  I/O
00037 p8     4 (D3)  I/O
00038 p9     5 (D4)  I/O
00039 p10    6 (D5)  I/O
00040 p11    7 (D6)  I/O
00041 p12    8 (D7)  I/O
00042 p13    10 (INT) O
00043 p14    11 (WR)  I
00044 p15    12 (RD)  I
00045 p16    13 (CS)  I
00046 p17    14 (C/D) I
00047 GND    9,18,19 (GND)
00048 =====================
00049 
00050 */
00051 
00052 #include "mbed.h"
00053 
00054 Serial pc(USBTX, USBRX);
00055 LocalFileSystem local("local");
00056 
00057 // VFD DATA PORT
00058 BusOut DATA(p5, p6, p7, p8, p9, p10, p11, p12);
00059 //               __
00060 // Write Signal (WR)
00061 DigitalOut WR(p14);
00062 //              __
00063 // Read Signal (RD)
00064 DigitalOut RD(p15);
00065 //                     __
00066 // Chip Select Signal (CS)
00067 DigitalOut CS(p16);
00068 //                                 _
00069 // Command / Data Select Signal (C/D)
00070 DigitalOut CD(p17);
00071 //
00072 // Frame Signal
00073 DigitalIn INT(p13);
00074 
00075 // LED Status
00076 DigitalOut led1(LED1);
00077 DigitalOut led2(LED2);
00078 DigitalOut led3(LED3);
00079 DigitalOut led4(LED4);
00080 
00081 
00082 const uint8_t HIGH = 1;
00083 const uint8_t LOW = 0;
00084 const uint16_t MAX_ADDRESS = 0x01fff;
00085 
00086 FILE *fp;
00087 char in_filename[] = "/local/rom1.bin";
00088 
00089 void send_cmd(uint8_t cmd)
00090 {
00091     CD = HIGH;    // C/D SET HIGH      
00092     DATA = cmd;   // COMMAND SET
00093     CS = LOW;     // CS SET LOW
00094     WR = LOW;     // WR SET LOW
00095     wait_us(2);   // wait 2us
00096     WR = HIGH;    // WR SET HIGH
00097     CS = HIGH;    // CS SET HIGH
00098     wait_us(4);   // wait 4us
00099 
00100     return;
00101 }
00102 
00103 void send_data(uint8_t data)
00104 {
00105     CD = LOW;      // C/D SET HIGH
00106     DATA = data;   // DATA SET
00107     CS = LOW;      // CS SET LOW
00108     WR = LOW;      // WR SET LOW
00109     wait_us(2);    // wait 2us
00110     WR = HIGH;     // WR SET HIGH
00111     CS = HIGH;     // CS SET HIGH
00112     wait_us(4);    // wait 4us
00113     
00114     return;
00115 }
00116 
00117 // Luminance Adjustment (06H)
00118 void luminance_adjustment(uint8_t data)
00119 {
00120     send_cmd(6);
00121     send_data(data);
00122 
00123     return;
00124 }    
00125 
00126 // 04H,05H,02H: Setting address of Write
00127 void set_write_read_address(uint16_t address){
00128     send_cmd(4);    // 04H: Setting lower address of Write-Read
00129     send_data((uint8_t)(address & 0x0ff));    // mask upper address 
00130     
00131     send_cmd(5);    // 05H: Setting upper address of Write-Read
00132     send_data((uint8_t)(address >> 8));       // 8bit shift
00133 
00134     send_cmd(2);    // 02H: Data Write
00135     
00136     return;
00137 }
00138 
00139 // 07H,08H: Setting address display started
00140 void set_disp_start_address(uint16_t address){
00141     send_cmd(7);    // 07H: Setting lower address display started
00142     send_data((uint8_t)(address & 0x0ff));
00143     
00144     send_cmd(8);    // 08H: Setting upper address display started
00145     send_data((uint8_t)(address >> 8));
00146     
00147     return;
00148 }
00149 
00150 // TEST PATTERN
00151 void test_pattern(){
00152     led1 = 1;
00153     set_disp_start_address(0);  // Display address: 000000H
00154     led1 = 0;
00155     
00156     led2 = 1;
00157     luminance_adjustment(0x0f);    // 100%
00158     led2 = 0;
00159     
00160     for (uint16_t d = 0; d < 256 ; d++){
00161         led3 = 1;
00162         set_write_read_address(0);  // Start address: 000000H
00163         led3 = 0;
00164     
00165         for (uint16_t i = 0; i < MAX_ADDRESS; i++){
00166             led4 = 1;
00167             send_data(d);
00168             led4 = 0;
00169         }
00170     }
00171     
00172     return;        
00173 }
00174 
00175 void test_datafile(){
00176     if ( NULL == (fp = fopen( in_filename, "r" )) ) {
00177         pc.printf("File open error.\n");
00178         led1 = HIGH;
00179         return;
00180     }
00181 
00182     led1 = 1;
00183     set_disp_start_address(0);  // Display address: 000000H
00184     led1 = 0;
00185     
00186     led2 = 1;
00187     luminance_adjustment(0x0f); // 100%
00188     led2 = 0;
00189     
00190     led3 = 1;
00191     set_write_read_address(0);  // Start address: 000000H
00192     led3 = 0;
00193     
00194     char d[8];  // 1char 8byte buffer
00195     int char_cnt = 0;
00196     
00197     // 8byte = 1CHAR
00198     while(fgets(d, 8, fp) != NULL && char_cnt < 10) {
00199         for (int byte_num = 0; byte_num < 8 ; byte_num++){ // byte
00200             pc.printf("d[%d]:%02x ",byte_num,d[byte_num]);
00201             uint8_t a = 0;
00202             for (int bit_num = 7; bit_num >= 0; bit_num--){ // bit
00203                 if ((d[byte_num] & 0x80) != 0) {
00204                     a = a + (2 ^ bit_num);
00205                 }
00206                 d[byte_num] = d[byte_num] << 1;
00207                 pc.printf("a:%02x d:%02x ",a,d[byte_num]);
00208             }
00209             if ((d[byte_num] & 0x80) != 0) a++;
00210             
00211             led4 = 1;
00212             pc.printf("A:%02x ",a);
00213             send_data(a);
00214             led4 = 0;
00215 
00216             for (int e = 0; e < 7 ; e++) send_data(0);
00217         }
00218         char_cnt++;
00219     }
00220     fclose(fp);
00221 
00222     return;        
00223 }
00224 
00225 void blink_LED() {
00226     for (int i = 0 ; i < 5 ; i++) {
00227         led4 = 1;
00228         wait(0.2);
00229         led4 = 0;
00230         wait(0.2);
00231     }
00232     return;
00233 }
00234 
00235 int main() {
00236 
00237     led1 = LOW;
00238     led2 = LOW;
00239     led3 = LOW;
00240     led4 = LOW;
00241     
00242     CS = HIGH;
00243     WR = HIGH;
00244     RD = HIGH;
00245     CD = HIGH;
00246     
00247     // Start Sign
00248     blink_LED();
00249     
00250     // TEST
00251     //test_pattern();
00252     
00253     test_datafile();
00254     
00255     // END Sign
00256     blink_LED();    
00257 }