[CGSG] SVN Commit r429 - user/wizard23/matrix2.0/arduino/spiTester

kintel at metalab.at kintel at metalab.at
Fri Apr 25 04:03:15 CEST 2008


Author: kintel
Date: 2008-04-25 04:03:15 +0200 (Fri, 25 Apr 2008)
New Revision: 429

Modified:
   user/wizard23/matrix2.0/arduino/spiTester/spiTester.pde
Log:
Better debugging modes

Modified: user/wizard23/matrix2.0/arduino/spiTester/spiTester.pde
===================================================================
--- user/wizard23/matrix2.0/arduino/spiTester/spiTester.pde	2008-04-24 22:10:19 UTC (rev 428)
+++ user/wizard23/matrix2.0/arduino/spiTester/spiTester.pde	2008-04-25 02:03:15 UTC (rev 429)
@@ -1,13 +1,15 @@
 #define USE_HARDWARE_SPI 
 
 byte mode = 0;
-byte row = 0, column = 0;
+byte row = 0;
+int column = 0;
 uint8_t globalintensity = 0xf0;
 bool invert = false;
 byte rowmask = 0xff;
 byte testdelay = 10;
 byte colinc = 1;
 bool single = false;
+bool pause = false;
 #ifdef USE_HARDWARE_SPI
 
 #define CS     PB2  // Pin 10
@@ -34,7 +36,7 @@
 {
   SPDR = data;                   // Start the transmission
   while (!(SPSR & _BV(SPIF))) {} // Wait until the end of the transmission
-  delayMicroseconds(3);
+//  delayMicroseconds(3);
   return SPDR;                   // return the received byte
 }
 
@@ -70,10 +72,10 @@
     PORTB &= ~_BV(PB5);
     if (data & 0x01) PORTB |= _BV(PB3);
     else  PORTB &= ~_BV(PB3);
-    delayMicroseconds(2);
+//    delayMicroseconds(2);
     PORTB |= _BV(PB5);
     data >>= 1;
-    delayMicroseconds(2);
+//    delayMicroseconds(2);
 //     digitalWrite(SCK, LOW);
 //     digitalWrite(MOSI, data & 0x01);
 //     data >>= 1;
@@ -135,6 +137,15 @@
   }
 }
 
+void fillonecolumn(uint16_t col, uint8_t val)
+{
+  int8_t m = col/72;
+  setAddress(m*8, col%72);
+  for (uint8_t r=0;r<8;r++) {
+    spi_transfer((rowmask & (1<<r)) ? val : 0x00);
+  }
+}
+
 void fillmodule(uint8_t module, uint8_t val)
 {
   setAddress(module*64);
@@ -192,6 +203,21 @@
       mode = IDLE;
       break;
     }
+    case 'p':
+      pause = !pause;
+      break;
+      // Just draw a mask on current pos
+    case 'd': {
+      while (Serial.available() < 2) {}
+      byte n1 = Serial.read();
+      byte n2 = Serial.read();
+      uint8_t oldmask = rowmask;
+      rowmask = char2byte(n1, n2);
+      fillonecolumn(column, globalintensity);
+      rowmask = oldmask;
+      pause = true;
+      break;
+    }
     case 'f':
       fill(globalintensity);
       mode = IDLE;
@@ -265,18 +291,24 @@
       single = false;
       mode = TESTING;
       break;
-      // Start a test pattern by turning off one pixel at a time
+      // Start a test pattern by clearing one column at a time
     case 'o':
       fill(globalintensity, rowmask);
       row = 0;
+      column = 0;
+      rowmask = ~_BV(row);
       invert = false;
       single = true;
       mode = TESTING;
       break;
-      // Start a test pattern by turning on one pixel at a time
+      // Start a test pattern by filling one column at a time
     case 'O':
+      while (Serial.available() < 1) {}
       fill(0x00);
-      row = 0;
+      byte row = char2byte(0, Serial.read());
+      if (row >= 8) row = 7;
+      column = 0;
+      rowmask = ~(1<<row);
       invert = true;
       single = true;
       mode = TESTING;
@@ -331,38 +363,50 @@
       break;
       // decrease test column in manual mode
     case '[':
-      column = (column - 1)%72;
+      column = (column - 1);
       break;
       // increase test column in manual mode
     case ']':
-      column = (column + 1)%72;
+      column = (column + 1);
       break;
+    case '{':
+      row = (row - 1)%48;
+      break;
+      // increase test column in manual mode
+    case '}':
+      row = (row + 1)%48;
+      break;
 
     }
   }
 
+  if (pause) return;
+
   if (mode == TESTING) {
-    if (invert) {
-      fillcolumn(column, globalintensity);
+    if (single) {
+      fillonecolumn(column+1, 0x00);
+      fillonecolumn(column, globalintensity);
+      delay(testdelay * 100);
+      column += colinc;
     }
     else {
-      fillcolumn(column, 0x00);
+      uint8_t i = invert?globalintensity:0x00;
+      fillcolumn(column, i);
+      
+      delay(testdelay * 100);
+      
+      i = invert?0x00:globalintensity;
+      fillcolumn(column, i);
+      
+      column = column + colinc;
+      if (single && (column == 72)) {
+        rowmask = rowmask << 1;
+        if (rowmask == 0) {
+          rowmask = 1;
+          row += 8;
+        }
+      }
+      column = column%72;
     }
-    delay(testdelay * 100);
-    if (invert) {
-      fillcolumn(column, 0x00);
-    }
-    else {
-      fillcolumn(column, globalintensity);
-    }
-    column = column + colinc;
-//     if (single && (column == 72)) {
-//       rowmask = rowmask << 1;
-//       if (rowmask == 0) {
-//         rowmask = 1;
-//         row += 8;
-//       }
-//     }
-    column = column%72;
   }
 }



More information about the CGSG mailing list