Chua oscillator - uVGAII(SGC) 4DGL color version 640x480 pin p9 - rx, pin p10 - tx, pin p11 - rst

Dependencies:   mbed

Committer:
JLS
Date:
Sat Sep 03 13:59:44 2011 +0000
Revision:
0:2e86b4b28ea1

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }