Bonjour,
Je remet ce topic en avant pour poser un autre problème pour le DMX.
L'envois de canaux (boucler sur un envois en RS232 à une vitesse de 250k bit/s de 193 canaux).
Mais, maintenant je me heurte à un autre problème.
Pour finaliser la trame, il faut que je rajoute deux bits de début de trame (un appelez "BREAK" (niveaux bas (NL0), de 88µs et un un "MAB" (niveau haut NL1)de 8µs), avant de commencer l'envois des canaux.
Voici à quoi ressemble le programme :
//Programme d'envois d'une trame complete DMX, conforme à la norme
//Utilisation d'une carte ARDUINO MEGA (d'où l'utilisation du Serial1)
//La borne 22, permet une synchronisation de début de trame pour une lecture
//à l'oscilloscope
void setup()
{
pinMode(22,OUTPUT);//signal de synchronisation pour une visualisation à l'oscilloscope
Serial1.begin(250000,SERIAL_8N2); //configuration de la liaison série 1
//à 250kbit/s, 8 bits, Sans bit de parité et 2 bits de stop
digitalWrite(16,HIGH);//TX1 au NL1, état d'attente (MBB)
}
void loop()
{
digitalWrite(22,HIGH);//début de l'impultion de synchronisation
digitalWrite(16,LOW);//Installation du BREAK(début de trame)
delayMicroseconds(88);//Attente de 88µs (là, débute les problème)
digitalWrite(16,HIGH);//Envois du MAB, pour permettre le start (NL0) des canaux
digitalWrite(22,LOW);//synchronisation de début d'envois des canaux
delayMicroseconds(8);//Attente de 8µs (là le temps est alléatoire)
for(n=0;n<=193;n++)//Boucle pour l'envois de 193canaux
{
Serial.write(00);//Envois d'une valeur, ici zéro, mais c'est juste pour les éssais
}
delay(1); //temps d'attente entre deux trame
}
Le problème est le suivant, à l'oscilloscope la trame donnée rend des valeur de BREAK et de MAB, aléatoire.
LEs 88µs et 8µs ne sont pas respectées.
Je penche pour un problème d'interruption utilisé par le delayMicroseconds et le Serial1, mais pas sur.
Du coup j'aimerais savoir si quelqu'un serais si on peut désactiver le Serial ou non? Enfin avoir une solution.
(Seul, l'instruction delayMicroseconds à 8µs fonctionne bien)