Dependencies:   mbed

Committer:
faruq
Date:
Thu Aug 26 11:42:28 2010 +0000
Revision:
3:599209bd1270
Parent:
2:46adf929a2ba
Child:
4:804abcb28b86

        

Who changed what in which revision?

UserRevisionLine numberNew 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 3:599209bd1270 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 }