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.
Diff: main.cpp
- Revision:
- 0:2ead13cba2ae
- Child:
- 1:51a340435086
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 25 01:40:14 2014 +0000 @@ -0,0 +1,395 @@ +//********************************************************************** +#include "mbed.h" +#include "TextLCD.h" + +#include "star.h" +#include "square.h" +#include "jibanyan.h" + +#include <stdlib.h> + +#define soft 0 + +Serial pc(USBTX, USBRX); // tx, rx +TextLCD lcd(p26, p25, p24, p23, p22, p21); // rs, e, d4-d7 + + +uint8_t f8=0; //if f8 == 1 , dac8bit emu + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +#if soft +DigitalOut CS(p10); +DigitalOut SCK(p13); /// +DigitalOut SDI(p11); +DigitalOut LDAC(p9); +#else +SPI spi(p11, p12, p13); // mosi, miso, sclk +DigitalOut CS(p10); +DigitalOut LDAC(p9); +#endif + +DigitalOut BLK(p8); // laser blanking + +#define CHA 0x7000 // //0x0000 //0x7000 +#define CHB 0xF000 // //0x8000 //0xF000 + +//********************************************************************** + +void mcp4922DataSet(char ch, uint16_t dt) +{ + if (dt >= 4096) { + //return; + dt = dt &0x0FFF; + } + //return; + // + if (ch == 'A') { + dt = CHA | dt ; //dt = 0b0111000000000000 | dt; + } else { + dt = CHB | dt ; //dt = 0b1111000000000000 | dt; + } + // + CS = 0; +#if soft + for (cnt = 0; cnt < 16; cnt++) { + ///if (((dt << cnt) &0b1000000000000000) != 0) + if (((dt << cnt) &0x8000) != 0) { + SDI = 1; + } else { + SDI = 0; + } + + SCK = 1; + ///wait_us(10); /// + SCK = 0; + } +#else + spi.write(dt); + //LPC_SSP0->DR = dt; // | 0x10000; //hardware dependent + //while(1) { + // if( (LPC_SSP0->SR &0x13) == 3) break; + //} +#endif + + CS = 1; +} + +//********************************************************************** + +void mcp4922Init() +{ + CS = 1; +// SCK = 0; +// SDI = 0; + CS = 0; + LDAC = 1; + // + mcp4922DataSet('A', 0); + mcp4922DataSet('B', 0); +} + +void triangle(void) +{ + int i=0; + + while(1) { + i++; + if (i == 256) i = 0; + mcp4922DataSet('A', i<<4);//wait_us(20); + mcp4922DataSet('B', i<<4);//wait_us(20); + LDAC = 0; + LDAC = 1; + wait_us(400); + } +} + + +void high_flat(void) +{ + while(1) { + mcp4922DataSet('A', 4095);//wait_us(20); + mcp4922DataSet('B', 4095);//wait_us(20); + LDAC = 0; + LDAC = 1; + wait_us(400); + } +} + + +void low_flat(void) +{ + while(1) { + mcp4922DataSet('A', 0);//wait_us(20); + mcp4922DataSet('B', 0);//wait_us(20); + LDAC = 0; + LDAC = 1; + wait_us(400); + } +} + + + +void triangle2(void) +{ + int i=0; + + while(1) { + i++; + if (i == 256) i = 0; + else if (i < 128) { + mcp4922DataSet('A', (i<<1)<<4);//wait_us(20); + mcp4922DataSet('B', (i<<1)<<4);//wait_us(20); + } else { + mcp4922DataSet('A', ((255 - i)<<1)<<4);//wait_us(20); + mcp4922DataSet('B', ((255 - i)<<1)<<4);//wait_us(20); + } + LDAC = 0; + LDAC = 1; + BLK = i % 2; + wait_us(100); + } +} + + +/* +void star(void) +{ + int i=0; + uint16_t x,y; + + while(1) { + x = star001[i++]; + y = star001[i++]; + if (x == 0 && y == 0) { + i = 0; + } + x += 32767; + y += 32767; + x = 65535 - x; // X-axis invert + mcp4922DataSet('A', x>>4);//wait_us(20); + mcp4922DataSet('B', y>>4);//wait_us(20); + LDAC = 0; + LDAC = 1; + wait_us(100); + + } +} +*/ +/* +void jibanyan(void) +{ + int i=0; + uint16_t x,y; + + while(1) { + x = jibanyan001[i++]; + y = jibanyan001[i++]; + if (x == 0 && y == 0) { + i = 0; + } + x += 32767; + y += 32767; + x = 65535 - x; // X-axis invert + mcp4922DataSet('A', x>>4);//wait_us(20); + mcp4922DataSet('B', y>>4);//wait_us(20); + LDAC = 0; + LDAC = 1; + wait_us(100); + + } +} +*/ + +/* +void square(void) +{ + int i=0; + uint16_t x,y; + bool b; + + while(1) { + b = square001[i++]; + x = square001[i++]; + y = square001[i++]; + if (x == 0 && y == 0) { + i = 0; + } + x += 32767; + y += 32767; + mcp4922DataSet('A', x>>4);//wait_us(20); + mcp4922DataSet('B', y>>4);//wait_us(20); + LDAC = 0; + LDAC = 1; + BLK = b; +// wait_us(400); + wait_us(2000); + + } + +} +*/ + + + +/* +void square(void) +{ + int i=0; + uint16_t x,y; + + while(1) { + x = square001[i++]; + y = square001[i++]; + if (x == 0 && y == 0) { + i = 0; + } + x += 32767; + y += 32767; + x = 65535 - x; // X-axis invert + mcp4922DataSet('A', x>>4);//wait_us(20); + mcp4922DataSet('B', y>>4);//wait_us(20); + LDAC = 0; + LDAC = 1; + wait_us(100); + + } + +} +*/ + + + + + +Ticker timer; + +uint8_t CNT=0; +// timer.attach(&int_timer, 1); // 1 second +void int_timer(void) +{ + CNT++; +} + + + +void laserscan(const int *p) +{ + int i = 0; + uint16_t x,y = 0; + +// while(1) { + while(CNT < 5) { + + x = *(p + i++); + y = *(p + i++); + + if (x == 0 && y == 0) { + i = 0; + } + + x += 32767; + y += 32767; + x = 65535 - x; // X-axis invert + + mcp4922DataSet('A', x>>4);//wait_us(20); + mcp4922DataSet('B', y>>4);//wait_us(20); + + LDAC = 0; + LDAC = 1; + + wait_us(100); + } + CNT = 0; +} + + + + + + + +#define test8bit +void disposc(const int *p,char b) +{ + int x, y, c = 0; + + while(CNT < 10) { + x = *p++; + y = *p++; + c += 2; + if (x == -1 &&y == -1) { + p = p - c; + c = 0; + x = *p++; + y = *p++; + c += 2; + } + if (b==8) { + x <<= 3 ; + y <<= 3 ; + } + + if (x < (128<<8)) x += (128<<8); + else x -= (128<<8); + if (y < (128<<8)) y += (128<<8); + else y -= (128<<8); + +#ifdef test8bit + if (f8 == 1) { + mcp4922DataSet('A', (x>>4) & 0x0FF0); + mcp4922DataSet('B', (y>>4) & 0x0FF0); + } else { + mcp4922DataSet('A', x>>4); + mcp4922DataSet('B', y>>4); + } +#else + mcp4922DataSet('A', x>>4); + mcp4922DataSet('B', y>>4); +#endif + LDAC = 0; + LDAC = 1; + wait_us(2); + + } + CNT = 0; + +} + +int main(void) +{ + + spi.format(16,0); + spi.frequency(20000000); + + mcp4922Init(); + + timer.attach(&int_timer, 1); + +/* + while(1) { + char c = pc.getc(); + lcd.printf("%02X",c); + +// char str[] = "145"; +// int buff = atoi(str); +// lcd.printf("%02X",buff); + + laserscan(c); + + } +*/ + + + + while(1) { + laserscan(jibanyan); + laserscan(star); + laserscan(square); + } + + +}