Liam Faruq
/
MAX7456_2
MAX7456.cpp@2:46adf929a2ba, 2010-08-23 (annotated)
- Committer:
- faruq
- Date:
- Mon Aug 23 14:36:14 2010 +0000
- Revision:
- 2:46adf929a2ba
- Parent:
- 1:ba08ad32bb88
- Child:
- 3:599209bd1270
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 | 0:869f2c6f960d | 41 | |
faruq | 1:ba08ad32bb88 | 42 | void MAX7456::locate(int x, int y) { |
faruq | 0:869f2c6f960d | 43 | if ( (x<30) && (y<16) ) { |
faruq | 0:869f2c6f960d | 44 | int add = y*30+x; //formula for converting coordinates into denary location |
faruq | 0:869f2c6f960d | 45 | _write(DMAL,add); |
faruq | 0:869f2c6f960d | 46 | _write(DMAH,add>>8); // what does the ">>" mean? |
faruq | 0:869f2c6f960d | 47 | } |
faruq | 0:869f2c6f960d | 48 | } |
faruq | 0:869f2c6f960d | 49 | |
faruq | 2:46adf929a2ba | 50 | /* |
faruq | 2:46adf929a2ba | 51 | void MAX7456::show(){ |
faruq | 2:46adf929a2ba | 52 | _write(DMAL,0x1e); // location (0,1) |
faruq | 2:46adf929a2ba | 53 | _write(DMDI,0x21); // writing the charater address "W" into DMDI |
faruq | 0:869f2c6f960d | 54 | |
faruq | 2:46adf929a2ba | 55 | _write(DMAL,0x1f); // location (0,1) |
faruq | 2:46adf929a2ba | 56 | _write(DMDI,0x19); // writing the charater address "O" into DMDI |
faruq | 2:46adf929a2ba | 57 | |
faruq | 2:46adf929a2ba | 58 | _write(DMAL,0x20); // location (0,1) |
faruq | 2:46adf929a2ba | 59 | _write(DMDI,0x1C); // writing the charater address "R" into DMDI |
faruq | 2:46adf929a2ba | 60 | |
faruq | 2:46adf929a2ba | 61 | _write(DMAL,0x21); // location (0,1) |
faruq | 2:46adf929a2ba | 62 | _write(DMDI,0x16); // writing the charater address "L" into DMDI |
faruq | 2:46adf929a2ba | 63 | |
faruq | 2:46adf929a2ba | 64 | _write(DMAL,0x22); // location (0,1) |
faruq | 2:46adf929a2ba | 65 | _write(DMDI,0x0E); // writing the charater address "D" into DMDI 0x0E |
faruq | 2:46adf929a2ba | 66 | } |
faruq | 2:46adf929a2ba | 67 | */ |
faruq | 0:869f2c6f960d | 68 | |
faruq | 0:869f2c6f960d | 69 | int MAX7456::_getc() { |
faruq | 1:ba08ad32bb88 | 70 | |
faruq | 0:869f2c6f960d | 71 | return(0); |
faruq | 0:869f2c6f960d | 72 | } |
faruq | 0:869f2c6f960d | 73 | |
faruq | 1:ba08ad32bb88 | 74 | void MAX7456::test(){ |
faruq | 1:ba08ad32bb88 | 75 | for (int i = 0 ; i < 255 ; i++) { |
faruq | 1:ba08ad32bb88 | 76 | printf("Writing 0x%x to VM1\n",i); |
faruq | 1:ba08ad32bb88 | 77 | _write(VM1,i); |
faruq | 1:ba08ad32bb88 | 78 | wait (0.01); |
faruq | 1:ba08ad32bb88 | 79 | int a = _read(VM1); |
faruq | 1:ba08ad32bb88 | 80 | printf("Read 0x%x from VM1\n",a); |
faruq | 1:ba08ad32bb88 | 81 | } |
faruq | 1:ba08ad32bb88 | 82 | int b = _read(VM1); |
faruq | 1:ba08ad32bb88 | 83 | printf("Read 0x%x from VM1\n",b); |
faruq | 1:ba08ad32bb88 | 84 | } |
faruq | 0:869f2c6f960d | 85 | |
faruq | 0:869f2c6f960d | 86 | int MAX7456::_putc(int c) { |
faruq | 0:869f2c6f960d | 87 | |
faruq | 0:869f2c6f960d | 88 | if ((c >= 0x31)&&(c <= 0x39)) { //characters from 1-9 |
faruq | 0:869f2c6f960d | 89 | c= c-0x30; |
faruq | 2:46adf929a2ba | 90 | } |
faruq | 2:46adf929a2ba | 91 | else if ((c >= 0x41)&&(c <= 0x5A)) { // characters from A-Z |
faruq | 0:869f2c6f960d | 92 | c= c-0x36; |
faruq | 2:46adf929a2ba | 93 | } |
faruq | 2:46adf929a2ba | 94 | else if ((c >= 0x61)&&(c <= 0x7A)) { // characters from a-z |
faruq | 0:869f2c6f960d | 95 | c= c-0x3C; |
faruq | 2:46adf929a2ba | 96 | } |
faruq | 2:46adf929a2ba | 97 | else if ((c == 0x28)&&(c == 0x29)) { //brackets () |
faruq | 0:869f2c6f960d | 98 | c= c + 0x17; |
faruq | 0:869f2c6f960d | 99 | } |
faruq | 0:869f2c6f960d | 100 | |
faruq | 0:869f2c6f960d | 101 | _write(DMDI,c); |
faruq | 0:869f2c6f960d | 102 | |
faruq | 0:869f2c6f960d | 103 | return(c); |
faruq | 0:869f2c6f960d | 104 | } |
faruq | 0:869f2c6f960d | 105 | |
faruq | 1:ba08ad32bb88 | 106 | void MAX7456::setdarkness() { |
faruq | 0:869f2c6f960d | 107 | _write(VM1,0xC7); |
faruq | 1:ba08ad32bb88 | 108 | } |
faruq | 0:869f2c6f960d | 109 | |
faruq | 1:ba08ad32bb88 | 110 | void MAX7456::initaddress() { |
faruq | 1:ba08ad32bb88 | 111 | int d = _read(DMAH); |
faruq | 1:ba08ad32bb88 | 112 | d= d&0xFC; |
faruq | 1:ba08ad32bb88 | 113 | _write(DMAH,d); // setting DMAH[1]=0 |
faruq | 1:ba08ad32bb88 | 114 | // to module to read/write character address byte |
faruq | 1:ba08ad32bb88 | 115 | } |
faruq | 0:869f2c6f960d | 116 | |
faruq | 0:869f2c6f960d | 117 | |
faruq | 0:869f2c6f960d | 118 | |
faruq | 0:869f2c6f960d | 119 | |
faruq | 0:869f2c6f960d | 120 | void MAX7456::vtrim(int v) { |
faruq | 0:869f2c6f960d | 121 | } |
faruq | 0:869f2c6f960d | 122 | |
faruq | 0:869f2c6f960d | 123 | void MAX7456::htrim(int h) { |
faruq | 0:869f2c6f960d | 124 | } |
faruq | 0:869f2c6f960d | 125 | |
faruq | 0:869f2c6f960d | 126 | |
faruq | 1:ba08ad32bb88 | 127 | |
faruq | 0:869f2c6f960d | 128 | void MAX7456::format (char mode) { |
faruq | 0:869f2c6f960d | 129 | |
faruq | 0:869f2c6f960d | 130 | if (mode == 'P') { |
faruq | 0:869f2c6f960d | 131 | _write(VM0,0x78); // PAL |
faruq | 0:869f2c6f960d | 132 | } else if (mode == 'N') { |
faruq | 0:869f2c6f960d | 133 | _write(VM0,0x78); // NTSC |
faruq | 0:869f2c6f960d | 134 | } |
faruq | 1:ba08ad32bb88 | 135 | |
faruq | 0:869f2c6f960d | 136 | } |
faruq | 0:869f2c6f960d | 137 | |
faruq | 0:869f2c6f960d | 138 | int MAX7456::_read(int address) { |
faruq | 0:869f2c6f960d | 139 | // force bit 7 to 1 for a read |
faruq | 0:869f2c6f960d | 140 | address |= 0x80; |
faruq | 0:869f2c6f960d | 141 | _ncs=0; // select device |
faruq | 0:869f2c6f960d | 142 | _spi.write(address); // send address |
faruq | 0:869f2c6f960d | 143 | int value = _spi.write(0x00); // send dummy |
faruq | 0:869f2c6f960d | 144 | _ncs=1; //deselect device |
faruq | 0:869f2c6f960d | 145 | return (value); |
faruq | 0:869f2c6f960d | 146 | } |
faruq | 0:869f2c6f960d | 147 | |
faruq | 0:869f2c6f960d | 148 | void MAX7456::_write(int address, int data) { |
faruq | 0:869f2c6f960d | 149 | // force bit 7 to 0 for a write |
faruq | 0:869f2c6f960d | 150 | address &= 0x7f; |
faruq | 0:869f2c6f960d | 151 | // select the device |
faruq | 0:869f2c6f960d | 152 | _ncs = 0; |
faruq | 0:869f2c6f960d | 153 | // write VM1 |
faruq | 0:869f2c6f960d | 154 | _spi.write(address); // send address |
faruq | 0:869f2c6f960d | 155 | _spi.write(data); // send some data |
faruq | 0:869f2c6f960d | 156 | // Deselect the device |
faruq | 0:869f2c6f960d | 157 | _ncs = 1; |
faruq | 0:869f2c6f960d | 158 | } |
faruq | 0:869f2c6f960d | 159 | |
faruq | 0:869f2c6f960d | 160 | } |