[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