Created
October 4, 2011 08:38
-
-
Save anonymous/1261164 to your computer and use it in GitHub Desktop.
Zprotocolarduino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "wire.h" | |
// code for max7313 | |
// initial code from eric toering | |
// modification for driving a lot of MAX7313 boards Lionel D. 24/02/2010 | |
// Protocol implementation Fabrice F. 13/03/2010 | |
// READ THE MAX7313 DATASHEET !!!! | |
// Using the Wire library (created by Nicholas Zambetti) | |
// On the Arduino board, Analog In 4 is SDA, Analog In 5 is SCL | |
void Send(byte addr, byte reg, byte data); | |
byte address[] = {0x11,0x12,0x13}; | |
//byte address[] = {0x10,0x11,0x12,0x18,0x19,0x1A,0x50,0x51,0x52,0x28,0x29,0x2A,0x60,0x61,0x62,0x58,0x59,0x5A,0x20,0x21,0x22}; | |
//byte address[] = {0x1B,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F}; | |
// adresses of max chips | |
// byte address[] = {0x11, 0X12, 0x13}; // adresses of max chips | |
int maxnb = 3; // total nb of max7313 | |
int timer = 1; // timer used to slow down the full test (K2000 effect speed) | |
int intensity = 0xff; // intensity | |
int maxRow = 16; | |
char serString[49]; // lenght of the serial message maxnb *16 + 1 | |
int valid = 0; | |
void setup() | |
{ | |
Wire.begin(); // join i2c bus (address optional for master) | |
//Serial.begin(115200); // (DEBUG) | |
Serial.begin(38400); // (DEBUG) | |
// print("check"); | |
int maxindex; // index of array | |
for (int maxindex=0; maxindex < maxnb; maxindex++) | |
// Max 7313 - Init phase | |
{ | |
Send(address[maxindex], 0xf, 0x10); // blink 0 aan, 0x10 is glob uit | |
Send(address[maxindex], 0x6, 0x00); // input en output config. | |
Send(address[maxindex], 0x7, 0x00); // oninterresante getallen, afblijven!! | |
Send(address[maxindex], 0x2, 0xff); // global intensity reg. | |
Send(address[maxindex], 0x3, 0xff); | |
Send(address[maxindex], 0xe, 0xff); // config bit | |
} | |
} | |
void loop() | |
{ | |
// Read the serial | |
readSerialProtocol(serString); | |
//Serial.print(serString); | |
//string index to browse the serial string | |
int stringIndex=0; | |
// browse cols | |
int maxindex; // index of array | |
/** | |
* if ( valid == 0 ) { | |
* for (int maxindex=0; maxindex < maxnb; maxindex++){ | |
* for (int row=0; row < maxRow; row++){ | |
* // j'efface tout | |
* //delay(timer); | |
* Send(address[maxindex], (0x10+(row/2)), 0xff); | |
* } | |
* } | |
* return; | |
* } | |
/**/ | |
byte colData[8]; | |
byte Pos1; | |
byte Pos2; | |
int k=0; | |
int t =0; | |
boolean fort=true; | |
// browse cols | |
for (int maxindex=0; maxindex < maxnb; maxindex++){ | |
//browse rows | |
for (int row=0; row < maxRow; row++){ | |
// Serial.println(serString[stringIndex]); | |
//boucle sur les string index | |
if (fort){ | |
Pos1=serString[stringIndex]; | |
fort=false; | |
k++; | |
} | |
else{ | |
k++; | |
//Serial.print(k,DEC); | |
Pos2=serString[stringIndex]; | |
//Serial.print("pos1:"); | |
//Serial.println(Pos1,HEX); | |
//Serial.print("pos2:"); | |
//Serial.println(Pos2,HEX); | |
colData[t]=Read2HEXtoDEC(Pos1,Pos2); | |
fort=true; | |
t++; | |
} | |
stringIndex++; | |
} | |
SendCol(address[maxindex], 0x10, colData); | |
t=0; | |
} | |
//delay for debugging | |
//delay(10); | |
} | |
// Send I2C data | |
void SendCol(byte addr, byte reg, byte colData[]) | |
{ | |
Wire.beginTransmission(addr); | |
Wire.send( reg); | |
// Serial.print("Maxaddress :"); | |
// Serial.print(addr,HEX); // debug | |
for (int i=0;i<8;i++){ | |
Wire.send( colData[i]); | |
// Serial.println(i,DEC); // debug | |
// Serial.print("< N Ligne / HEX Value : "); | |
// Serial.println(colData[i],HEX); // debug | |
} | |
Wire.endTransmission(); | |
} | |
// Send I2C data | |
void Send(byte addr, byte reg, byte data) | |
{ | |
Wire.beginTransmission(addr); | |
Wire.send( reg); | |
Wire.send( data); | |
Wire.endTransmission(); | |
} | |
// Read the protocol string from the serial and store it in an array | |
//you must supply the array variable | |
void readSerialProtocol (char *strArray) { | |
int i = 0, c; | |
int sync = 0; | |
if(!Serial.available()) { | |
return; | |
} | |
while (i = 65 && c = 48 && c <= 57))) { | |
Serial.write('!'); | |
Serial.write(c); | |
Serial.write('!'); | |
} | |
/**/ | |
strArray[i++] = c; | |
} | |
} | |
// Reads a 2 byte HEX from the serial port and converts it to DEC | |
// The incomming data stream is build up as follows | |
// Example: 15 06 A3 FF 00 ... etc. | |
int Read2HEXtoDEC(byte Pos2,byte Pos1) | |
{ | |
// Now convert the HEX to DEC | |
int DECval = 0; | |
if(Pos2 <= 57) // Convert Pos2 from 16 base to 10 base | |
{ | |
DECval = DECval + Pos2-48; | |
} | |
else | |
{ | |
DECval = DECval + Pos2-55; | |
} | |
if(Pos1 <= 57) // Convert Pos1 from 16 base to 10 base | |
{ | |
DECval = DECval + 16*(Pos1-48); | |
} | |
else | |
{ | |
DECval = DECval + 16*(Pos1-55); | |
} | |
return ~DECval; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment