176 lines
3.9 KiB
C++
Executable File
176 lines
3.9 KiB
C++
Executable File
|
|
|
|
#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);
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|