FORUM Allinbox » Vidéoprojecteurs commerciaux et modding » Autres »

[TUTO] Shunt ballast intelligent (VP moderne)

 

17 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[TUTO] Shunt ballast intelligent (VP moderne)

n°40214
matthieuwe​b
Bidouille forever !
Posté le 02-03-2015 à 09:52:32  profilanswer
 

Bonjour à tous!
 
Cette fois je m’attaque à un gros morceau... :
Ca ma pris quelques jours dont le we dernier quazi au complet !!
 
 
(J'ai muri le projet à l'aide d'une source externe mais qui n'est pas très complète :)
http://www.diyaudio.com/forums/diy [...] ost2281050
 
Comment shunter un ballast de vidéoprojecteur communiquant avec la carte mère par liaison série et par conséquent
ne pouvant accepter un simple pontage de l'optocoupleur de sortie, et ce même après une temporisation.
 
Le sujet de notre sujet, sera un projecteur DLP  de marque OPTOMA, HD600L-X 120Hz.
 
Ballast EUC 185d de chez Phillips.
 
Vue de la bête :
http://matthieu.weber.free.fr/autre/optoma/IMG_20150225_182239.jpg
 
Vue de la bête, ouverte :
http://matthieu.weber.free.fr/autre/optoma/IMG_20150225_183530.jpg
 
L'alim est HS, normalement elle fournis +5V (500mA) et +12V (2A).  
 
Le +5V est fournis en permanence (5V standby), et
lorsque l'on appuie sur le bouton power, la carte mère envoie un signal de démarrage (cf photo) P12V_ON vers la carte alim
Ensuite l'alim active le 12V et roulez jeunesse !
 
N'arrivant pas à trouver le problème, (à part un circuit de gestion de l'alim qui à grillé (que j'ai changé) le reste semble OK )
J'ai fabriqué le +5 et +12V (Sur la photo: fils rouge et jaune (masse en noir)).
http://matthieu.weber.free.fr/autre/optoma/IMG_20150225_182356.jpg
 
Pour l'instant j'ai gardé la carte l'alim (déconnectée de la carte mère) qui ne se contente plus que de fabriquer le +385V continu pour alimenter le ballast (230V AC => Pont à diodes => condensateur 200µF/400V).
 
J'ai shunté un transistor commutant le démarrage de ce dernier, pour alimenter le ballast je branche juste l'alim sur le secteur.
 
Donc pour mettre en route: J'alimente en +5V, j'appuie sur power, j'ajoute le +12v (on pourrait le mettre en même temps que le 5v) et je branche le ballast en moins de 5 secondes (Le ballast est par contre reste relié à la carte mère via les optocoupleurs, sinon bien entendu ca va pas marcher;)).
 
A noter que la lampe du VP ne s'allume que si le +5 et +12 v sont présent (on a appuyé sur power) et que a la fin lorsque l'on éteint le VP via le bouton power, le ballast coupe la lampe (mais reste sans doute alimenté comme j'ai shunté le transistor se commande du ballast sur l'alim...).
 
=> Cela avait été fait pour économiser l'énergie en veille...
 
Ok le bouzin démarre !... :)
 
Vue de la carte ballast: L'optocoupleur du haut envoie les infos séries à la carte mère
http://matthieu.weber.free.fr/autre/optoma/IMG_20150225_183847.jpg
 
Ensuite, j'ai construis et inséré sur la carte mère un circuit avec un transistor NPN des plus génériques et 2 résistances pour récupérer les trames séries (car en sortie de l'optocoupleur le signal est inversé (collecteur ouvert) :
 
http://matthieu.weber.free.fr/autre/optoma/IMG_20150227_184547.jpg
http://matthieu.weber.free.fr/autre/optoma/Shunt%202.png
 
Analyse à l'oscilloscope des trames séries issues du ballast (la lampe fonctionne (820 h d'utilisé):  
On se rends compte que la longueur de la plus petite transition est de  0,104 milliseconde (104 µs) soit (1/f => 9615 Hz)
On en déduit que la vitesse de transfert est de 9600 bauds. Au vu des trames, (ici deux s'enchainant, il y a un bit de parité, car le bit de stop est censé être toujours à l'état haut, or si il n'y avait pas de bit de parité, le bit de stop apparaitrait à l'état bas sur l'oscillogramme, ce qui n'est pas possible!
 
En faisant le calcul de la parité sur les 2 trames (cherchez sur internet la composition d'une trame série) on se rends compte qu'elle est paire.
(9600 bauds 8 bits de données 1 start 1 stop 1 parité paire).
http://matthieu.weber.free.fr/autre/optoma/Trame.gif
 
Super, jusque la tout roule...
 
Ensuite j'ai utilisé un convertisseur TTL série => USB (TTL désigne un signal compris entre 0 et 5V, ici issue de notre cher transistor).
http://www.rc-france-modelisme.com [...] y-dr8.html
ou
http://stores.ebay.fr/ICs-Processo [...] =508455919
 
J'envoie les trames envoyé par le ballast au PC lorsque je mets en marche le VP  
 
(Et oui ! Il faut que le VP soit fonctionnel, quitte à se faire prêter une lampe).
 
Le logiciel ASPYCOM  http://aspycom.free.fr/ permet d'avoir les caractères (sous forme hexadécimale que le ballast à envoyé, et le timming) (en fait il faut activer ASPYCOM en mode transparent (espion)
puis utiliser un terminal RS232 classique sous Windows: le configurer à 9600 bauds 1 sart 1 stop 8 bits parité even, et se connecter.
 
Ensuite sous ASPYCOM on a les trames sous cette forme :
 

Code :
  1. * Ouverture du Port par une application externe
  2. * Modification de la vitesse : 9600 Bauds
  3. * Modification de la configuration : 8 bits, 1 bit(s) de Stop, Parité: Even
  4. * Modification de la vitesse : 9600 Bauds
  5. * Modification de la configuration : 8 bits, 1 bit(s) de Stop, Parité: Even
  6. * Lecture, Temps: 28657 ms
  7. 00                                                                                                  .
  8. * Lecture, Temps: 31493 ms
  9. 00                                                                                                  .
  10. * Lecture, Temps: 37789 ms
  11. 70 F0 00 F1 42                                                                                      pð.ñB
  12. * Lecture, Temps: 37794 ms
  13. 63                                                                                                  c
  14. * Lecture, Temps: 37794 ms
  15. F3                                                                                                  ó
  16. * Lecture, Temps: 37794 ms
  17. 03                                                                                                  .
  18. * Lecture, Temps: 37994 ms
  19. F2 FE F4 80 F6 05 FA 66 FB 80 71 00 71 01 71 02 71 03 71 04 F2 FE 72 6D                             òþô€ö.úfû€q.q.q.q.q.òþrm
  20. * Lecture, Temps: 39415 ms
  21. F5 01                                                                                               õ.
  22. * Lecture, Temps: 39620 ms
  23. F5 01                                                                                               õ.
  24. * Lecture, Temps: 40431 ms
  25. F5 01                                                                                               õ.
  26. * Lecture, Temps: 40437 ms
  27. F5 01                                                                                               õ.
  28. * Lecture, Temps: 41446 ms
  29. F5 01 F5 01                                                                                         õ.õ.
  30. * Lecture, Temps: 42474 ms
  31. F5 01 F5 01                                                                                         õ.õ.
  32. * Lecture, Temps: 43480 ms
  33. F5 01 F5 01                                                                                         õ.õ.
  34. * Lecture, Temps: 44498 ms
  35. F5 01 F5 01                                                                                         õ.õ.
  36. * Lecture, Temps: 45521 ms
  37. F5 01 F5 01                                                                                         õ.õ.
  38. * Lecture, Temps: 46527 ms
  39. F5 01 F5 01                                                                                         õ.õ.
  40. * Lecture, Temps: 47546 ms
  41. F5 01 F5 01                                                                                         õ.õ.
  42. * Lecture, Temps: 48559 ms
  43. F5 01 F5 01                                                                                         õ.õ.
  44. * Lecture, Temps: 49574 ms
  45. F5 01 F5 01                                                                                         õ.õ.
  46. * Lecture, Temps: 50595 ms
  47. F5 01 F5 01                                                                                         õ.õ.
  48. * Lecture, Temps: 51413 ms
  49. 71 03                                                                                               q.
  50. * Lecture, Temps: 51609 ms
  51. F5 01 F5 01                                                                                         õ.õ.
  52. * Lecture, Temps: 52621 ms
  53. F5 01 F5 01                                                                                         õ.õ.
  54. * Lecture, Temps: 53647 ms
  55. F5 01 F5 01                                                                                         õ.õ.
  56. * Lecture, Temps: 54657 ms
  57. F5 01 F5 01                                                                                         õ.õ.
  58. * Lecture, Temps: 55682 ms
  59. F5 01 F5 01                                                                                         õ.õ.
  60. * Lecture, Temps: 56687 ms
  61. F5 01 F5 01                                                                                         õ.õ.
  62. * Lecture, Temps: 57703 ms
  63. F5 01 F5 01                                                                                         õ.õ.
  64. * Lecture, Temps: 58525 ms
  65. F5 01                                                                                               õ.
  66. * Lecture, Temps: 58730 ms
  67. F5 01                                                                                               õ.
  68. * Lecture, Temps: 59530 ms
  69. F5 01                                                                                               õ.
  70. * Lecture, Temps: 59744 ms
  71. F5 01                                                                                               õ.
  72. * Lecture, Temps: 60550 ms
  73. F5 01 F5 01                                                                                         õ.õ.
  74. * Lecture, Temps: 61565 ms
  75. F5 01 F5 01                                                                                         õ.õ.
  76. Arret du Mode Transparent sur le port COM 1


 
On a en gros 90 caractères hexadécimaux (correspondant ou non à des caractères imprimable, que l'on vois sur la colonne de droite).  
 
On remarque que pendant un certain temps, le ballast envoie 4 trames toute les 1,2 secondes : "F5 01 F5 01" la led lampe clignote en vert et la lampe chauffe...
puis le ballast envoie le code "71 03" et à ce moment l'image vidéo apparait et la lampe reste allumée, le VP est prêt, ensuite le ballast envoie  "F5 01 F5 01" indéfiniment tant qu'il tourne. A ce moment la si l'on déconnecte les optocoupleurs, le VP se coupe au bout de 3..4 secondes.
 
J'ai compilé un code en C pour faire reproduire à l'ordinateur la séquence :

Code :
  1. Fort de ces infos, j'ai créé 2 tableaux:
  2. - Un contenant les trames à envoyer
  3. - L'autre le délais en millisecondes avant d’envoyer la trame suivante.
  4. Je vous le mets ici sous la forme de pseudo code:
  5. // Codes Hexadécimaux à envoyer à la carte mère :
  6. unsigned char tmp[97]=  {0x00, 0x00, 0x70, 0xF0, 0x00, 0xF1, 0x42, 0x63,
  7.                          0xF3, 0x03, 0xF2, 0xFE, 0xF4, 0x80, 0xF6, 0x05,
  8.                          0xFA, 0x66, 0xFB, 0x80, 0x71, 0x00, 0x71, 0x01,
  9.                          0x71, 0x02, 0x71, 0x03, 0x71, 0x04, 0xF2, 0xFE,
  10.                          0x72, 0x6D, 0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01,
  11.                          0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01,
  12.                          0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01,
  13.                          0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01,
  14.                          0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01,
  15.                          0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01, 0xF5, 0x01,
  16.                          0xF5, 0x01, 0x71, 0x03, 0xF5, 0x01, 0xF5, 0x01,
  17.                          0xF5, 0x01, 0x71, 0x03, 0xF5, 0x01, 0xF5, 0x01};
  18. // Delais d'attente (mili secondes) entre chaque donnéee hexadécimales
  19. // à envoyer à la carte mère (trouvées grace au programme ASPYCOM):
  20. unsigned int tmp2[97]=  {0, 2836, 6296, 0, 0, 0, 0,
  21.                          5, 0, 0, 200, 0, 0, 0, 0,
  22.                          0, 0, 0, 0, 0, 0, 0, 0,
  23.                          0, 0, 0, 0, 0, 0, 0, 0,
  24.                          0, 0, 0, 1421, 0, 205, 0, 811,
  25.                          0, 6, 0, 1009, 0, 0, 0, 1028, 0, 0,
  26.                          0, 1006, 0, 0, 0, 1018, 0, 0,
  27.                          0, 1028, 0, 0, 0, 1028, 0, 0,
  28.                          0, 1028, 0, 0, 0, 1028, 0, 0,
  29.                          0, 1028, 0, 0, 0, 1028, 0, 0,
  30.                          0, 818, 0, 196, 0, 0, 0, 1028,
  31.                          0, 0, 0, 1028, 0, 0, 0, 1028};
  32. void main(void)
  33. {
  34.   for (int i = 0; i <= 96; i++)
  35.     {
  36.     Sleep(tmp2[i]);
  37.     ComPort1->Write(tmp + i, 1);
  38.     Form1->Caption = i;
  39.     }
  40. }

   
 
 
Verdict: et bein ça marche pas !!! :(
Ca fait comme si le ballast n'était pas la: le VP se coupe au bout de 20s après mise en rotation de la roue chromatique.  
Ensuite il ventile à fond et arrête la roue avant de refaire un cycle.
 
A noter qu'en utilisation normale, le VP démarre sans faire tourner le ventilateur. Ce dernier ne démarre qu'au bout de 20s ou plus après la mise sous tension...
 
Les trames sont visiblement envoyées correctement (je relis avec le PC les données envoyées grâce au montage avec le transistor et les deux résistances) mais Il est possible que les timmings sous Windows et l'USB soit trop aléatoire, non pas dans la génération de trames RS232, mais dans le délais entre 2 trames (j'ai constaté des écarts de parfois 10 millisecondes).
 
Il n'y a pas non plus de détecteur de lumière (lampe bien allumée dans le VP car en masquant la sortie de l'ampoule, le vp démarre quand même.
La détection de la trappe lampe est shunté également...  
 
Prochain essai: Ne pas utiliser le PC mais un microcontrolleur.
 
Le challenge : faire marcher ce truc, et l'implémenter sur Arduino (avec fonction apprentissage des trames) pour que tous vous puissiez le faire !
 
Si vous avez des remarques conseils ou commentaires allez-y !
 
Merci
 
 
Matthieu


Message édité par matthieuweb le 04-03-2015 à 12:14:52

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40215
matthieuwe​b
Bidouille forever !
Posté le 02-03-2015 à 15:38:27  profilanswer
 

Peur être d'autres infos à tirer d'ici...
 
http://www.projectionforums.com/vi [...] art#p10344


---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
mood
Crieto
Posté le 02-03-2015 à 15:38:27  profilanswer
 

n°40221
matthieuwe​b
Bidouille forever !
Posté le 04-03-2015 à 12:13:45  profilanswer
 

J'ai avancé un début de code sous Arduino :
 
1) RX de l'arduino Branché au Ballast, USB de l'Arduino branché sur le PC (avec un terminal configuré en 8bits parité even, 1 stop 1 start)  L'arduino va digérer les 150 premiers caractères provenant du ballast, et chronométrer les intervalles (à +/- la microseconde près) entre 2 trames.
2) Après avoir reçu ces 150 chars il envoie sur le TX (via l'USB) les données au PC
 
3) On reprogramme l'arduino avec les bonnes séquences à envoyer au ballast. (A faire)
 

Code :
  1. int Caractere_RX = 0;      // for incoming serial data
  2. unsigned long  Duree;      // Chronomètre (microsecondes)
  3. unsigned int   i = 0;      // Index
  4. unsigned long Tab_temps[150];
  5. unsigned char Tab_chars[150];
  6. #define ENREGISTREMENT
  7. void setup()
  8. {
  9. // Initialise la liaison série 9600 bauds 8 bits parité Even (paire) 1 Stop
  10. Serial.begin(9600, SERIAL_8E1);
  11. while (!Serial) {;} // wait for serial port to connect. Needed for Leonardo only
  12. Duree = micros(); // Démarre le chronomètre       
  13. }
  14. #ifdef ENREGISTREMENT // Mode enregistrement
  15. void loop()
  16. if (i < 150)
  17.   {
  18.   if (Serial1.available() > 0)   //Si caractères présents sur: Port série TTL (broches 0 et 1) = Ballast
  19.     {                     
  20.      Caractere_RX = Serial1.read();  // Lecture depuis: Port série TTL (broches 0 et 1) = Ballast
  21.   //  Caractere_RX = Serial.read();      // Lecture depuis: Port série USB = PC
  22.     Tab_temps[i]  = micros() - Duree;         // Calcule le temps écoulé depuis le dernier caractère recu
  23.     Duree = micros() ;             // Mémorise ce temps
  24.     Tab_chars[i] = Caractere_RX;
  25.     i++;
  26.     }
  27.   }
  28. else
  29.   {
  30.   Serial.println("\r\rDonnees recues: <INTERVALLE> (en microsecondes)   <DONNEE>" ); 
  31.   for (i = 0; i < 150; i++)
  32.     { 
  33.     Serial.print(Tab_temps[i]);
  34.     Serial.print("\t0x" );
  35.     Serial.println(Tab_chars[i], HEX);
  36.     }
  37.   Serial.println("-- FIN-- \n(Appuyez sur reset pour lancer une nouvelle acquisition...\n\n" ); 
  38.   while(1); 
  39.   }
  40. #else // MODE_EMULATEUR DE BALLAST
  41. else
  42.   { 
  43.   for (i = 0; i < 150; i++)
  44.     { 
  45.     if (Tab_temps[i] < 2000)  delayMicroseconds(Tab_temps[i]);
  46.     else                      delay(Tab_temps[i]);
  47.     Serial1.print(Tab_chars[i]);               // Ecriture vers: Port série TTL (broches 0 et 1) = Ballast
  48.     }   
  49.   }
  50. #endif 
  51. }


 
L'arduino branché sur le PC (avec un terminal) si l'on envoie des caractères depuis le PC en continu, on se rends compte que l'USB et/ou Windows introduisent une latence de 1,039 ms à 6,29 ms entre l'envoi de 2 caractères (cf sur le web fonctionnement de l'envoi des paquets de données via l'USB...). Ca pourrait expliquer mon échec, que l'Arduino va contourner: Elle va mémoriser/horodater les séquence envoyées PUIS ENSUITE seulement envoyer les datations et les caractères lut, vers le PC...
 
Etape 2 : Remplir le tableau de caractères dans l'Arduino avec les bonnes trames et timings, et rebalancer le tout à la carte mère du VP..


Message édité par matthieuweb le 04-03-2015 à 12:35:10

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40224
joyeufetar
Posté le 05-03-2015 à 15:09:35  profilanswer
 

Autant il y a des tarés, autant je crois que tu es un cran au dessus :lol:
 
Sérieusement, beau boulot.
Il n'y a pas de raison que ça ne fonctionne pas.
On sent que tu maitrises un peu ton sujet.
 
Déjà, comment as tu identifié le soucis au départ ?
Et ou as tu trouvé toutes ses infos ?
Cela peut donner des idées à certains pour faire pareil.
 
@++


---------------
Qui as dit que quand on savait pas faire, on faisait pas ???
M'en fou, moi je fais quand même :d
n°40225
Morb@ck
Posté le 05-03-2015 à 17:25:37  profilanswer
 

J'avoue avoir décroché.. bravo quand même ! Vivement que ça fonctionne.

n°40226
lrnt280
L'apprentissage par l'échec !
Posté le 06-03-2015 à 14:10:56  profilanswer
 

'tain, je suis scotché moi aussi, j'y comprendrais qu'un tiers de la moitié du binz que je m'estimerai heureux et je pourrais en bidouiller des trucs (plutôt à l'arrache d'habitude).
 
je souhaite sincèrement que tu arrive à faire péter ce VP  :bounce:  
 
bravo Mat  ;)


---------------
oh hisse (int.)
1. Cri poussé par des personnes faisant ensemble un effort physique important pour coordonner cet effort (frapper un clavier c'est physique).
n°40227
matthieuwe​b
Bidouille forever !
Posté le 06-03-2015 à 14:43:47  profilanswer
 

Salut les gars,
 
Merci pour vos encouragements. Ça fait plaisir!!
 
Ouais.. maintenant que la maison est construite, j'ai un peu plus le temps ;)
 
Pas facile d'expliquer ma démarche simplement, j'en ai bien conscience
donc n'hésitez SURTOUT pas à me poser des questions si vous avec des questions. => Ça aidera à  enrichir le topic...
 
Pour commencer:  
 
La panne initiale du VP..
 
Symptômes : Rien ne se passe à la mise sous tension, pas une led qui s'allume, rien !
=> Forte probabilité que l'alim soit HS, en effet l'électronique soumises aux tensions élevées 230V et au courants important adore tomber en panne, alors que la carte mère se contente de traiter des tensions/courants faibles.
 
Coup de chance: J'ai vu physiquement qu'un circuit dans l'alim avait un trou ! Donc la pas de doute => HS. En regardant sur le web sa datasheet (doc du constructeur) on peu avoir une vague idée du schéma utilisé (car les fabricants utilisent souvent les schémas d'application typique des constructeurs de composants fournis dans les datasheets).
 
Regardez sur mon site web, en bas ma signature... section électronique, je donne des pistes pour réparer des appareils (en évitant de les mettre en marche si possible, ce qui évite de se faire griller ;))
 
Bon ça ne marchait pas mieux, et comme les tensions de sorties sont indiquées sur la carte alim, il m'a juste suffit de suivre les fils pour voir quelles étaient les entrées d'alim sur la carte mère, sachant que de 99.9% des cas la masse est commune et reliée au châssis de l'appareil ou du moins aux châssis des connecteurs audio, vidéo, etc...).
 
La suite prochainement !
 
Matt


Message édité par matthieuweb le 06-03-2015 à 17:47:12

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40232
matthieuwe​b
Bidouille forever !
Posté le 09-03-2015 à 09:02:14  profilanswer
 

Salut a tous !

 

Bon, ne vous réjouissez pas trop vite, pour le moment, c'est  pas encore gagné ! :/

 

MAIS:

 

En utilisant une Arduino DUE que l'on m'a prêté, j'ai pus faire une acquisition plus précise (à 15 µ secondes près!) des temps d'arrivées des trames séries.
Je ne connaissais pas cette carte il y a encore 5 jours, c'est facile à prendre en main !

 

L'Arduino DUE à l'avantage de tourner vite (84 MHz) et d'avoir 4 ports série indépendants:

 

Attention: cette carte fonctionne en 3V3 !

 

"Serial"   : (USB et en parallèle, les pattes 0 & 1 en TTL 3V)
"Serial1" : (les pattes 18 & 19 en TTL 3V)
"Serial2" : (les pattes 16 & 17 en TTL 3V)
"Serial3" : (les pattes 14 & 15 en TTL 3V)

 

J'ai donc repris mon code précédent, que j'ai un peu amélioré.

 

- J'ai connecté sur Serial1 (patte RX) les donnes issues du ballast (toujours via mon montage à transistor).
- J'ai connecté sur Serial2 (patte RX) les donnes issues de la carte mère (connexion directe, au + de la led de l'optocoupleur).
- J'ai connecté la carte au port USB du PC (Qui correspond à Serial).

 

Le programme attends (en temps réel) les 150 premières trames issues du ballast, et celles issues de la carte mère ensuite seulement il balance le résultat au PC via l'USB.

 

Résultat: l'acquisition est très rapide, et la lenteur de l'USB - liaison série PC - et surtout de Windows... n'impacte pas sur la capture des trames faites précédemment.

 
Code :
  1. unsigned int   i_ballast    = 0;         // Index : Nb caractères provenant du ballast
  2. unsigned int   i_carte_mere = 0;      // Index : Nb caractères provenant de la carte mère
  3. unsigned long Tab_chars_ballast    [150][2] = {0, };      // contiendra les caractères et leur date d'arrivée provenant du ballast du VP
  4. unsigned long Tab_chars_carte_mere [150][2] = {0, };   // contiendra les caractères et leur date d'arrivée provenant de la carte mère du VP
  5. void setup()  // Config de l'Arduino
  6. {
  7. // Initialise la liaison série USB entre le PC et l'arduino
  8. Serial.begin(9600);
  9.  
  10. // Initialise la liaison série 9600 bauds 8 bits parité Even (paire) 1 Stop entre l'arduino et le ballast
  11. Serial1.begin(9600, SERIAL_8E1);
  12. // Initialise la liaison série 9600 bauds 8 bits parité Even (paire) 1 Stop entre l'arduino et la carte mère
  13. Serial2.begin(9600, SERIAL_8E1);
  14. Serial.println("\r\rPret a recevoir des donnees..." );   // Informe que l'on est pret !
  15. }
  16. void loop()  // Programme principal (le main() si vous préférez)
  17. {
  18. if ((i_ballast < 150) && (i_carte_mere < 150))  // On stoppe quand 150 données sont reçues soit du ballast soit de la carte mère)
  19.   {
  20.   while (Serial1.available() > 0)   // Si un ou des caractère(s) présent(s) sur: Port série 1 TTL (broches 18 et 19) = branché sur ballast du VP
  21.     {                     
  22.     Tab_chars_ballast [i_ballast][0] = Serial1.read();   // Lecture du caractère, stockage dans le tableau Tab_chars_ballast
  23.     Tab_chars_ballast [i_ballast][1] = micros();          // Ajoute la date de réception (nb de microsecondes écoulées depuis mise sous tension de l'arduino)
  24. //    Serial.print(Tab_chars_ballast[i_ballast][0], HEX);  Serial.print(" " );  Serial.println(Tab_chars_ballast [i_ballast][1]);   // Pour debug... (a enlever)
  25.     i_ballast++;  // Avance d'une case dans le tableau Tab_chars_ballast
  26.     }
  27.   while (Serial2.available() > 0)   // Si un ou des caractère(s) présent(s) sur: Port série 2 TTL (broches 16 et 17)  = branché sur carte mère du VP
  28.     {                     
  29.     Tab_chars_carte_mere [i_carte_mere][0] = Serial2.read();   // Lecture du caractère, stockage dans le tableau Tab_chars_carte_mere
  30.     Tab_chars_carte_mere [i_carte_mere][1] = micros();          // Ajoute la date de réception (nb de microsecondes écoulées depuis mise sous tension de l'arduino)
  31. //   Serial.print(Tab_chars_carte_mere[i_carte_mere][0], HEX);  Serial.print(" " );  Serial.println(Tab_chars_carte_mere [i_carte_mere][1]);   // pour debug... (a enlever)
  32.     i_carte_mere++;  // Avance d'une case dans le tableau Tab_chars_carte_mere
  33.     }
  34.   }
  35. else // Fin de l'acquisition: on envoie les données récoltées au PC:
  36.   {
  37.   Serial.println(" " ); 
  38.   Serial.print("\r\nDonnees issues du ballast: <DONNEE> <DATE en microsecondes> :" ); 
  39.   for (int i = 0; i < 150; i++)
  40.     { 
  41.     Serial.print("\r\n0x" );
  42.     Serial.print(Tab_chars_ballast [i][0], HEX);
  43.     Serial.print("\t" );
  44.     Serial.print(Tab_chars_ballast [i][1]);
  45.     }
  46.  
  47.   Serial.println(" " ); 
  48.   Serial.print("\r\nDonnees issues de la carte mere: <DONNEE> <DATE en microsecondes> :" ); 
  49.   for (int i = 0; i < 150; i++)
  50.     {
  51.     Serial.print("\r\n0x" ); 
  52.     Serial.print(Tab_chars_carte_mere [i][0], HEX);
  53.     Serial.print("\t" );
  54.     Serial.print(Tab_chars_carte_mere [i][1]);
  55.     }
  56.    
  57.   Serial.println("\r\n-- FIN-- \n(Appuyez sur reset pour lancer une nouvelle acquisition...)\n\n" ); 
  58.   while(1);   // Attente infinie...
  59.   }
  60. }
 

Et voici les trames reçues:

 
Code :
  1. Pret a recevoir des donnees...
  2. Donnees issues du ballast: <DONNEE> <DATE en microsecondes> :
  3. 0x0 3102
  4. 0x0 2894564
  5. 0x70 12376101
  6. 0xF0 12385526
  7. 0x0 12386673
  8. 0xF1 12393404
  9. 0x42 12394541
  10. 0x63 12395688
  11. 0xF3 12401926
  12. 0x4 12403064
  13. 0xF2 12409201
  14. 0xFE 12410344
  15. 0xF4 12416461
  16. 0x80 12417598
  17. 0xF6 12423591
  18. 0x5 12424735
  19. 0xFA 12430741
  20. 0x66 12431878
  21. 0xFB 12437884
  22. 0x80 12439022
  23. 0x71 12450944
  24. 0x3 12452089
  25. 0x71 12461161
  26. 0x0 12462298
  27. 0x71 12471250
  28. 0x1 12472387
  29. 0x71 12481306
  30. 0x2 12482449
  31. 0x71 12491264
  32. 0x3 12492408
  33. 0x71 12501343
  34. 0x4 12502483
  35. 0xF2 12505772
  36. 0xFE 12506916
  37. 0x72 12514617
  38. 0x6D 12515760
  39. 0xF5 13830043
  40. 0x1 13831180
  41. 0xF5 13860443
  42. 0x1 13861587
  43. 0xF5 14830192
  44. 0x1 14831329
  45. 0xF5 14860319
  46. 0x1 14861456
  47. 0xF5 15830162
  48. 0x1 15831309
  49. 0xF5 15860194
  50. 0x1 15861331
  51. 0xF5 16830158
  52. 0x1 16831295
  53. 0xF5 16860043
  54. 0x1 16861180
  55. 0xF5 17830124
  56. 0x1 17831268
  57. 0xF5 17859926
  58. 0x1 17861068
  59. 0xF5 18830123
  60. 0x1 18831260
  61. 0xF5 18859775
  62. 0x1 18860919
  63. 0xF5 19830132
  64. 0x1 19831272
  65. 0xF5 19859657
  66. 0x1 19860801
  67. 0xF5 20830111
  68. 0x1 20831258
  69. 0xF5 20859656
  70. 0x1 20860800
  71. 0xF5 21830195
  72. 0x1 21831336
  73. 0xF5 21859616
  74. 0x1 21860753
  75. 0xF5 22830286
  76. 0x1 22831423
  77. 0xF5 22860083
  78. 0x1 22861227
  79. 0xF5 23840004
  80. 0x1 23841141
  81. 0xF5 23869584
  82. 0x1 23870721
  83. 0xF5 24840022
  84. 0x1 24841166
  85. 0xF5 24871092
  86. 0x1 24872236
  87. 0xF5 25841255
  88. 0x1 25842398
  89. 0xF5 25869601
  90. 0x1 25870738
  91. 0xF5 26841234
  92. 0x1 26842377
  93. 0xF5 26869587
  94. 0x1 26870727
  95. 0xF5 27840540
  96. 0x1 27841677
  97. 0xF5 27869612
  98. 0x1 27870755
  99. 0xF5 28840415
  100. 0x1 28841559
  101. 0xF5 28869630
  102. 0x1 28870774
  103. 0xF5 29840362
  104. 0x1 29841506
  105. 0xF5 29869479
  106. 0x1 29870626
  107. 0xF5 30840348
  108. 0x1 30841492
  109. 0xF5 30869877
  110. 0x1 30871021
  111. 0xF5 31840099
  112. 0x1 31841236
  113. 0xF5 31869608
  114. 0x1 31870745
  115. 0xF5 32840157
  116. 0x1 32841300
  117. 0xF5 32869894
  118. 0x1 32871032
  119. 0xF5 33840002
  120. 0x1 33841142
  121. 0xF5 33869775
  122. 0x1 33870918
  123. 0xF5 34840128
  124. 0x1 34841272
  125. 0xF5 34870555
  126. 0x1 34871692
  127. 0xF5 35839868
  128. 0x1 35841013
  129. 0xF5 35870299
  130. 0x1 35871440
  131. 0xF5 36840394
  132. 0x1 36841537
  133. 0xF5 36869733
  134. 0x1 36870876
  135. 0xF5 37840301
  136. 0x1 37841438
  137. 0xF5 37869585
  138. 0x1 37870722
  139. 0xF5 38840196
  140. 0x1 38841333
  141. 0xF5 38871259
  142. 0x1 38872396
  143. 0xF5 39839995
  144. 0x1 39841133
  145. 0xF5 39869348
  146. 0x1 39870485
  147. 0xF5 40849813
  148. 0x1 40850950
  149. 0xF5 40879773
  150. 0x1 40880911
  151. 0xF5 41850117
  152. 0x1 41851264
  153. Donnees issues de la carte mere: <DONNEES> <DATE en microsecondes> :
  154. 0x0 3104
  155. 0x0 0
  156. 0x0 0
  157. 0x0 0
  158. 0x0 0
  159. [...]
  160. 0x0 0
  161. -- FIN--
  162. (Appuyez sur reset pour lancer une nouvelle acquisition...)
 

Problème: la carte mère ne semble rien envoyer du tout !

 

Attention, les temps affichés sont le nombre de microsecondes depuis la mise sous tension de la carte arduino due.

 

En regardant le connecteur blanc à 5 pattes entre la carte mère et le ballast (en bas à gauche sur l'image) :

 

http://matthieu.weber.free.fr/autre/optoma/IMG_20150308_170514.jpg
Coté carte mère, numéroté de haut en bas :  

 

1 - Données issues du ballast (Relié au collecteur ouvert du phototransistor de l'optocoupleur, dirigé vers la carte mère (celui du haut sur le ballast))
2 - Masse (GND) (Relié à l'émetteur du phototransistor de l'optocoupleur, dirigé vers la carte mère (celui du haut sur le ballast))
3 - + 5V fixe, (Relié au plus des diodes de chacun des 2 autres optocoupleurs)
4 - + 5V (lus) (Relié via une résistance de 100 ohms, au moins de l'optocoupleur du milieu sur le ballast)
5 - + 5V (lus) (Relié via une résistance de 100 ohms, au moins de l'optocoupleur du bas sur le ballast) (Sur un autre site, j'ai vus que c'était les données allant au VP, mais je ne vois riens arriver depuis la carte mère).

 

Coté ballast :
http://matthieu.weber.free.fr/autre/optoma/opto.jpg

 

Sur la patte 4, à l'oscilloscope, lorsque le VP fonctionne en régime établit, on mesure +5v avec une descente à 3v2 durant 200 µs, toute les 100 ms.
(Syncro ? Aprioris ça pourrait être un signal d'horloge allant au ballast.)

 

Montage avec la DUE:
http://matthieu.weber.free.fr/autre/optoma/IMG_20150308_170503.jpg
http://matthieu.weber.free.fr/autre/optoma/IMG_20150308_170524.jpg

 

Donc a tester:

 

Détecter avec l'Arduino le passage à +5V d'un signal de la carte mère pour synchroniser le début de l'émission des trames.


Message édité par matthieuweb le 09-03-2015 à 10:16:59

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40240
matthieuwe​b
Bidouille forever !
Posté le 11-03-2015 à 09:47:43  profilanswer
 

Arf !
 
Je sèche :/
 
J'ai synchronisé l’acquisition et la reproduction des trames RS232 allant du ballast à la carte-mère via une patte de l'arduino branché sur le +5V (=> syncho au top démarrage du VP).
 
Rien n'y fait!  :(:(
 
Autant Osram fait des ballast qui causent en RS, où il y a un véritable échange entre CM et ballast qui ont été émulé avec succès par plusieurs personnes (cf. le lien externe, plus haut au milieu de cette page), autant ici, avec un ballast Philips la carte mère n'envoie rien, à part des variations de tension sur les 2 optocoupleurs allant au ballast...
 
Mais même en synchronisant tout parfaitement, et même en laissant les optocoupleurs du ballast branchés à la CM, le VP refuse de passer la phase d'allumage si le ballast n'est pas alimenté (et donc avec la lampe d'origine qui s'allume).
 
N'ayant ni le schéma du ballast Phillips EUC 180d, ni celui du VP (le service manual n'apporte rien à ce niveau), je suis coincé !. :(


Message édité par matthieuweb le 11-03-2015 à 09:49:41

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40256
matthieuwe​b
Bidouille forever !
Posté le 13-03-2015 à 18:54:56  profilanswer
 

Bon bein,
 
GAME OVER !! :(
 
A une énième mise en route la carte mère à fini par cramer... chipset contrôlant le DLP qui est bouillant...
 
Il faut dire que je le mettait en route en mettant en marche mon alim de labo qui n'était surement pas bien stabilisé les premières millisecondes de fonctionnement, bref c'est MORT...
 
J'ai donc à vendre :
 
HD600X-LV
-----------
 
- Une roue chromatique,  
- Une lampe (821 heures d'utilisées)  
- Le ballast
- Toute l'optique  
- La puce DMD (je ne peux pas la garantir fonctionnelle après ce qui c'est passé)
- La télécommande, le boitier
 
Matt
 
 


---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
mood
Crieto
Posté le 13-03-2015 à 18:54:56  profilanswer
 

n°40268
Morb@ck
Posté le 17-03-2015 à 14:11:59  profilanswer
 

ha merde.. les boules après tout ce décorticage..

n°40270
matthieuwe​b
Bidouille forever !
Posté le 18-03-2015 à 15:29:40  profilanswer
 

Ouais, c'est la vie !  :ange:  
 
J’espère que ça servira à d'autre, je pense que c'est la bonne approche...
 

Citation :

On remarque que pendant un certain temps, le ballast envoie 4 trames toute les 1,2 secondes : "F5 01 F5 01" la led lampe clignote en vert et la lampe chauffe...
puis le ballast envoie le code "71 03" et à ce moment l'image vidéo apparait et la lampe reste allumée


 
Dans les dernières captures de données je n'ai pas revu cette séquence 0x71 0x03... à mon avis, ajouter cette séquence dans mon programme final aurait peut être réglé le problème, mais l'électronique à cramée avant :(  :fou:


Message édité par matthieuweb le 18-03-2015 à 15:30:44

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40287
joyeufetar
Posté le 07-04-2015 à 15:25:50  profilanswer
 

Salut,
 
Vraiment dommage d'en arriver la après tout ce taf...
Es tu certain que le soucis venait uniquement de l'alim et des données transmises ?


---------------
Qui as dit que quand on savait pas faire, on faisait pas ???
M'en fou, moi je fais quand même :d
n°40288
matthieuwe​b
Bidouille forever !
Posté le 08-04-2015 à 08:37:59  profilanswer
 

Salut Joyeufetar,

 

Bah, c'est pas pour rien, je me suis bien amusé :D ...

 

et je pense que c'est la démarche à suivre pour tout ballast causant par protocole rs232...

 

Apparemment, Osram (la 2eme marque avec Phillips à faire ce genre de chose) décrit son protocole, qui est bien du RS232 bidirectionnel (classique), ça parait plus logique que cette histoire avec Phillips d'horloge + synchro venant de la carte mère, avec un retour en RS232 (Phillips utilise un truc un peu hybride... et pas documenté).

 
Citation :

Es tu certain que le soucis venait uniquement de l'alim et des données transmises ?

 

Avec le ballast d'origine, et en fournissant +300V +12V et +5V tout marchait impec...

 


Message édité par matthieuweb le 08-04-2015 à 08:39:35

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40289
lrnt280
L'apprentissage par l'échec !
Posté le 09-04-2015 à 15:56:36  profilanswer
 

Et ba moi je dis chapeau, même si je plane à 15 milles en lisant tout ceci, on aurait évidement souhaité voir le résultat final projeté, mais tout ça est enrichissant  :D  
je sais à qui m'adresser pour un quelconque soucis électronique maintenant  :bounce:  
belle tentative Matt
 
 :hello:


---------------
oh hisse (int.)
1. Cri poussé par des personnes faisant ensemble un effort physique important pour coordonner cet effort (frapper un clavier c'est physique).
mood
Crieto
Posté le 09-04-2015 à 15:56:36  profilanswer
 

n°40290
matthieuwe​b
Bidouille forever !
Posté le 09-04-2015 à 17:05:29  profilanswer
 

Merci :D


---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40602
matthieuwe​b
Bidouille forever !
Posté le 01-12-2016 à 15:04:08  profilanswer
 

Salut tout le monde !

 

Petite update pour vous signaler que le cramage de la carte mère (voir 6 posts plus tôt) venait en fait de mon alimentation de laboratoire qui avait un souci, le problème est depuis réglé, et j'ai acheté un autre VP Optoma HS ce qui m'a permis d'en faire un fonctionnel avec les 2

 

Et en plus j'ai 2 lampes en bon état, que j'utilise depuis 2015 :)


Message édité par matthieuweb le 01-12-2016 à 15:04:50

---------------
Elec, Info, voyages polaires, bidouilles, écologie, maison BBC... http://matthieu.weber.free.fr
Finalement la plus grande bêtise de l'homme c'est qu'il se croit intelligent !
n°40603
allinside
All In Box=Tout dans une boîte
Posté le 01-12-2016 à 16:12:22  profilanswer
 

Cool,
Show must go on
Bravo


---------------
Le Site | Le Forum | Facebook
Allinbox = All In Box = Tout dans une boîte

Aller à :
Ajouter une réponse
   FORUM Allinbox » Vidéoprojecteurs commerciaux et modding » Autres »

[TUTO] Shunt ballast intelligent (VP moderne)