Modifs micro
This commit is contained in:
parent
3fe2d423eb
commit
6dcfbb7bd2
1 changed files with 63 additions and 63 deletions
|
|
@ -9,8 +9,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// déclaration des tableaux de données
|
// déclaration des tableaux de données
|
||||||
byte tab_input_pc[1026]; // venant du pc
|
byte tab_input_pc[514]; // venant du pc
|
||||||
byte tab_input_dmx[534]; // données venant de l'extérieur : les 512 premiers DMX; les 20 suivant 4x8 bp + 16 analogique 8bits ; 1 octet d'etat
|
byte tab_input_dmx[518]; // données venant de l'extérieur : les 512 premiers DMX; les 4 suivant 4x8 bp ;
|
||||||
// reception
|
// reception
|
||||||
volatile int index_input_pc=0; // entrée serial 0
|
volatile int index_input_pc=0; // entrée serial 0
|
||||||
volatile int index_output_pc=0; // sortie serial 0
|
volatile int index_output_pc=0; // sortie serial 0
|
||||||
|
|
@ -20,32 +20,27 @@ volatile int index_output_dmx2=0; //sortie dmx -2 en attente de fin de transmiss
|
||||||
volatile int etat_input_pc=0; // 0 raz ; 1 esc reçu ; 2 D reçu : pret à recevoir ; 3 prèt à emmetre
|
volatile int etat_input_pc=0; // 0 raz ; 1 esc reçu ; 2 D reçu : pret à recevoir ; 3 prèt à emmetre
|
||||||
volatile int start_code_rec=-1;
|
volatile int start_code_rec=-1;
|
||||||
char key; // caractère reçu serial 0
|
char key; // caractère reçu serial 0
|
||||||
int cpt_ana = 0;
|
|
||||||
int ledPin = 13; // led interne
|
int ledPin = 13; // led interne
|
||||||
int tx1pin = 0; // pin DMX serial 1
|
int tx1pin = 1; // pin DMX serial 1
|
||||||
int tx2pin = 16; // pin DMX serial 2
|
|
||||||
|
|
||||||
byte brk_timer_end=75; // def : 150us
|
byte brk_timer_end=75; // def : 150us
|
||||||
byte mab_timer_end=25; //def : 50us
|
byte mab_timer_end=25; //def : 50us
|
||||||
int nb_circuits=512;
|
int nb_circuits=512;
|
||||||
int flag_merge1=1;
|
int flag_merge1=1;
|
||||||
int flag_merge2=1;
|
int emissionPc=1;
|
||||||
|
|
||||||
|
// lecture d'un caractere sur USB
|
||||||
|
void litSerial()
|
||||||
// vecteur d'inéruption pour reception pc
|
|
||||||
/*
|
|
||||||
ISR(USART0_RX_vect)
|
|
||||||
{
|
{
|
||||||
char c,r;
|
char c;
|
||||||
byte *pb, *pe;
|
byte *pb, *pe;
|
||||||
r = UCSR0A;
|
|
||||||
c = UDR0;
|
c = Serial.read();
|
||||||
switch (etat_input_pc) {
|
switch (etat_input_pc) {
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
// on attend un 'esc' pour commencer
|
// on attend un 'esc' pour commencer
|
||||||
if (c==27) { etat_input_pc=1; digitalWrite(ledPin, LOW);break;}
|
if (c==27) { etat_input_pc=1; break;}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -54,23 +49,23 @@ ISR(USART0_RX_vect)
|
||||||
if (c==68) {
|
if (c==68) {
|
||||||
etat_input_pc=2;
|
etat_input_pc=2;
|
||||||
index_input_pc=1;
|
index_input_pc=1;
|
||||||
tab_input_dmx[533]=68;
|
tab_input_dmx[517]=68;
|
||||||
index_output_pc=1; // on init l'index d'emmission vers le pc ( le 0 n'est pas emit => start code)
|
index_output_pc=1; // on init l'index d'emmission vers le pc ( le 0 n'est pas emit => start code)
|
||||||
sbi(UCSR0B, UDRIE0); // activation de l'intéruption registre emmission
|
emissionPc=1; // activation de l'intéruption registre emmission
|
||||||
}
|
}
|
||||||
// Esc 'C' réinit
|
// Esc 'C' réinit
|
||||||
if (c==67) {
|
if (c==67) {
|
||||||
etat_input_pc=0;
|
etat_input_pc=0;
|
||||||
|
|
||||||
pe=tab_input_pc+1026;
|
pe=tab_input_pc+514;
|
||||||
for(pb=tab_input_pc;pb<pe;pb++) *pb=0;
|
for(pb=tab_input_pc;pb<pe;pb++) *pb=0;
|
||||||
|
|
||||||
pe=tab_input_dmx+533;
|
pe=tab_input_dmx+518;
|
||||||
for(pb=tab_input_dmx;pb<pe;pb++) *pb=0;
|
for(pb=tab_input_dmx;pb<pe;pb++) *pb=0;
|
||||||
|
|
||||||
tab_input_dmx[533]=67;
|
tab_input_dmx[517]=67;
|
||||||
index_output_pc=533; // on init l'index d'emmission vers le pc ( uniquement etat : 67 'C' )
|
index_output_pc=517; // on init l'index d'emmission vers le pc ( uniquement etat : 67 'C' )
|
||||||
sbi(UCSR0B, UDRIE0);
|
emissionPc=1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -79,9 +74,10 @@ ISR(USART0_RX_vect)
|
||||||
|
|
||||||
// Esc 'A' probe
|
// Esc 'A' probe
|
||||||
if (c==65) {etat_input_pc=0;
|
if (c==65) {etat_input_pc=0;
|
||||||
tab_input_dmx[533]=65;
|
tab_input_dmx[517]=65;
|
||||||
index_output_pc=533; // on init l'index d'emmission vers le pc ( uniquement etat : 65 'A' )
|
index_output_pc=517; // on init l'index d'emmission vers le pc ( uniquement etat : 65 'A' )
|
||||||
sbi(UCSR0B, UDRIE0);
|
emissionPc=1;
|
||||||
|
digitalWrite(ledPin, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
// si aucune commande n'est trouvée (toujours à 1) on repart à 0
|
// si aucune commande n'est trouvée (toujours à 1) on repart à 0
|
||||||
|
|
@ -92,8 +88,8 @@ ISR(USART0_RX_vect)
|
||||||
// on rempli le tableau
|
// on rempli le tableau
|
||||||
tab_input_pc[index_input_pc]=c;
|
tab_input_pc[index_input_pc]=c;
|
||||||
index_input_pc++;
|
index_input_pc++;
|
||||||
// si on arrive à 1024
|
// si on arrive à 512
|
||||||
if (index_input_pc > 1024) {// on se prépare à emmetre vers le pc
|
if (index_input_pc > 512) {// on se prépare à emmetre vers le pc
|
||||||
etat_input_pc=0;
|
etat_input_pc=0;
|
||||||
digitalWrite(ledPin, HIGH);
|
digitalWrite(ledPin, HIGH);
|
||||||
|
|
||||||
|
|
@ -118,11 +114,11 @@ ISR(USART0_RX_vect)
|
||||||
case 13: // 4eme parametre : merge
|
case 13: // 4eme parametre : merge
|
||||||
etat_input_pc=0;
|
etat_input_pc=0;
|
||||||
flag_merge1 = c & 1;
|
flag_merge1 = c & 1;
|
||||||
flag_merge2 = c/2 & 1;
|
|
||||||
// on a tout recu, on reponds
|
// on a tout recu, on reponds
|
||||||
tab_input_dmx[533]=66;
|
tab_input_dmx[517]=66;
|
||||||
index_output_pc=533; // on init l'index d'emmission vers le pc ( uniquement etat : 66 'B' )
|
index_output_pc=517; // on init l'index d'emmission vers le pc ( uniquement etat : 66 'B' )
|
||||||
sbi(UCSR0B, UDRIE0);
|
emissionPc=1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -131,7 +127,7 @@ ISR(USART0_RX_vect)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// vecteur d'intéruption pour reception dmx
|
// vecteur d'intéruption pour reception dmx
|
||||||
ISR(USART1_RX_vect)
|
ISR(USART1_RX_vect)
|
||||||
|
|
@ -173,18 +169,19 @@ ISR(USART1_UDRE_vect)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// vecteur d'intéruption pour transmission vers le pc sur serial 0
|
// vecteur d'intéruption pour transmission vers le pc sur serial 0
|
||||||
// vecteur registre de transmission
|
// vecteur registre de transmission
|
||||||
ISR(USART0_UDRE_vect)
|
void ecritSerial()
|
||||||
{
|
{
|
||||||
//caratère suivant
|
//caratère suivant
|
||||||
UDR0 = tab_input_dmx[index_output_pc];
|
Serial.write(tab_input_dmx[index_output_pc]);
|
||||||
index_output_pc++;
|
index_output_pc++;
|
||||||
if (index_output_pc>532) {
|
if (index_output_pc>516) {
|
||||||
cbi(UCSR0B, UDRIE0);
|
digitalWrite(ledPin, LOW);
|
||||||
|
emissionPc=0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}*/
|
|
||||||
|
|
||||||
ISR(TIMER4_COMPA_vect) {
|
ISR(TIMER4_COMPA_vect) {
|
||||||
if (index_output_dmx==-2 ) {
|
if (index_output_dmx==-2 ) {
|
||||||
|
|
@ -192,7 +189,7 @@ ISR(TIMER4_COMPA_vect) {
|
||||||
|
|
||||||
index_output_dmx=-3;
|
index_output_dmx=-3;
|
||||||
index_output_dmx2=-3;
|
index_output_dmx2=-3;
|
||||||
OCR4A = 10 ;
|
OCR4A = mab_timer_end ;
|
||||||
TCNT4 = 0 ;// RAZ compteur timer
|
TCNT4 = 0 ;// RAZ compteur timer
|
||||||
TIFR4 = 0 ; //Clear Flags timer
|
TIFR4 = 0 ; //Clear Flags timer
|
||||||
return;
|
return;
|
||||||
|
|
@ -211,15 +208,14 @@ ISR(TIMER4_COMPA_vect) {
|
||||||
void setup() {
|
void setup() {
|
||||||
// initialisation du stat code à 0
|
// initialisation du stat code à 0
|
||||||
tab_input_pc[0]=0;
|
tab_input_pc[0]=0;
|
||||||
|
|
||||||
|
// init pin led interne en sortie
|
||||||
|
pinMode(ledPin, OUTPUT);
|
||||||
|
|
||||||
|
|
||||||
|
Serial.begin(9600);
|
||||||
/*
|
/*
|
||||||
// initialisation de la liaison série pc à 0,5MB/s
|
digitalWrite(ledPin, LOW);
|
||||||
//Serial.begin(460800);
|
|
||||||
UCSR0A = 1 << U2X0;
|
|
||||||
UBRR0H=0;
|
|
||||||
UBRR0L = 3;
|
|
||||||
UCSR0C = 6;*/
|
|
||||||
|
|
||||||
|
|
||||||
// initialisation à 250k de serial 1
|
// initialisation à 250k de serial 1
|
||||||
// baudrate
|
// baudrate
|
||||||
UCSR1A = 1 << U2X1;
|
UCSR1A = 1 << U2X1;
|
||||||
|
|
@ -237,11 +233,7 @@ void setup() {
|
||||||
sbi(UCSR1B, RXCIE1); //Interruption sur reception
|
sbi(UCSR1B, RXCIE1); //Interruption sur reception
|
||||||
sbi(UCSR1B, TXCIE1); //Interruption pour fin de transmission
|
sbi(UCSR1B, TXCIE1); //Interruption pour fin de transmission
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
sbi(UCSR0B, RXEN0); //Reception
|
|
||||||
sbi(UCSR0B, RXCIE0); //Interruption sur reception
|
|
||||||
sbi(UCSR0B, TXEN0); //Transmission*/
|
|
||||||
|
|
||||||
|
|
||||||
// init timer break
|
// init timer break
|
||||||
|
|
@ -254,34 +246,32 @@ void setup() {
|
||||||
TC4H=0;
|
TC4H=0;
|
||||||
|
|
||||||
sei();
|
sei();
|
||||||
// init pin led interne en sortie
|
|
||||||
pinMode(ledPin, OUTPUT);
|
|
||||||
digitalWrite(ledPin, LOW);
|
|
||||||
|
|
||||||
|
|
||||||
// préparation du premier break
|
// préparation du premier break
|
||||||
index_output_dmx=-1;
|
index_output_dmx=-1;
|
||||||
index_output_dmx2=-1;
|
|
||||||
// PORTA = 255;
|
// PORTA = 255;
|
||||||
// DDRA = 0;
|
// DDRA = 0;
|
||||||
// PORTC = 255;
|
// PORTC = 255;
|
||||||
// DDRC = 0;
|
// DDRC = 0;
|
||||||
tab_input_dmx[533]=0;
|
tab_input_dmx[533]=0;
|
||||||
|
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
/* Serial.write(65);
|
||||||
|
delay(300);*/
|
||||||
|
/*
|
||||||
// génération du break en tache principale
|
// génération du break en tache principale
|
||||||
int cpt = 0;
|
int cpt = 0;
|
||||||
if (index_output_dmx==-1 && index_output_dmx2==-1 ) {
|
if (index_output_dmx==-1 ) {
|
||||||
index_output_dmx=-2;
|
index_output_dmx=-2;
|
||||||
index_output_dmx2=-2;
|
|
||||||
pinMode(tx1pin, OUTPUT); // on met la broche 18 en mode sortie
|
pinMode(tx1pin, OUTPUT); // on met la broche 18 en mode sortie
|
||||||
// pinMode(tx2pin, OUTPUT); // on met la broche 16 en mode sortie
|
|
||||||
cbi(UCSR1B, TXEN1); //on stop la transmission
|
cbi(UCSR1B, TXEN1); //on stop la transmission
|
||||||
digitalWrite(tx1pin, LOW); // on met la broche 18 à 0
|
digitalWrite(tx1pin, LOW); // on met la broche 18 à 0
|
||||||
digitalWrite(ledPin, LOW); // on met la broche 16 à 0
|
OCR4A = brk_timer_end ; // val 120 µs
|
||||||
OCR4A = 60 ; // val 120 µs
|
|
||||||
TCNT4 = 0 ;// RAZ compteur timer
|
TCNT4 = 0 ;// RAZ compteur timer
|
||||||
TIFR4 = 0 ; //Clear Flags timer
|
TIFR4 = 0 ; //Clear Flags timer
|
||||||
TIMSK4 = 64 ; //activation intéruption A &B
|
TIMSK4 = 64 ; //activation intéruption A &B
|
||||||
|
|
@ -294,6 +284,16 @@ void loop() {
|
||||||
tab_input_dmx[515]=0;
|
tab_input_dmx[515]=0;
|
||||||
tab_input_dmx[516]=0;
|
tab_input_dmx[516]=0;
|
||||||
|
|
||||||
|
*/
|
||||||
|
if(Serial.available()){
|
||||||
|
|
||||||
|
litSerial();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(emissionPc==1) {
|
||||||
|
ecritSerial();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue