Demo for Glasgow Students that writes to dot matrix display and sends the display data out of the serial port

Dependencies:   mbed

Revision:
0:bc2c0a19b0e5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Feb 19 08:38:28 2015 +0000
@@ -0,0 +1,117 @@
+#include "mbed.h"
+/*
+example of driving maxim chip for Glasgow Uni Projects.
+
+Dr J.J.Trinder 2013,14,15
+
+This one modified to also send display data out of serial port for a remote simulated display
+for more info email me
+jon.trinder@glasgow.ac.uk
+jont@ninelocks.com
+ 
+*/
+
+#define max7219_reg_noop         0x00
+#define max7219_reg_digit0       0x01
+#define max7219_reg_digit1       0x02
+#define max7219_reg_digit2       0x03
+#define max7219_reg_digit3       0x04
+#define max7219_reg_digit4       0x05
+#define max7219_reg_digit5       0x06
+#define max7219_reg_digit6       0x07
+#define max7219_reg_digit7       0x08
+#define max7219_reg_decodeMode   0x09
+#define max7219_reg_intensity    0x0a
+#define max7219_reg_scanLimit    0x0b
+#define max7219_reg_shutdown     0x0c
+#define max7219_reg_displayTest  0x0f
+
+#define LOW 0
+#define HIGH 1
+
+//serial port
+
+Serial pc(USBTX, USBRX); // tx, rx
+
+SPI max72_spi(PTD2, NC, PTD1);
+DigitalOut load(PTD0); //will provide the load signal
+
+
+char  pattern_diagonal[8] = { 0x01, 0x2,0x4,0x08,0x10,0x20,0x40,0x80};
+char  pattern_square[8] = { 0xff, 0x81,0x81,0x81,0x81,0x81,0x81,0xff};  
+char  pattern_star[8] = { 0x04, 0x15, 0x0e, 0x1f, 0x0e, 0x15, 0x04, 0x00};
+
+
+/*
+Write to the maxim via SPI
+args register and the column data
+*/
+void write_to_max( int reg, int col)
+{
+    load = LOW;            // begin
+    max72_spi.write(reg);  // specify register
+    max72_spi.write(col);  // put data
+    load = HIGH;           // make sure data is loaded (on rising edge of LOAD/CS)
+}
+
+//writes 8 bytes to the display  
+void pattern_to_display(char *testdata){
+    int cdata; 
+    for(int idx = 0; idx <= 7; idx++) {
+        cdata = testdata[idx]; 
+        write_to_max(idx+1,cdata);
+        
+        //writet to the pretend display on the serial port
+        if(pc != NULL) {
+            pc.printf("%i;%02x\r\n", idx,cdata);
+        }
+    }
+} 
+ 
+
+void setup_dot_matrix ()
+{
+    // initiation of the max 7219
+    // SPI setup: 8 bits, mode 0
+    max72_spi.format(8, 0);
+     
+  
+  
+       max72_spi.frequency(100000); //down to 100khx easier to scope ;-)
+      
+
+    write_to_max(max7219_reg_scanLimit, 0x07);
+    write_to_max(max7219_reg_decodeMode, 0x00);  // using an led matrix (not digits)
+    write_to_max(max7219_reg_shutdown, 0x01);    // not in shutdown mode
+    write_to_max(max7219_reg_displayTest, 0x00); // no display test
+    for (int e=1; e<=8; e++) {    // empty registers, turn all LEDs off
+        write_to_max(e,0);
+    }
+   // maxAll(max7219_reg_intensity, 0x0f & 0x0f);    // the first 0x0f is the value you can set
+     write_to_max(max7219_reg_intensity,  0x08);     
+ 
+}
+
+void clear(){
+     for (int e=1; e<=8; e++) {    // empty registers, turn all LEDs off
+        write_to_max(e,0);
+    }
+}
+
+
+int main()
+{
+    pc.baud(9600); //setup serial port to 9600
+    setup_dot_matrix ();      /* setup matric */
+    while(1){
+    //da_star();
+    pattern_to_display(pattern_diagonal);
+    wait_ms(1000);
+    pattern_to_display(pattern_square);
+    wait_ms(1000);
+    pattern_to_display(pattern_star);
+    wait_ms(1000);
+    clear();
+
+    }
+}
\ No newline at end of file