Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MAX7456.cpp
00001 #include "mbed.h" 00002 #include "MAX7456.h" 00003 00004 namespace mbed { 00005 00006 00007 00008 MAX7456::MAX7456(PinName mosi, PinName miso, PinName clk, PinName ncs, PinName nrst, const char* name) 00009 : Stream(name), _spi(mosi, miso, clk), _ncs(ncs),_nrst(nrst){ 00010 00011 // initialisation code here 00012 00013 _nrst = 0; 00014 wait (0.5); 00015 _nrst = 1; 00016 wait (0.5); 00017 00018 // Setup the spi for 8 bit data, high steady state clock, 00019 // second edge capture 00020 _spi.format(8,0); 00021 00022 // 1MHz clock 00023 _spi.frequency(1000000); 00024 } 00025 00026 00027 void MAX7456::cls() { 00028 int tmp=0; 00029 tmp = _read(DMM); 00030 tmp &= 0xFB; 00031 _write(DMM,tmp); //Make sure that DMM[2]=0 so that there can be write operations 00032 00033 tmp = _read(DMM); 00034 tmp |= 0x04; 00035 _write (DMM,tmp); //set DMM[2]=1 to clear all locations 00036 00037 // should wait until DMM[2] goes back to zero, so we know the reset it finished 00038 00039 } 00040 00041 /* 00042 void MAX7456::show(){ 00043 _write(DMAL,0x1e); // location (0,1) 00044 _write(DMDI,0x21); // writing the charater address "W" into DMDI 00045 00046 _write(DMAL,0x1f); // location (0,1) 00047 _write(DMDI,0x19); // writing the charater address "O" into DMDI 00048 00049 _write(DMAL,0x20); // location (0,1) 00050 _write(DMDI,0x1C); // writing the charater address "R" into DMDI 00051 00052 _write(DMAL,0x21); // location (0,1) 00053 _write(DMDI,0x16); // writing the charater address "L" into DMDI 00054 00055 _write(DMAL,0x22); // location (0,1) 00056 _write(DMDI,0x0E); // writing the charater address "D" into DMDI 0x0E 00057 } 00058 */ 00059 00060 int MAX7456::_getc() { 00061 int mode= _read(DMM); 00062 mode|=0x01; 00063 _write(DMM,mode); 00064 return(0); 00065 } 00066 void MAX7456::test(){ 00067 for (int i = 0 ; i < 255 ; i++) { 00068 printf("Writing 0x%x to VM1\n",i); 00069 _write(VM1,i); 00070 wait (0.01); 00071 int a = _read(VM1); 00072 printf("Read 0x%x from VM1\n",a); 00073 } 00074 int b = _read(VM1); 00075 printf("Read 0x%x from VM1\n",b); 00076 } 00077 00078 void MAX7456::locate(int x, int y) { 00079 if ( (x<30) && (y<16) ) { 00080 int add = y*30+x; //formula for converting coordinates into denary location 00081 _write(DMAL,add); 00082 _write(DMAH,add>>8); // what does the ">>" mean? 00083 } 00084 printf("location %d",x); 00085 } 00086 00087 00088 void MAX7456::xyincrement(){ // increment starts here 00089 int x=0; 00090 int y=0; 00091 while (x<31&&y<=16){ 00092 x=x+1; 00093 if (x>30){ 00094 y=y+1; 00095 x=0; 00096 } 00097 locate(x,y); 00098 } 00099 } 00100 00101 00102 00103 int MAX7456::_putc(int c) { 00104 int set= _read(DMM); 00105 set&=0xFB; //set bit 1 to 0 so that the DMM register can be written to 00106 _write(DMM,set); 00107 00108 00109 if ((c >= 0x31)&&(c <= 0x39)) { //characters from 1-9 00110 c= c-0x30; 00111 } 00112 else if ((c >= 0x41)&&(c <= 0x5A)) { // characters from A-Z 00113 c= c-0x36; 00114 } 00115 else if ((c >= 0x61)&&(c <= 0x7A)) { // characters from a-z 00116 c= c-0x3C; 00117 } 00118 else if ((c == 0x28)&&(c == 0x29)) { //brackets () 00119 c= c + 0x17; 00120 } 00121 00122 _write(DMDI,c); 00123 00124 /* 00125 int mode= _read(DMM); 00126 mode|=0x01; // enable auto increment mode 00127 _write(DMM,mode); 00128 _HYSNC=1; 00129 */ 00130 //xyincrement(); 00131 00132 /* 00133 int data= _read(DMDI); 00134 printf("DMDI shows 0x%x",data); 00135 */ 00136 00137 return(c); 00138 00139 } 00140 00141 void MAX7456::setdarkness() { 00142 _write(VM1,0xC7); 00143 } 00144 00145 void MAX7456::invert(int bit) { 00146 int data= _read(DMM); 00147 if (bit == 1){ 00148 data|=0x08; 00149 } 00150 else if (bit == 0){ 00151 data&=0xF9; 00152 } 00153 _write(DMM,data); 00154 } 00155 00156 00157 00158 void MAX7456::initaddress() { 00159 int d = _read(DMAH); 00160 d= d&0xFC; 00161 _write(DMAH,d); // setting DMAH[1]=0 00162 // to module to read/write character address byte 00163 } 00164 00165 00166 00167 // write(HOS,0x2F); 00168 // write(VOS,0x17); 00169 void MAX7456::vtrim(char way, int v) { 00170 if (way=='+'){ 00171 v=~v; 00172 _write(VOS,v); 00173 } 00174 else{ 00175 v|=0x10; 00176 _write(VOS,v); 00177 } 00178 } 00179 00180 void MAX7456::htrim(char way, int h) { 00181 if (way=='-'){ 00182 h=~h; 00183 _write(HOS,h); 00184 } 00185 else{ 00186 h|=0x20; 00187 _write(HOS,h); 00188 } 00189 } 00190 00191 00192 00193 void MAX7456::format (char mode) { 00194 00195 if (mode == 'P') { 00196 _write(VM0,0x78); // PAL 00197 } else if (mode == 'N') { 00198 _write(VM0,0x78); // NTSC 00199 } 00200 00201 } 00202 00203 int MAX7456::_read(int address) { 00204 // force bit 7 to 1 for a read 00205 address |= 0x80; 00206 _ncs=0; // select device 00207 _spi.write(address); // send address 00208 int value = _spi.write(0x00); // send dummy 00209 _ncs=1; //deselect device 00210 return (value); 00211 } 00212 00213 void MAX7456::_write(int address, int data) { 00214 // force bit 7 to 0 for a write 00215 address &= 0x7f; 00216 // select the device 00217 _ncs = 0; 00218 // write VM1 00219 _spi.write(address); // send address 00220 _spi.write(data); // send some data 00221 // Deselect the device 00222 _ncs = 1; 00223 } 00224 00225 }
Generated on Wed Oct 5 2022 05:26:04 by
1.7.2