C'est surement mieux formaté sur
pastie, mais si tu es paresseux...
(
EDIT ou si pastie fini par jetter cette entré)
P.S. Je code dans TextMate plutôt que l'IDE en utilisant le Makefile, raison pour laquelle il y a le include et les prototypes.
Code:#include "WProgram.h"
#define DEBUG 1
//#define USE_SPI 1
// Définition des pins
#define PIN_SYNC 8
#define PIN_VIDEO 9
#define PIN_LED 12
#define PIN_AUDIO 11
#define _SYNC 0x00
#define _BLACK 0x01
#define _GRAY 0x02
#define _WHITE 0x03
// Non modifié, voir mon post! (pas sur de comprendre)
#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 _NB_TV_LIGNES 262 // Modifié pour NTSC
#define _COMPENS_BOUCLE 7
#define _COMPENS_IF_SERIAL 17
#define _BAUD_RATE 19200
// Prototypes
void SPI_MasterInit(void);
void clearScreen(boolean mode);
#ifdef DEBUG
void blinkStatus(void);
#endif
void resetCursor(void);
// Variables definition
byte memVideo[_NB_PIXELS][_NB_LIGNES];
byte index, index2;
int ligne;
char c;
int cx=(_NB_PIXELS / 2), cy=(_NB_LIGNES / 2);
byte couleur = _BLACK;
#ifdef USE_SPI
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);
}
#endif
// Fonction d'effacement de l'écran (avec possibilité de faire un "cadriage" pour les tests)
void clearScreen(boolean mode)
{
for (index2 = 0; index2 < _NB_LIGNES; index2++)
for (index = 0; index < _NB_PIXELS; index++)
if (!mode) {
memVideo[index][index2] = _BLACK;
} else {
memVideo[index][index2] = (index + index2) % 3 + 1;
}
memVideo[0][0] = _WHITE;
resetCursor();
}
// Remet le curseur au milieux
void resetCursor(void)
{
cx=(_NB_PIXELS / 2);
cy=(_NB_LIGNES / 2);
}
#ifdef DEBUG
void blinkStatus(void)
{
int ii;
pinMode(PIN_LED, OUTPUT);
for(ii=0;ii<3;ii++)
{
digitalWrite(PIN_LED, HIGH);
delay(75);
digitalWrite(PIN_LED, LOW);
delay(75);
digitalWrite(PIN_LED, HIGH);
if (ii < 2) delay(75);
}
}
#endif
void setup()
{
pinMode(PIN_SYNC, OUTPUT);
pinMode(PIN_VIDEO, OUTPUT);
pinMode(PIN_AUDIO, OUTPUT);
digitalWrite(PIN_SYNC, HIGH);
digitalWrite(PIN_VIDEO, HIGH);
#ifdef USE_SPI
SPI_MasterInit();
#endif
Serial.begin(_BAUD_RATE);
Serial.println("GO");
clearScreen(true);
#ifdef DEBUG
blinkStatus();
#endif
}
void loop()
{
// SYNC VERT A
/**
* Cette section je suis pas certain de comprendre
**/
// 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 < _NB_TV_LIGNES; ligne++)
{
//** synchro
// HSync
PORTB = _SYNC;
delayMicroseconds(4.7); // Modifier NTSC
// Black
PORTB = _BLACK;
delayMicroseconds(4.7); // Modifier NTSC
//** image ligne 51.5 uS
for (index = 0; index < _NB_PIXELS; index++)
{
PORTB = memVideo[index][ligne>>4];
PORTB = PORTB; // Pas sur de comprendre ???
PORTB = PORTB; // Pas sur de comprendre ???
}
delayMicroseconds(1.4); // Modifier NTSC
/**
* Cette section je suis pas certain de comprendre
**/
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
PORTB = _BLACK;
}
// SYNC VERT B
/**
* Cette section je suis pas certain de comprendre
**/
// 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);
// Fin au prochain poste