Tomoyuki Saito / Mbed 2 deprecated galvano_driver

Dependencies:   TextLCD mbed

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);
+    }
+
+
+}