Liam Faruq
/
MAX7456_2
MAX7456.cpp@4:804abcb28b86, 2010-08-26 (annotated)
- Committer:
- faruq
- Date:
- Thu Aug 26 17:04:27 2010 +0000
- Revision:
- 4:804abcb28b86
- Parent:
- 3:599209bd1270
- Child:
- 5:3f3006b4b29b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
faruq | 0:869f2c6f960d | 1 | #include "mbed.h" |
faruq | 0:869f2c6f960d | 2 | #include "MAX7456.h" |
faruq | 0:869f2c6f960d | 3 | |
faruq | 0:869f2c6f960d | 4 | namespace mbed { |
faruq | 0:869f2c6f960d | 5 | |
faruq | 0:869f2c6f960d | 6 | |
faruq | 0:869f2c6f960d | 7 | |
faruq | 0:869f2c6f960d | 8 | MAX7456::MAX7456(PinName mosi, PinName miso, PinName clk, PinName ncs, PinName nrst, const char* name) |
faruq | 0:869f2c6f960d | 9 | : Stream(name), _spi(mosi, miso, clk), _ncs(ncs),_nrst(nrst) { |
faruq | 0:869f2c6f960d | 10 | |
faruq | 0:869f2c6f960d | 11 | // initialisation code here |
faruq | 0:869f2c6f960d | 12 | |
faruq | 0:869f2c6f960d | 13 | _nrst = 0; |
faruq | 0:869f2c6f960d | 14 | wait (0.5); |
faruq | 0:869f2c6f960d | 15 | _nrst = 1; |
faruq | 0:869f2c6f960d | 16 | wait (0.5); |
faruq | 0:869f2c6f960d | 17 | |
faruq | 0:869f2c6f960d | 18 | // Setup the spi for 8 bit data, high steady state clock, |
faruq | 0:869f2c6f960d | 19 | // second edge capture |
faruq | 0:869f2c6f960d | 20 | _spi.format(8,0); |
faruq | 0:869f2c6f960d | 21 | |
faruq | 0:869f2c6f960d | 22 | // 1MHz clock |
faruq | 0:869f2c6f960d | 23 | _spi.frequency(1000000); |
faruq | 0:869f2c6f960d | 24 | } |
faruq | 0:869f2c6f960d | 25 | |
faruq | 0:869f2c6f960d | 26 | |
faruq | 0:869f2c6f960d | 27 | void MAX7456::cls() { |
faruq | 0:869f2c6f960d | 28 | int tmp=0; |
faruq | 0:869f2c6f960d | 29 | tmp = _read(DMM); |
faruq | 0:869f2c6f960d | 30 | tmp &= 0xFB; |
faruq | 0:869f2c6f960d | 31 | _write(DMM,tmp); //Make sure that DMM[2]=0 so that there can be write operations |
faruq | 0:869f2c6f960d | 32 | |
faruq | 0:869f2c6f960d | 33 | tmp = _read(DMM); |
faruq | 0:869f2c6f960d | 34 | tmp |= 0x04; |
faruq | 0:869f2c6f960d | 35 | _write (DMM,tmp); //set DMM[2]=1 to clear all locations |
faruq | 0:869f2c6f960d | 36 | |
faruq | 0:869f2c6f960d | 37 | // should wait until DMM[2] goes back to zero, so we know the reset it finished |
faruq | 0:869f2c6f960d | 38 | |
faruq | 0:869f2c6f960d | 39 | } |
faruq | 0:869f2c6f960d | 40 | |
faruq | 2:46adf929a2ba | 41 | /* |
faruq | 2:46adf929a2ba | 42 | void MAX7456::show(){ |
faruq | 2:46adf929a2ba | 43 | _write(DMAL,0x1e); // location (0,1) |
faruq | 2:46adf929a2ba | 44 | _write(DMDI,0x21); // writing the charater address "W" into DMDI |
faruq | 0:869f2c6f960d | 45 | |
faruq | 2:46adf929a2ba | 46 | _write(DMAL,0x1f); // location (0,1) |
faruq | 2:46adf929a2ba | 47 | _write(DMDI,0x19); // writing the charater address "O" into DMDI |
faruq | 2:46adf929a2ba | 48 | |
faruq | 2:46adf929a2ba | 49 | _write(DMAL,0x20); // location (0,1) |
faruq | 2:46adf929a2ba | 50 | _write(DMDI,0x1C); // writing the charater address "R" into DMDI |
faruq | 2:46adf929a2ba | 51 | |
faruq | 2:46adf929a2ba | 52 | _write(DMAL,0x21); // location (0,1) |
faruq | 2:46adf929a2ba | 53 | _write(DMDI,0x16); // writing the charater address "L" into DMDI |
faruq | 2:46adf929a2ba | 54 | |
faruq | 2:46adf929a2ba | 55 | _write(DMAL,0x22); // location (0,1) |
faruq | 2:46adf929a2ba | 56 | _write(DMDI,0x0E); // writing the charater address "D" into DMDI 0x0E |
faruq | 2:46adf929a2ba | 57 | } |
faruq | 2:46adf929a2ba | 58 | */ |
faruq | 0:869f2c6f960d | 59 | |
faruq | 0:869f2c6f960d | 60 | int MAX7456::_getc() { |
faruq | 3:599209bd1270 | 61 | wait(5.0); |
faruq | 3:599209bd1270 | 62 | printf("getc function has now been called"); |
faruq | 3:599209bd1270 | 63 | return(0); |
faruq | 0:869f2c6f960d | 64 | } |
faruq | 1:ba08ad32bb88 | 65 | void MAX7456::test(){ |
faruq | 1:ba08ad32bb88 | 66 | for (int i = 0 ; i < 255 ; i++) { |
faruq | 1:ba08ad32bb88 | 67 | printf("Writing 0x%x to VM1\n",i); |
faruq | 1:ba08ad32bb88 | 68 | _write(VM1,i); |
faruq | 1:ba08ad32bb88 | 69 | wait (0.01); |
faruq | 1:ba08ad32bb88 | 70 | int a = _read(VM1); |
faruq | 1:ba08ad32bb88 | 71 | printf("Read 0x%x from VM1\n",a); |
faruq | 1:ba08ad32bb88 | 72 | } |
faruq | 1:ba08ad32bb88 | 73 | int b = _read(VM1); |
faruq | 1:ba08ad32bb88 | 74 | printf("Read 0x%x from VM1\n",b); |
faruq | 1:ba08ad32bb88 | 75 | } |
faruq | 0:869f2c6f960d | 76 | |
faruq | 3:599209bd1270 | 77 | void MAX7456::locate(int x, int y) { |
faruq | 3:599209bd1270 | 78 | if ( (x<30) && (y<16) ) { |
faruq | 3:599209bd1270 | 79 | int add = y*30+x; //formula for converting coordinates into denary location |
faruq | 3:599209bd1270 | 80 | _write(DMAL,add); |
faruq | 3:599209bd1270 | 81 | _write(DMAH,add>>8); // what does the ">>" mean? |
faruq | 3:599209bd1270 | 82 | } |
faruq | 3:599209bd1270 | 83 | printf("location %d",x); |
faruq | 3:599209bd1270 | 84 | } |
faruq | 3:599209bd1270 | 85 | |
faruq | 3:599209bd1270 | 86 | |
faruq | 3:599209bd1270 | 87 | void MAX7456::xyincrement(){ // increment starts here |
faruq | 3:599209bd1270 | 88 | int x=0; |
faruq | 3:599209bd1270 | 89 | int y=0; |
faruq | 3:599209bd1270 | 90 | while (x<31&&y<=16){ |
faruq | 3:599209bd1270 | 91 | x=x+1; |
faruq | 3:599209bd1270 | 92 | if (x>30){ |
faruq | 3:599209bd1270 | 93 | y=y+1; |
faruq | 3:599209bd1270 | 94 | x=0; |
faruq | 3:599209bd1270 | 95 | } |
faruq | 3:599209bd1270 | 96 | locate(x,y); |
faruq | 3:599209bd1270 | 97 | } |
faruq | 3:599209bd1270 | 98 | } |
faruq | 3:599209bd1270 | 99 | |
faruq | 3:599209bd1270 | 100 | |
faruq | 3:599209bd1270 | 101 | |
faruq | 0:869f2c6f960d | 102 | int MAX7456::_putc(int c) { |
faruq | 0:869f2c6f960d | 103 | if ((c >= 0x31)&&(c <= 0x39)) { //characters from 1-9 |
faruq | 0:869f2c6f960d | 104 | c= c-0x30; |
faruq | 2:46adf929a2ba | 105 | } |
faruq | 2:46adf929a2ba | 106 | else if ((c >= 0x41)&&(c <= 0x5A)) { // characters from A-Z |
faruq | 0:869f2c6f960d | 107 | c= c-0x36; |
faruq | 2:46adf929a2ba | 108 | } |
faruq | 2:46adf929a2ba | 109 | else if ((c >= 0x61)&&(c <= 0x7A)) { // characters from a-z |
faruq | 0:869f2c6f960d | 110 | c= c-0x3C; |
faruq | 2:46adf929a2ba | 111 | } |
faruq | 2:46adf929a2ba | 112 | else if ((c == 0x28)&&(c == 0x29)) { //brackets () |
faruq | 0:869f2c6f960d | 113 | c= c + 0x17; |
faruq | 0:869f2c6f960d | 114 | } |
faruq | 0:869f2c6f960d | 115 | |
faruq | 0:869f2c6f960d | 116 | _write(DMDI,c); |
faruq | 4:804abcb28b86 | 117 | //xyincrement(); |
faruq | 3:599209bd1270 | 118 | |
faruq | 3:599209bd1270 | 119 | /* |
faruq | 3:599209bd1270 | 120 | int data= _read(DMDI); |
faruq | 3:599209bd1270 | 121 | printf("DMDI shows 0x%x",data); |
faruq | 0:869f2c6f960d | 122 | return(c); |
faruq | 3:599209bd1270 | 123 | */ |
faruq | 0:869f2c6f960d | 124 | } |
faruq | 0:869f2c6f960d | 125 | |
faruq | 1:ba08ad32bb88 | 126 | void MAX7456::setdarkness() { |
faruq | 0:869f2c6f960d | 127 | _write(VM1,0xC7); |
faruq | 1:ba08ad32bb88 | 128 | } |
faruq | 0:869f2c6f960d | 129 | |
faruq | 1:ba08ad32bb88 | 130 | void MAX7456::initaddress() { |
faruq | 1:ba08ad32bb88 | 131 | int d = _read(DMAH); |
faruq | 1:ba08ad32bb88 | 132 | d= d&0xFC; |
faruq | 1:ba08ad32bb88 | 133 | _write(DMAH,d); // setting DMAH[1]=0 |
faruq | 1:ba08ad32bb88 | 134 | // to module to read/write character address byte |
faruq | 1:ba08ad32bb88 | 135 | } |
faruq | 0:869f2c6f960d | 136 | |
faruq | 0:869f2c6f960d | 137 | |
faruq | 0:869f2c6f960d | 138 | |
faruq | 3:599209bd1270 | 139 | // write(HOS,0x2F); |
faruq | 3:599209bd1270 | 140 | // write(VOS,0x17); |
faruq | 3:599209bd1270 | 141 | void MAX7456::vtrim(char way, int v) { |
faruq | 3:599209bd1270 | 142 | if (way=='+'){ |
faruq | 3:599209bd1270 | 143 | v=~v; |
faruq | 3:599209bd1270 | 144 | _write(VOS,v); |
faruq | 3:599209bd1270 | 145 | } |
faruq | 3:599209bd1270 | 146 | else{ |
faruq | 3:599209bd1270 | 147 | v|=0x10; |
faruq | 3:599209bd1270 | 148 | _write(VOS,v); |
faruq | 3:599209bd1270 | 149 | } |
faruq | 0:869f2c6f960d | 150 | } |
faruq | 0:869f2c6f960d | 151 | |
faruq | 3:599209bd1270 | 152 | void MAX7456::htrim(char way, int h) { |
faruq | 3:599209bd1270 | 153 | if (way=='-'){ |
faruq | 3:599209bd1270 | 154 | h=~h; |
faruq | 3:599209bd1270 | 155 | _write(HOS,h); |
faruq | 3:599209bd1270 | 156 | } |
faruq | 3:599209bd1270 | 157 | else{ |
faruq | 3:599209bd1270 | 158 | h|=0x20; |
faruq | 3:599209bd1270 | 159 | _write(HOS,h); |
faruq | 3:599209bd1270 | 160 | } |
faruq | 0:869f2c6f960d | 161 | } |
faruq | 0:869f2c6f960d | 162 | |
faruq | 0:869f2c6f960d | 163 | |
faruq | 1:ba08ad32bb88 | 164 | |
faruq | 0:869f2c6f960d | 165 | void MAX7456::format (char mode) { |
faruq | 0:869f2c6f960d | 166 | |
faruq | 0:869f2c6f960d | 167 | if (mode == 'P') { |
faruq | 0:869f2c6f960d | 168 | _write(VM0,0x78); // PAL |
faruq | 0:869f2c6f960d | 169 | } else if (mode == 'N') { |
faruq | 0:869f2c6f960d | 170 | _write(VM0,0x78); // NTSC |
faruq | 0:869f2c6f960d | 171 | } |
faruq | 1:ba08ad32bb88 | 172 | |
faruq | 0:869f2c6f960d | 173 | } |
faruq | 0:869f2c6f960d | 174 | |
faruq | 0:869f2c6f960d | 175 | int MAX7456::_read(int address) { |
faruq | 0:869f2c6f960d | 176 | // force bit 7 to 1 for a read |
faruq | 0:869f2c6f960d | 177 | address |= 0x80; |
faruq | 0:869f2c6f960d | 178 | _ncs=0; // select device |
faruq | 0:869f2c6f960d | 179 | _spi.write(address); // send address |
faruq | 0:869f2c6f960d | 180 | int value = _spi.write(0x00); // send dummy |
faruq | 0:869f2c6f960d | 181 | _ncs=1; //deselect device |
faruq | 0:869f2c6f960d | 182 | return (value); |
faruq | 0:869f2c6f960d | 183 | } |
faruq | 0:869f2c6f960d | 184 | |
faruq | 0:869f2c6f960d | 185 | void MAX7456::_write(int address, int data) { |
faruq | 0:869f2c6f960d | 186 | // force bit 7 to 0 for a write |
faruq | 0:869f2c6f960d | 187 | address &= 0x7f; |
faruq | 0:869f2c6f960d | 188 | // select the device |
faruq | 0:869f2c6f960d | 189 | _ncs = 0; |
faruq | 0:869f2c6f960d | 190 | // write VM1 |
faruq | 0:869f2c6f960d | 191 | _spi.write(address); // send address |
faruq | 0:869f2c6f960d | 192 | _spi.write(data); // send some data |
faruq | 0:869f2c6f960d | 193 | // Deselect the device |
faruq | 0:869f2c6f960d | 194 | _ncs = 1; |
faruq | 0:869f2c6f960d | 195 | } |
faruq | 0:869f2c6f960d | 196 | |
faruq | 0:869f2c6f960d | 197 | } |