Benoit
6
#define _SYNC 0x00
#define _BLACK 0x01
#define _GRAY 0x02
#define _WHITE 0x03
#define _LONG_SYNC 19
#define _SHORT_SYNC 2
#define _LONG_SYNC_DELAI 2
#define _SHORT_SYNC_DELAI 30
#define _NB_PIXELS 29
#define _NB_LIGNES 19
#define _COMPENS_BOUCLE 7
#define _COMPENS_IF_SERIAL 17
byte memVideo[_NB_PIXELS][_NB_LIGNES];
byte index, index2;
byte shift;
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDRD = (1<<DDB0)|(1<<DDB1);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
void setup()
{
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
digitalWrite (8, HIGH);
digitalWrite (9, HIGH);
// SPI_MasterInit();
Serial.begin(19200);
Serial.print ("GO");
Serial.print (13, BYTE);
for (index2 = 0; index2 < _NB_LIGNES; index2++)
for (index = 0; index < _NB_PIXELS; index++)
memVideo[index][index2] = _BLACK;
/*memVideo[index][index2] = (index + index2) % 3 + 1;*/
memVideo[0][0] = _WHITE;
}
int ligne;
char c;
int cx=0, cy=0;
byte couleur = _BLACK;
void loop()
{
// SYNC VERT A
// ligne 1 LONG SYNC
PORTB = _SYNC; delayMicroseconds(_LONG_SYNC);
PORTB = _BLACK; delayMicroseconds(_LONG_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_LONG_SYNC);
PORTB = _BLACK; delayMicroseconds(_LONG_SYNC_DELAI);
// ligne 2 LONG SYNC
PORTB = _SYNC; delayMicroseconds(_LONG_SYNC);
PORTB = _BLACK; delayMicroseconds(_LONG_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_LONG_SYNC);
PORTB = _BLACK; delayMicroseconds(_LONG_SYNC_DELAI);
// ligne 3 MIXTE SYNC
PORTB = _SYNC; delayMicroseconds(_LONG_SYNC);
PORTB = _BLACK; delayMicroseconds(_LONG_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
// ligne 4 SHORT SYNC
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
// ligne 5 SHORT SYNC
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI-_COMPENS_BOUCLE);
// IMAGE
for (ligne = 0; ligne < 304; ligne++)
{
//** synchro
// HSync
PORTB = _SYNC;
delayMicroseconds(4);
// Black
PORTB = _BLACK;
delayMicroseconds(4);
//** image ligne 52 uS
for (index = 0; index < _NB_PIXELS; index++)
{
PORTB = memVideo[index][ligne>>4];
PORTB = PORTB;
PORTB = PORTB;
}
delayMicroseconds(2); // 4 uS
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
}
// SYNC VERT B
// ligne 310 LONG SYNC
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
// ligne 311 SHORT SYNC
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
// ligne 312 SHORT SYNC
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI);
PORTB = _SYNC; delayMicroseconds(_SHORT_SYNC);
PORTB = _BLACK; delayMicroseconds(_SHORT_SYNC_DELAI-_COMPENS_BOUCLE-_COMPENS_IF_SERIAL);
if (Serial.available())
{
c = Serial.read ();
switch (c)
{
case '4' : if (cx>0) cx--; break;
case '6' : if (cx<29) cx++; break;
case '8' : if (cy>0) cy--; break;
case '2' : if (cy<18) cy++; break;
case '5' : memVideo[cx][cy] = couleur; break;
case 'n' : couleur = _BLACK; break;
case 'g' : couleur = _GRAY; break;
case 'b' : couleur = _WHITE; break;
}
}
}