Kamil Ondrousek
/
ChuaVGA
Chua oscillator - uVGAII(SGC) 4DGL color version 640x480 pin p9 - rx, pin p10 - tx, pin p11 - rst
main.cpp@0:2e86b4b28ea1, 2011-09-03 (annotated)
- Committer:
- JLS
- Date:
- Sat Sep 03 13:59:44 2011 +0000
- Revision:
- 0:2e86b4b28ea1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JLS | 0:2e86b4b28ea1 | 1 | #include "mbed.h" |
JLS | 0:2e86b4b28ea1 | 2 | |
JLS | 0:2e86b4b28ea1 | 3 | Serial _cmd (p9, p10); |
JLS | 0:2e86b4b28ea1 | 4 | DigitalOut _rst (p11); |
JLS | 0:2e86b4b28ea1 | 5 | |
JLS | 0:2e86b4b28ea1 | 6 | void startVGA(); |
JLS | 0:2e86b4b28ea1 | 7 | void baudrate(); |
JLS | 0:2e86b4b28ea1 | 8 | void cls(); |
JLS | 0:2e86b4b28ea1 | 9 | void pixel(int, int, int); |
JLS | 0:2e86b4b28ea1 | 10 | int writeCOM(char *, int); |
JLS | 0:2e86b4b28ea1 | 11 | |
JLS | 0:2e86b4b28ea1 | 12 | |
JLS | 0:2e86b4b28ea1 | 13 | int main() { |
JLS | 0:2e86b4b28ea1 | 14 | |
JLS | 0:2e86b4b28ea1 | 15 | startVGA (); |
JLS | 0:2e86b4b28ea1 | 16 | |
JLS | 0:2e86b4b28ea1 | 17 | float x = 0.5; |
JLS | 0:2e86b4b28ea1 | 18 | float y = 0.25; |
JLS | 0:2e86b4b28ea1 | 19 | float z = 0.125; |
JLS | 0:2e86b4b28ea1 | 20 | float oldx = 0; |
JLS | 0:2e86b4b28ea1 | 21 | float oldy = 0; |
JLS | 0:2e86b4b28ea1 | 22 | float oldz = 0; |
JLS | 0:2e86b4b28ea1 | 23 | |
JLS | 0:2e86b4b28ea1 | 24 | float dt = 0.02; |
JLS | 0:2e86b4b28ea1 | 25 | |
JLS | 0:2e86b4b28ea1 | 26 | float alpha = 15.6; |
JLS | 0:2e86b4b28ea1 | 27 | float beta = 28.58; |
JLS | 0:2e86b4b28ea1 | 28 | float a = -1.14286; |
JLS | 0:2e86b4b28ea1 | 29 | float b = -0.714286; |
JLS | 0:2e86b4b28ea1 | 30 | float h = 0; |
JLS | 0:2e86b4b28ea1 | 31 | |
JLS | 0:2e86b4b28ea1 | 32 | int xout = 0; |
JLS | 0:2e86b4b28ea1 | 33 | int yout = 0; |
JLS | 0:2e86b4b28ea1 | 34 | int col = 0; |
JLS | 0:2e86b4b28ea1 | 35 | int cnt = 0; |
JLS | 0:2e86b4b28ea1 | 36 | |
JLS | 0:2e86b4b28ea1 | 37 | while (1) { |
JLS | 0:2e86b4b28ea1 | 38 | |
JLS | 0:2e86b4b28ea1 | 39 | oldx = x; |
JLS | 0:2e86b4b28ea1 | 40 | oldy = y; |
JLS | 0:2e86b4b28ea1 | 41 | oldz = z; |
JLS | 0:2e86b4b28ea1 | 42 | |
JLS | 0:2e86b4b28ea1 | 43 | h = (b * x) + (0.5 * (a - b) * (abs(x+1) - abs(x-1))); |
JLS | 0:2e86b4b28ea1 | 44 | |
JLS | 0:2e86b4b28ea1 | 45 | x = oldx + dt * (alpha * (oldy - oldx - h)); |
JLS | 0:2e86b4b28ea1 | 46 | y = oldy + dt * (oldx - oldy + oldz); |
JLS | 0:2e86b4b28ea1 | 47 | z = oldz + dt * (-beta * oldy); |
JLS | 0:2e86b4b28ea1 | 48 | |
JLS | 0:2e86b4b28ea1 | 49 | xout = 320+(130*x); |
JLS | 0:2e86b4b28ea1 | 50 | yout = 240+(430*y); |
JLS | 0:2e86b4b28ea1 | 51 | |
JLS | 0:2e86b4b28ea1 | 52 | pixel(xout,yout,col); |
JLS | 0:2e86b4b28ea1 | 53 | |
JLS | 0:2e86b4b28ea1 | 54 | cnt ++; |
JLS | 0:2e86b4b28ea1 | 55 | |
JLS | 0:2e86b4b28ea1 | 56 | if (cnt == 100) { |
JLS | 0:2e86b4b28ea1 | 57 | |
JLS | 0:2e86b4b28ea1 | 58 | col = rand(); |
JLS | 0:2e86b4b28ea1 | 59 | |
JLS | 0:2e86b4b28ea1 | 60 | cnt = 0; |
JLS | 0:2e86b4b28ea1 | 61 | |
JLS | 0:2e86b4b28ea1 | 62 | } |
JLS | 0:2e86b4b28ea1 | 63 | |
JLS | 0:2e86b4b28ea1 | 64 | } |
JLS | 0:2e86b4b28ea1 | 65 | } |
JLS | 0:2e86b4b28ea1 | 66 | |
JLS | 0:2e86b4b28ea1 | 67 | |
JLS | 0:2e86b4b28ea1 | 68 | void startVGA () { |
JLS | 0:2e86b4b28ea1 | 69 | |
JLS | 0:2e86b4b28ea1 | 70 | _rst = 1; |
JLS | 0:2e86b4b28ea1 | 71 | _rst = 0; |
JLS | 0:2e86b4b28ea1 | 72 | wait_ms(1); |
JLS | 0:2e86b4b28ea1 | 73 | _rst = 1; |
JLS | 0:2e86b4b28ea1 | 74 | wait(3); |
JLS | 0:2e86b4b28ea1 | 75 | |
JLS | 0:2e86b4b28ea1 | 76 | while (_cmd.readable()) _cmd.getc(); |
JLS | 0:2e86b4b28ea1 | 77 | |
JLS | 0:2e86b4b28ea1 | 78 | char autobaud[1] = ""; |
JLS | 0:2e86b4b28ea1 | 79 | autobaud[0] = '\x55'; |
JLS | 0:2e86b4b28ea1 | 80 | writeCOM(autobaud, 1); |
JLS | 0:2e86b4b28ea1 | 81 | |
JLS | 0:2e86b4b28ea1 | 82 | baudrate(); |
JLS | 0:2e86b4b28ea1 | 83 | |
JLS | 0:2e86b4b28ea1 | 84 | cls(); |
JLS | 0:2e86b4b28ea1 | 85 | |
JLS | 0:2e86b4b28ea1 | 86 | char dispctr[3]= ""; |
JLS | 0:2e86b4b28ea1 | 87 | dispctr[0] = '\x59'; |
JLS | 0:2e86b4b28ea1 | 88 | dispctr[1] = 0x0c; |
JLS | 0:2e86b4b28ea1 | 89 | dispctr[2] = 0x01; |
JLS | 0:2e86b4b28ea1 | 90 | writeCOM(dispctr, 3); |
JLS | 0:2e86b4b28ea1 | 91 | |
JLS | 0:2e86b4b28ea1 | 92 | } |
JLS | 0:2e86b4b28ea1 | 93 | |
JLS | 0:2e86b4b28ea1 | 94 | |
JLS | 0:2e86b4b28ea1 | 95 | void pixel(int x, int y, int color) { |
JLS | 0:2e86b4b28ea1 | 96 | |
JLS | 0:2e86b4b28ea1 | 97 | char pixel[7]= ""; |
JLS | 0:2e86b4b28ea1 | 98 | |
JLS | 0:2e86b4b28ea1 | 99 | pixel[0] = '\x50'; |
JLS | 0:2e86b4b28ea1 | 100 | |
JLS | 0:2e86b4b28ea1 | 101 | pixel[1] = (x >> 8) & 0xFF; |
JLS | 0:2e86b4b28ea1 | 102 | pixel[2] = x & 0xFF; |
JLS | 0:2e86b4b28ea1 | 103 | |
JLS | 0:2e86b4b28ea1 | 104 | pixel[3] = (y >> 8) & 0xFF; |
JLS | 0:2e86b4b28ea1 | 105 | pixel[4] = y & 0xFF; |
JLS | 0:2e86b4b28ea1 | 106 | |
JLS | 0:2e86b4b28ea1 | 107 | pixel[5] = (color >> 8) & 0xFF; |
JLS | 0:2e86b4b28ea1 | 108 | pixel[6] = color & 0xFF; |
JLS | 0:2e86b4b28ea1 | 109 | |
JLS | 0:2e86b4b28ea1 | 110 | writeCOM(pixel, 7); |
JLS | 0:2e86b4b28ea1 | 111 | } |
JLS | 0:2e86b4b28ea1 | 112 | |
JLS | 0:2e86b4b28ea1 | 113 | |
JLS | 0:2e86b4b28ea1 | 114 | void baudrate() { |
JLS | 0:2e86b4b28ea1 | 115 | |
JLS | 0:2e86b4b28ea1 | 116 | char baudrate[2]= ""; |
JLS | 0:2e86b4b28ea1 | 117 | |
JLS | 0:2e86b4b28ea1 | 118 | baudrate[0] = '\x51'; |
JLS | 0:2e86b4b28ea1 | 119 | baudrate[1] = '\x0F'; |
JLS | 0:2e86b4b28ea1 | 120 | |
JLS | 0:2e86b4b28ea1 | 121 | int i, resp = 0; |
JLS | 0:2e86b4b28ea1 | 122 | |
JLS | 0:2e86b4b28ea1 | 123 | while (_cmd.readable()) _cmd.getc(); |
JLS | 0:2e86b4b28ea1 | 124 | |
JLS | 0:2e86b4b28ea1 | 125 | long speed = speed = 281000; |
JLS | 0:2e86b4b28ea1 | 126 | |
JLS | 0:2e86b4b28ea1 | 127 | for (i = 0; i <2; i++) _cmd.putc(baudrate[i]); |
JLS | 0:2e86b4b28ea1 | 128 | _cmd.baud(speed); |
JLS | 0:2e86b4b28ea1 | 129 | |
JLS | 0:2e86b4b28ea1 | 130 | while (!_cmd.readable()) wait_ms(1); |
JLS | 0:2e86b4b28ea1 | 131 | |
JLS | 0:2e86b4b28ea1 | 132 | if (_cmd.readable()) resp = _cmd.getc(); |
JLS | 0:2e86b4b28ea1 | 133 | switch (resp) { |
JLS | 0:2e86b4b28ea1 | 134 | case '\x06' : |
JLS | 0:2e86b4b28ea1 | 135 | resp = 1; |
JLS | 0:2e86b4b28ea1 | 136 | break; |
JLS | 0:2e86b4b28ea1 | 137 | case '\x15' : |
JLS | 0:2e86b4b28ea1 | 138 | resp = -1; |
JLS | 0:2e86b4b28ea1 | 139 | break; |
JLS | 0:2e86b4b28ea1 | 140 | default : |
JLS | 0:2e86b4b28ea1 | 141 | resp = 0; |
JLS | 0:2e86b4b28ea1 | 142 | break; |
JLS | 0:2e86b4b28ea1 | 143 | } |
JLS | 0:2e86b4b28ea1 | 144 | |
JLS | 0:2e86b4b28ea1 | 145 | } |
JLS | 0:2e86b4b28ea1 | 146 | |
JLS | 0:2e86b4b28ea1 | 147 | |
JLS | 0:2e86b4b28ea1 | 148 | int writeCOM(char *command, int number) { |
JLS | 0:2e86b4b28ea1 | 149 | |
JLS | 0:2e86b4b28ea1 | 150 | int i, resp = 0; |
JLS | 0:2e86b4b28ea1 | 151 | |
JLS | 0:2e86b4b28ea1 | 152 | while (_cmd.readable()) _cmd.getc(); |
JLS | 0:2e86b4b28ea1 | 153 | |
JLS | 0:2e86b4b28ea1 | 154 | for (i = 0; i < number; i++) _cmd.putc(command[i]); |
JLS | 0:2e86b4b28ea1 | 155 | |
JLS | 0:2e86b4b28ea1 | 156 | while (!_cmd.readable()) wait_ms(1); |
JLS | 0:2e86b4b28ea1 | 157 | if (_cmd.readable()) resp = _cmd.getc(); |
JLS | 0:2e86b4b28ea1 | 158 | switch (resp) { |
JLS | 0:2e86b4b28ea1 | 159 | case '\x06' : |
JLS | 0:2e86b4b28ea1 | 160 | resp = 1; |
JLS | 0:2e86b4b28ea1 | 161 | break; |
JLS | 0:2e86b4b28ea1 | 162 | case '\x15' : |
JLS | 0:2e86b4b28ea1 | 163 | resp = -1; |
JLS | 0:2e86b4b28ea1 | 164 | break; |
JLS | 0:2e86b4b28ea1 | 165 | default : |
JLS | 0:2e86b4b28ea1 | 166 | resp = 0; |
JLS | 0:2e86b4b28ea1 | 167 | break; |
JLS | 0:2e86b4b28ea1 | 168 | } |
JLS | 0:2e86b4b28ea1 | 169 | |
JLS | 0:2e86b4b28ea1 | 170 | return resp; |
JLS | 0:2e86b4b28ea1 | 171 | } |
JLS | 0:2e86b4b28ea1 | 172 | |
JLS | 0:2e86b4b28ea1 | 173 | |
JLS | 0:2e86b4b28ea1 | 174 | void cls() { |
JLS | 0:2e86b4b28ea1 | 175 | char cls[1] = ""; |
JLS | 0:2e86b4b28ea1 | 176 | cls[0] = '\x45'; |
JLS | 0:2e86b4b28ea1 | 177 | writeCOM(cls, 1); |
JLS | 0:2e86b4b28ea1 | 178 | } |