Liam Faruq
/
MAX7456
printing text onto the screen
MAX7456.cpp@0:972f5da423fd, 2010-08-20 (annotated)
- Committer:
- faruq
- Date:
- Fri Aug 20 12:45:19 2010 +0000
- Revision:
- 0:972f5da423fd
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
faruq | 0:972f5da423fd | 1 | #include "mbed.h" |
faruq | 0:972f5da423fd | 2 | #include "MAX7456.h" |
faruq | 0:972f5da423fd | 3 | |
faruq | 0:972f5da423fd | 4 | namespace mbed { |
faruq | 0:972f5da423fd | 5 | |
faruq | 0:972f5da423fd | 6 | |
faruq | 0:972f5da423fd | 7 | |
faruq | 0:972f5da423fd | 8 | MAX7456::MAX7456(PinName mosi, PinName miso, PinName clk, PinName ncs, PinName nrst, const char* name) |
faruq | 0:972f5da423fd | 9 | : Stream(name), _spi(mosi, miso, clk), _ncs(ncs), _nrst(nrst) { |
faruq | 0:972f5da423fd | 10 | |
faruq | 0:972f5da423fd | 11 | // initialisation code here |
faruq | 0:972f5da423fd | 12 | |
faruq | 0:972f5da423fd | 13 | _nrst = 0; |
faruq | 0:972f5da423fd | 14 | wait (0.5); |
faruq | 0:972f5da423fd | 15 | _nrst = 1; |
faruq | 0:972f5da423fd | 16 | wait (0.5); |
faruq | 0:972f5da423fd | 17 | |
faruq | 0:972f5da423fd | 18 | // Setup the spi for 8 bit data, high steady state clock, |
faruq | 0:972f5da423fd | 19 | // second edge capture |
faruq | 0:972f5da423fd | 20 | _spi.format(8,0); |
faruq | 0:972f5da423fd | 21 | |
faruq | 0:972f5da423fd | 22 | // 1MHz clock |
faruq | 0:972f5da423fd | 23 | _spi.frequency(1000000); |
faruq | 0:972f5da423fd | 24 | |
faruq | 0:972f5da423fd | 25 | |
faruq | 0:972f5da423fd | 26 | } |
faruq | 0:972f5da423fd | 27 | |
faruq | 0:972f5da423fd | 28 | |
faruq | 0:972f5da423fd | 29 | |
faruq | 0:972f5da423fd | 30 | |
faruq | 0:972f5da423fd | 31 | void MAX7456::cls() { |
faruq | 0:972f5da423fd | 32 | int tmp=0; |
faruq | 0:972f5da423fd | 33 | tmp = _read(DMM); |
faruq | 0:972f5da423fd | 34 | tmp &= 0xFB; |
faruq | 0:972f5da423fd | 35 | _write(DMM,tmp); //Make sure that DMM[2]=0 so that there can be write operations |
faruq | 0:972f5da423fd | 36 | |
faruq | 0:972f5da423fd | 37 | tmp = _read(DMM); |
faruq | 0:972f5da423fd | 38 | tmp |= 0x04; |
faruq | 0:972f5da423fd | 39 | _write (DMM,tmp); //set DMM[2]=1 to clear all locations |
faruq | 0:972f5da423fd | 40 | |
faruq | 0:972f5da423fd | 41 | // should wait until DMM[2] goes back to zero, so we know the reset it finished |
faruq | 0:972f5da423fd | 42 | |
faruq | 0:972f5da423fd | 43 | } |
faruq | 0:972f5da423fd | 44 | |
faruq | 0:972f5da423fd | 45 | |
faruq | 0:972f5da423fd | 46 | void MAX7456::locate(int x, int y) { //not sure if I understand the last line |
faruq | 0:972f5da423fd | 47 | if ( (x<30) && (y<16) ) { |
faruq | 0:972f5da423fd | 48 | int add = y*30+x; //formula for converting coordinates into denary location |
faruq | 0:972f5da423fd | 49 | _write(DMAL,add); |
faruq | 0:972f5da423fd | 50 | _write(DMAH,add>>8); // what does the ">>" mean? |
faruq | 0:972f5da423fd | 51 | } |
faruq | 0:972f5da423fd | 52 | } |
faruq | 0:972f5da423fd | 53 | |
faruq | 0:972f5da423fd | 54 | |
faruq | 0:972f5da423fd | 55 | |
faruq | 0:972f5da423fd | 56 | int MAX7456::_getc(int character) { |
faruq | 0:972f5da423fd | 57 | for (int i = 0 ; i < 479 ; i++) { |
faruq | 0:972f5da423fd | 58 | int location= _read(DMDI,i) |
faruq | 0:972f5da423fd | 59 | |
faruq | 0:972f5da423fd | 60 | if((location == character - 0x30){ //characters from 1-9 |
faruq | 0:972f5da423fd | 61 | found= "true"; |
faruq | 0:972f5da423fd | 62 | } |
faruq | 0:972f5da423fd | 63 | else if(location == character - 0x36){ // characters from A-Z |
faruq | 0:972f5da423fd | 64 | found = "true"; |
faruq | 0:972f5da423fd | 65 | } |
faruq | 0:972f5da423fd | 66 | else if(location == character - 0x3C){ // characters from a-z |
faruq | 0:972f5da423fd | 67 | found = "true"; |
faruq | 0:972f5da423fd | 68 | } |
faruq | 0:972f5da423fd | 69 | else if(location == character + 0x17){ //brackets () |
faruq | 0:972f5da423fd | 70 | found = "true"; |
faruq | 0:972f5da423fd | 71 | } |
faruq | 0:972f5da423fd | 72 | else{ |
faruq | 0:972f5da423fd | 73 | found = "false"; |
faruq | 0:972f5da423fd | 74 | |
faruq | 0:972f5da423fd | 75 | if found = "true"{ |
faruq | 0:972f5da423fd | 76 | return(i); |
faruq | 0:972f5da423fd | 77 | } |
faruq | 0:972f5da423fd | 78 | else{ |
faruq | 0:972f5da423fd | 79 | return("character not found"); |
faruq | 0:972f5da423fd | 80 | } |
faruq | 0:972f5da423fd | 81 | } |
faruq | 0:972f5da423fd | 82 | |
faruq | 0:972f5da423fd | 83 | |
faruq | 0:972f5da423fd | 84 | int MAX7456::_putc(int c) { |
faruq | 0:972f5da423fd | 85 | |
faruq | 0:972f5da423fd | 86 | if((c >= 0x31)&&(c <= 0x39)) { //characters from 1-9 |
faruq | 0:972f5da423fd | 87 | c= c-0x30; |
faruq | 0:972f5da423fd | 88 | } |
faruq | 0:972f5da423fd | 89 | if((c >= 0x41)&&(c <= 0x5A)){ // characters from A-Z |
faruq | 0:972f5da423fd | 90 | c= c-0x36; |
faruq | 0:972f5da423fd | 91 | } |
faruq | 0:972f5da423fd | 92 | if((c >= 0x61)&&(c <= 0x7A)){ // characters from a-z |
faruq | 0:972f5da423fd | 93 | c= c-0x3C; |
faruq | 0:972f5da423fd | 94 | } |
faruq | 0:972f5da423fd | 95 | if((c == 0x28)&&(c == 0x29)){ //brackets () |
faruq | 0:972f5da423fd | 96 | c= c + 0x17; |
faruq | 0:972f5da423fd | 97 | } |
faruq | 0:972f5da423fd | 98 | _write(DMDI,c); |
faruq | 0:972f5da423fd | 99 | return(c); |
faruq | 0:972f5da423fd | 100 | } |
faruq | 0:972f5da423fd | 101 | |
faruq | 0:972f5da423fd | 102 | |
faruq | 0:972f5da423fd | 103 | |
faruq | 0:972f5da423fd | 104 | |
faruq | 0:972f5da423fd | 105 | void MAX7456::vtrim(int v) { |
faruq | 0:972f5da423fd | 106 | } |
faruq | 0:972f5da423fd | 107 | |
faruq | 0:972f5da423fd | 108 | void MAX7456::htrim(int h) { |
faruq | 0:972f5da423fd | 109 | } |
faruq | 0:972f5da423fd | 110 | |
faruq | 0:972f5da423fd | 111 | void MAX7456::format(char mode){ |
faruq | 0:972f5da423fd | 112 | if (mode == "P"){ |
faruq | 0:972f5da423fd | 113 | write(VM0,0x78); // internal sync, OSD enable, PAL |
faruq | 0:972f5da423fd | 114 | } |
faruq | 0:972f5da423fd | 115 | } |
faruq | 0:972f5da423fd | 116 | |
faruq | 0:972f5da423fd | 117 | int MAX7456::_read(int address) { |
faruq | 0:972f5da423fd | 118 | // force bit 7 to 1 for a read |
faruq | 0:972f5da423fd | 119 | address |= 0x80; |
faruq | 0:972f5da423fd | 120 | _ncs=0; // select device |
faruq | 0:972f5da423fd | 121 | _spi.write(address); // send address |
faruq | 0:972f5da423fd | 122 | int value = _spi.write(0x00); // send dummy |
faruq | 0:972f5da423fd | 123 | _ncs=1; //deselect device |
faruq | 0:972f5da423fd | 124 | return (value); |
faruq | 0:972f5da423fd | 125 | } |
faruq | 0:972f5da423fd | 126 | |
faruq | 0:972f5da423fd | 127 | void MAX7456::_write(int address, int data) { |
faruq | 0:972f5da423fd | 128 | // force bit 7 to 0 for a write |
faruq | 0:972f5da423fd | 129 | address &= 0x7f; |
faruq | 0:972f5da423fd | 130 | // select the device |
faruq | 0:972f5da423fd | 131 | _ncs = 0; |
faruq | 0:972f5da423fd | 132 | // write VM1 |
faruq | 0:972f5da423fd | 133 | _spi.write(address); // send address |
faruq | 0:972f5da423fd | 134 | _spi.write(data); // send some data |
faruq | 0:972f5da423fd | 135 | // Deselect the device |
faruq | 0:972f5da423fd | 136 | _ncs = 1; |
faruq | 0:972f5da423fd | 137 | } |