[Thomson] Vidéo avec son en streaming
Modérateurs : Papy.G, fneck, Carl
Re: [Thomson] Vidéo avec son en streaming
Quand l'Arduino et le MO5 sont "chauds" (deux heures de fonctionnement) on peut enlever la résistance, l'erreur disparait. A comparer avec la copie d'écran deux posts plus haut, réalisée exactement dans les mêmes conditions mais quand le matériel venait tout juste d'être mis sous tension. Le bit 6 était alors à 1 avant le début de la boucle. A chaud le bit 6 reste à 0. Pourquoi ?
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] Vidéo avec son en streaming
On voit que ca oscille ente 0 et 4.8V. Je n'arrive pas bien à estimer la période, mais elle semble bien précise: je compte 10 periodes par division, soit une période de 100µs (10khz).
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] Vidéo avec son en streaming
La période mesurée est exactement 120 µs : 2x60 en général et 64+56 en fin de secteur. De ce côté il n'y a pas de surprise, c'est cohérent avec les cycles du 6809 et conforme à la mesure de l'analyseur logique.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] Vidéo avec son en streaming
D'après la datasheet du 6821, CA2 est par défaut en entrée, et reste en entrée tant que le bit 5 de CRA est à zéro. A priori ce bit est toujours à zéro, donc CA2 est en entrée avec une résistance de pull-up.
Le bit de synchronisation (b6 du PORTB) est relié directement à CA2. Si PB6 est en sortie et à zéro, le bit de synchronisation est à zéro. Mais il y a deux autres cas de figure :
1) Si à l'initialisation de l'ordinateur PB6 est en lecture, sa résistance de pull-up plus celle de CA2 le mettent à 1.
2) S'il est en lecture et à 1, quand la procédure d'initialisation du port PB le met en écriture, passe-t-il à 0 ou reste-t-il à 1 ?
C'est probablement dans ces subtilités qu'il faut chercher l'origine du problème. Je vois une solution possible : initialiser le port en sortie avec PB6 forcé à zéro, puis lancer le programme Arduino, puis lancer le programme Thomson. Je vais faire des tests en ce sens, mais ce n'est pas facile car l'erreur est aléatoire, il est donc difficile de savoir si elle est corrigée ou pas.
[Edit 18:30]
J'ai modifié le programme assembleur SDANIM7 pour améliorer l'initialisation des ports et la rendre indépendante du reste du programme. Le programme Basic de lancement appelle d'abord l'initialisation des ports, puis demande d'initialiser l'Arduino et d'appuyer sur une touche, et enfin lance l'affichage de la vidéo. Ainsi le bit de synchronisation est bien à zéro au début, et l'Arduino attend la réception du premier bit à 1 pour commencer la boucle.
Les premiers tests sans la résistance de 1K ont tous bien fonctionné, mais le caractère aléatoire de l'ancienne erreur me rendent prudent. J'attends quelques jours de tests intensifs pour considérer que la modification a bien résolu le problème.
Le bit de synchronisation (b6 du PORTB) est relié directement à CA2. Si PB6 est en sortie et à zéro, le bit de synchronisation est à zéro. Mais il y a deux autres cas de figure :
1) Si à l'initialisation de l'ordinateur PB6 est en lecture, sa résistance de pull-up plus celle de CA2 le mettent à 1.
2) S'il est en lecture et à 1, quand la procédure d'initialisation du port PB le met en écriture, passe-t-il à 0 ou reste-t-il à 1 ?
C'est probablement dans ces subtilités qu'il faut chercher l'origine du problème. Je vois une solution possible : initialiser le port en sortie avec PB6 forcé à zéro, puis lancer le programme Arduino, puis lancer le programme Thomson. Je vais faire des tests en ce sens, mais ce n'est pas facile car l'erreur est aléatoire, il est donc difficile de savoir si elle est corrigée ou pas.
Code : Tout sélectionner
* init ports d'entree/sortie
CLRA A=$00
CLRB B=$00
STD <$CE selectionne DDRA et DDRB
LDB #$7F B=$7F
STD <$CC PA b0-7 en entree, PB b0-6 en sortie
ORA #$04 set b2
STA <$CE selectionne PORTA
STA <$CF selectionne PORTB
J'ai modifié le programme assembleur SDANIM7 pour améliorer l'initialisation des ports et la rendre indépendante du reste du programme. Le programme Basic de lancement appelle d'abord l'initialisation des ports, puis demande d'initialiser l'Arduino et d'appuyer sur une touche, et enfin lance l'affichage de la vidéo. Ainsi le bit de synchronisation est bien à zéro au début, et l'Arduino attend la réception du premier bit à 1 pour commencer la boucle.
Les premiers tests sans la résistance de 1K ont tous bien fonctionné, mais le caractère aléatoire de l'ancienne erreur me rendent prudent. J'attends quelques jours de tests intensifs pour considérer que la modification a bien résolu le problème.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] Vidéo avec son en streaming
0
(Encore un coup du téléphone mobile qui reçoit un SMS et fait réagit tout ce qui ressemble à une antenne à coté?)
En effet.. Je pensais que tu avais capturé analogiquement les oscillation que tu avais trouvé numériquement avec l'analyseur logique (http://forum.system-cfg.com/viewtopic.p ... 62#p106862). Pour l'instant tu n'as donc plus ces fameuses oscillations ?Daniel a écrit :La période mesurée est exactement 120 µs : 2x60 en général et 64+56 en fin de secteur. De ce côté il n'y a pas de surprise, c'est cohérent avec les cycles du 6809 et conforme à la mesure de l'analyseur logique.
(Encore un coup du téléphone mobile qui reçoit un SMS et fait réagit tout ce qui ressemble à une antenne à coté?)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] Vidéo avec son en streaming
Depuis l'arrivée de l'oscilloscope je doute de plus en plus de l'explication par des parasites. A mon avis l'envoi du bit 1 intempestif se produit avant ou pendant l'initialisation des ports du 6821. Je ne comprends pas exactement le mécanisme, ni la nature apparemment aléatoire du phénomène, mais je suis de plus en plus persuadé de cette origine.
En initialisant les ports d'abord, l'Arduino ensuite, j'ai pu enlever la résistance de pull-down et rétablir l'alimentation 5V normale sur l'entrée VCC. Depuis deux heures j'ai fait de nombreux tests, à chaud et à froid, sans jamais reproduire l'erreur. Je vais poursuivre les tests, à la fois sur MO5 et sur TO8, pendant deux ou trois jours, avant de conclure définitivement.
Voici le nouveau programme Basic, pour ceux qui veulent essayer. Vous remarquerez qu'il y a maintenant deux ayants droits, car j'ai écrit quelques lignes de code supplémentaire
En initialisant les ports d'abord, l'Arduino ensuite, j'ai pu enlever la résistance de pull-down et rétablir l'alimentation 5V normale sur l'entrée VCC. Depuis deux heures j'ai fait de nombreux tests, à chaud et à froid, sans jamais reproduire l'erreur. Je vais poursuivre les tests, à la fois sur MO5 et sur TO8, pendant deux ou trois jours, avant de conclure définitivement.
Voici le nouveau programme Basic, pour ceux qui veulent essayer. Vous remarquerez qu'il y a maintenant deux ayants droits, car j'ai écrit quelques lignes de code supplémentaire
Code : Tout sélectionner
1 'SDANIM7 2015.08.21
2 'Samuel Devulder - Daniel Coulom
10 CLEAR,&H8FFF
20 COLOR7,0:SCREEN,,0:CLS:LOCATE0,0,0
30 READ A$:IF LEN(A$)=4 THEN A=VAL("&H"+A$):GOTO 30
40 IF A$="**" THEN EXEC A ELSE POKE A,VAL("&H"+A$):A=A+1:GOTO 30
50 PRINT"SDANIM7 2015.08.21
51 PRINT"Initialisez l'Arduino"
52 PRINT"puis appuyez sur une touche...";
60 A$=INPUT$(1):CLS
70 FORI=0TO199:PSET(0,I),2^(I MOD3):PSET(0,I),-1:NEXT
80 EXEC A
90 DATA 9000
100 DATA 34,7F,1A,50,8E,1F,40,E6
101 DATA 84,63,84,E1,84,27,0A,63
102 DATA 84,CE,A7,C0,8E,00,00,20
103 DATA 06,CE,E7,C3,8E,40,00,BF
104 DATA 90,9A,BF,90,AE,1F,30,1F
105 DATA 8B,7D,90,45,26,18,4F,5F
106 DATA DD,CE,C6,7F,DD,CC,8A,04
107 DATA 97,CE,97,CF,C6,1F,D7,CD
108 DATA 7C,90,45,20,35,00,A6,C4
109 DATA 84,FE,A7,C4,86,C8,A7,E2
110 DATA A6,80,C6,27,A7,80,5A,26
111 DATA FB,A6,E0,4A,26,F0,6C,C4
112 DATA CE,90,B8,8E,0C,60,A6,C8
113 DATA D4,A7,C0,30,1F,26,F7,86
114 DATA 7E,A7,C0,CC,90,7C,ED,C4
115 DATA 20,12,35,FF,96,CC,97,CD
116 DATA 34,32,35,32,34,36,35,36
117 DATA 21,F0,2C,EE,96,CC,97,CD
118 DATA D6,CC,27,05,3A,96,CC,20
119 DATA 07,8E,40,00,96,CC,20,00
120 DATA D6,CC,ED,84,D6,CC,27,05
121 DATA 3A,96,CC,20,07,8E,40,00
122 DATA 96,CC,20,00,D6,CC,ED,84
200 DATA 9000,**
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] Vidéo avec son en streaming
Il y a donc deux appels à $9000 ?
Je me demande si on ne pourrait pas profiter de l'attente de l'appui sur une touche pour choisir le mode couleur ou N&B. Le mode N&B est bien adapté à certaines vidéos.
Je me demande si on ne pourrait pas profiter de l'attente de l'appui sur une touche pour choisir le mode couleur ou N&B. Le mode N&B est bien adapté à certaines vidéos.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] Vidéo avec son en streaming
Oui, il y a deux appels à la même adresse. C'est subtil n'est-ce pas ?
La première fois le programme initialise les ports, positionne un flag et retourne au Basic.
La deuxième fois le flag est positionné, le programme saute l'initialisation des ports et lance la vidéo.
Dans l'initialisation des ports j'ai forcé le PORTB en sortie à $1F, il y a donc la certitude d'avoir le bit 6 à zéro.
[Edit 22/08/2016]
Ce matin j'ai ajouté l'option noir et blanc dans le programme Basic (voir ci-dessous).
Les nouveaux tests avec le MO5 "froid" ont tous bien fonctionné. La correction d'hier semble efficace.
La première fois le programme initialise les ports, positionne un flag et retourne au Basic.
La deuxième fois le flag est positionné, le programme saute l'initialisation des ports et lance la vidéo.
Code : Tout sélectionner
/**************************************************\
* S D A N I M 7 *
* (c) 2015 - Samuel Devulder, Daniel Coulom *
* http://dcmoto.free.fr/ *
* http://forum.system-cfg.com/ *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune garantie et *
* sans engager la responsabilité de l'auteur. *
* Vous pouvez l' utiliser, le modifier et le *
* diffuser librement, en conservant cette licence *
* et les références des auteurs dans toutes les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/
* Ce programme affiche une vidéo avec son à 16667 Hz.
* Les données sont lues sur carte SD par un Arduino
* et envoyées à l'ordinateur Thomson par les ports
* manettes à la vitesse de 116667 octets par seconde.
* Pour chaque echantillon de son il y a 6 octets
* d'image, soit trois fois plus que SDANIM3 et six
* fois plus que SDANIM2.
/**************************************************\
* Version 2015.08.21 *
\**************************************************/
* Historique
* 2015.08.21 retour au Basic apres initialisation des ports
* 2015.07.12 premiere version operationnelle
ORG $9000
*------------------------------------------------------
* Point d'entree
*------------------------------------------------------
INI
PSHS U,Y,X,DP,B,A,CC empile les registres
ORCC #$50 masque les interruptions
LDX #$1F40 adresse pour test RAM ou ROM
LDB ,X lecture adresse X
COM ,X tente de modifier adresse X
CMPB ,X test modification adresse X
BEQ INIT1 pas de difference -> TO
COM ,X retablissement adresse X
LDU #$A7C0 port A du PIA systeme
LDX #$0000 adresse dans ecran
BRA INIT2 suite des initialisations
INIT1
LDU #$E7C3 port A du PIA systeme
LDX #$4000 adresse dans ecran
INIT2
STX NEWPICa+1 adresse debut ecran
STX NEWPICb+1 adresse debut ecran
TFR U,D extraction base $E7/$A7
TFR A,DP initialisation DP
TST PORTS test ports initialises
BNE LINE0 oui : suite du programme
*------------------------------------------------------
* INITIALISATION PORTS D'ENTREE/SORTIE
* ET RETOUR AU BASIC
*------------------------------------------------------
CLRA A=$00
CLRB B=$00
STD <$CE selectionne DDRA et DDRB
LDB #$7F B=$7F
STD <$CC PA b0-7 en entree, PB b0-6 en sortie
ORA #$04 set b2
STA <$CE selectionne PORTA
STA <$CF selectionne PORTB
LDB #$1F valeur d'initialisation PORTB
STB <$CD b6=0, CNA=$1F
INC PORTS set flag initialisation
BRA SORTIE retour au Basic
PORTS
FCB $00 flag d'initialisation des ports
*------------------------------------------------------
* recopie des attributs couleurs
*------------------------------------------------------
LINE0
LDA ,U port A du PIA systeme
ANDA #254 clear bit 0 (couleur)
STA ,U passage en video forme
LDA #200 200 lignes
LINE1
STA ,-S sauvegarde compteur ligne
LDA ,X+ lecture 1er octet ligne
LDB #39 compteur colonne
LINE2
STA ,X+ ecriture colonne suivante
DECB decrementation cpt col.
BNE LINE2 toutes les colonnes faites ?
LDA ,S+ recup compteur ligne
DECA une ligne de faite
BNE LINE1 finie ?
INC ,U set bit 0 (forme)
* Mise en place du block play 73 fois
LDU #FINPLAY7 fin block PLAY 7
LDX #72*(FINPLAY7-PLAY7)
RECOPIE
LDA <(PLAY7-FINPLAY7),U
STA ,U+
LEAX -1,X
BNE RECOPIE
* mise en place "JMP FINBLOC"
LDA #$7E "JMP"
STA ,U+
LDD #FINBLOC
STD ,U
*------------------------------------------------------
* JOUE LA VIDEO ET LA MUSIQUE
* Boucle de 60 cycles = 16666.67 Hz
*------------------------------------------------------
BRA PLAY7
*------------------------------------------------------
* RETOUR AU BASIC
*------------------------------------------------------
SORTIE
PULS CC,A,B,DP,X,Y,U,PC
* retour a l'assembleur
* SWI
* fin de bloc 512: son + attente (5+56 cycles)
FINBLOC
* echantillon son (8 cycles)
LDA <$CC (4) lecture echantillon son avec B6 alternant
STA <$CD (4) joue le son et acknowledge
* compensation, lecture inter-bloc (45)
PSHS X,Y,A (10)
PULS X,Y,A (10)
PSHS X,Y,D (11)
PULS X,Y,D (11)
BRN SORTIE (3)
* rebouclage (7 cycles)
BGE SORTIE (3) sortie?
*------------------------------------------------------
* lecture d'un bloc de 7 octets 8+(17+9)*2=60 cycles
*
* <son> <depA> <vidA1> <vidA2> <depB> <vidB1> <vidB2>
*------------------------------------------------------
PLAY7
* echantillon son (8 cycles)
LDA <$CC (4) lecture echantillon son avec B6 alternant
STA <$CD (4) joue le son et acknowledge
* lecture octet depl + video1 = 17 cycles
LDB <$CC (4) lecture octet deplacement
BEQ NEWPICa (3) nouvelle image
ABX (3) ajout de l'increment
LDA <$CC (4) lecture octet video1
BRA PLAYa (3) octet video
* retour debut ecran + video1 = 10 cycle
NEWPICa
LDX #$4000 (3) retour debut ecran
LDA <$CC (4) lecture octet video1
BRA PLAYa (3) poursuite image
* sortie video = 9 cycles
PLAYa
LDB <$CC (4) lecture octet video2
STD ,X (5) affiche l'octet image
* lecture octet depl + video3 = 17 cycles
LDB <$CC (4) lecture octet deplacement
BEQ NEWPICb (3) nouvelle image
ABX (3) ajout de l'increment
LDA <$CC (4) lecture octet video3
BRA PLAYb (3) octet video
* retour debut ecran + video3 = 10 cycle
NEWPICb
LDX #$4000 (3) retour debut ecran
LDA <$CC (4) lecture octet video3
BRA PLAYb (3) poursuite image
* sortie video = 9 cycles
PLAYb
LDB <$CC (4) lecture octet image
STD ,X (5) affiche l'octet image
FINPLAY7
RMB 72*(FINPLAY7-PLAY7)
* envoi fin bloc 512
* JMP FINBLOC (4)
END INI
[Edit 22/08/2016]
Ce matin j'ai ajouté l'option noir et blanc dans le programme Basic (voir ci-dessous).
Les nouveaux tests avec le MO5 "froid" ont tous bien fonctionné. La correction d'hier semble efficace.
Code : Tout sélectionner
1 'SDANIM7 2015.08.22
2 'Samuel Devulder - Daniel Coulom
10 CLEAR,&H8FFF
20 COLOR7,0:SCREEN,,0:CLS:LOCATE0,0,0
30 READ A$:IFLEN(A$)=4THENA=VAL("&H"+A$):GOTO30
40 IF A$="**"THENEXECA ELSEPOKEA,VAL("&H"+A$):A=A+1:GOTO30
50 PRINT"SDANIM7 2015.08.22
51 PRINT
52 PRINT"Initialisez l'Arduino, puis appuyez"
53 PRINT"sur C pour la video en couleurs"
54 PRINT"sur N pour la video en noir et blanc..."
60 A$=INPUT$(1):CLS:IFA$="N"THEN80
61 IFA$<>"C"THEN50
70 FORI=0TO199:PSET(0,I),2^(I MOD3):PSET(0,I),-1:NEXT
80 EXECA:END
90 DATA 9000
100 DATA 34,7F,1A,50,8E,1F,40,E6
101 DATA 84,63,84,E1,84,27,0A,63
102 DATA 84,CE,A7,C0,8E,00,00,20
103 DATA 06,CE,E7,C3,8E,40,00,BF
104 DATA 90,9A,BF,90,AE,1F,30,1F
105 DATA 8B,7D,90,45,26,18,4F,5F
106 DATA DD,CE,C6,7F,DD,CC,8A,04
107 DATA 97,CE,97,CF,C6,1F,D7,CD
108 DATA 7C,90,45,20,35,00,A6,C4
109 DATA 84,FE,A7,C4,86,C8,A7,E2
110 DATA A6,80,C6,27,A7,80,5A,26
111 DATA FB,A6,E0,4A,26,F0,6C,C4
112 DATA CE,90,B8,8E,0C,60,A6,C8
113 DATA D4,A7,C0,30,1F,26,F7,86
114 DATA 7E,A7,C0,CC,90,7C,ED,C4
115 DATA 20,12,35,FF,96,CC,97,CD
116 DATA 34,32,35,32,34,36,35,36
117 DATA 21,F0,2C,EE,96,CC,97,CD
118 DATA D6,CC,27,05,3A,96,CC,20
119 DATA 07,8E,40,00,96,CC,20,00
120 DATA D6,CC,ED,84,D6,CC,27,05
121 DATA 3A,96,CC,20,07,8E,40,00
122 DATA 96,CC,20,00,D6,CC,ED,84
200 DATA 9000,**
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] Vidéo avec son en streaming
Fichier SD pour tester le mode N&B: http://www.cjoint.com/doc/15_08/EHwhQtm ... rt-HD-.zip
(ca fonctionne aussi en mode couleur)
(ca fonctionne aussi en mode couleur)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] Vidéo avec son en streaming
Je connaissais cette vidéo, elle est excellente
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] Vidéo avec son en streaming
c'est du plein écran 266x200 à 18 fps. La moyenne des images est de 5922 octets, ce qui est bien moins que les 6481 octets disponibles en 1/18 sec (7*1000000/(60*18)). Bref toutes les images tiennent dans le débit imparti.
La même en couleur (et qui marche aussi très bien en N&B): http://www.cjoint.com/doc/15_08/EHwmj3n ... n-Low-.zip
La même en couleur (et qui marche aussi très bien en N&B): http://www.cjoint.com/doc/15_08/EHwmj3n ... n-Low-.zip
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] Vidéo avec son en streaming
La vidéo est encore mieux en couleurs ! Reste à contacter les ayants droits, qui veut s'en charger ?
Plus sérieusement : les dernières modifications ont supprimé toutes les erreurs. La mise au point du hard et du soft arduino est terminée. Il n'y a plus de résistance de pull-down et l'alimentation 5V est logiquement sur la broche VCC de l'Arduino. Il y a eu beaucoup de suppositions faites sur les problèmes rencontrés, certaines étaient justes et d'autres fausses. Oublions tout, voici la synthèse :
- Le bit de synchronisation PB6 (relié aussi à CA2) est en lecture à l'initialisation de l'ordinateur. Dans ce cas les résistances de pull-up de 5,6K du 6821 le mettent à 5V et le programme Arduino envoie prématurément les 6 premiers octets vidéo. Ensuite le port est initialisé en sortie, le programme Thomson passe le bit alternativement à 1 et à 0, mais le décalage initial provoque des anomalies.
- Quand on arrêtait la démo sans réinitialiser l'ordinateur, il pouvait arriver que PB6 reste à zéro (une chance sur deux). Dans ce cas l'exécution suivante du programme était bonne. Mais pas forcément celle d'après (toujours une chance sur deux).
- En ajoutant une résistance pull-down de 1K, la tension de PB6 en lecture tombe à 0,9V, c'est largement sous le seuil de l'état haut de l'Arduino, le bit est lu à zéro, il n'y a plus de décalage et la vidéo fonctionne bien. Sauf que cette résistance de 1K fait chuter la tension des vrais bits 1 à 2,8V. Pour l'Arduino alimenté en 5V c'est une zone d'incertitude, d'où les erreurs aléatoires. En diminuant la tension d'alimentation de l'Arduino à 4,8V on baisse le seuil, le bit 1 est toujours lu à 1, il n'y a plus aucune erreur.
- Pour compliquer encore le diagnostic, le décalage initial du premier cas de figure n'était pas toujours visible. Je suppose (sans certitude) que dans certain cas, après la désynchronisation, le programme se resynchronisait automatiquement et on ne voyait pas l'erreur. Ce phénomène ajoutait un aléa de plus au comportement déjà aléatoire, c'est pourquoi il a été si long et si difficile de trouver la solution.
Un fait est certain : sans analyseur logique je n'aurais jamais pu trouver les bonnes temporisations du programme Arduino, et sans oscilloscope je n'aurais jamais pu comprendre les causes des anomalies.
Maintenant tout est au point, je prépare une page pour présenter le matériel et les programmes à la section Bricolage du site dcmoto. Si vous avez besoin de conseils ou d'aide pour construire l'interface, nous pouvons en discuter à la section Bricolage du forum. Ci-dessous le schéma définitif :
Notez que la limitation à 120 Ko/s est celle du programme Thomson. L'Arduino peut lire la carte SD à plus de 400 Ko/s.
Il est possible d'augmenter encore le débit avec une transmission sur 16 bits : un LDD est plus rapide que deux LDA. Il faudrait pour cela ajouter un 6821 supplémentaire. J'ai peur que ce soit un peu trop compliqué pour le bricoleur moyen, et l'augmentation de débit ne sera pas spectaculaire.
Plus sérieusement : les dernières modifications ont supprimé toutes les erreurs. La mise au point du hard et du soft arduino est terminée. Il n'y a plus de résistance de pull-down et l'alimentation 5V est logiquement sur la broche VCC de l'Arduino. Il y a eu beaucoup de suppositions faites sur les problèmes rencontrés, certaines étaient justes et d'autres fausses. Oublions tout, voici la synthèse :
- Le bit de synchronisation PB6 (relié aussi à CA2) est en lecture à l'initialisation de l'ordinateur. Dans ce cas les résistances de pull-up de 5,6K du 6821 le mettent à 5V et le programme Arduino envoie prématurément les 6 premiers octets vidéo. Ensuite le port est initialisé en sortie, le programme Thomson passe le bit alternativement à 1 et à 0, mais le décalage initial provoque des anomalies.
- Quand on arrêtait la démo sans réinitialiser l'ordinateur, il pouvait arriver que PB6 reste à zéro (une chance sur deux). Dans ce cas l'exécution suivante du programme était bonne. Mais pas forcément celle d'après (toujours une chance sur deux).
- En ajoutant une résistance pull-down de 1K, la tension de PB6 en lecture tombe à 0,9V, c'est largement sous le seuil de l'état haut de l'Arduino, le bit est lu à zéro, il n'y a plus de décalage et la vidéo fonctionne bien. Sauf que cette résistance de 1K fait chuter la tension des vrais bits 1 à 2,8V. Pour l'Arduino alimenté en 5V c'est une zone d'incertitude, d'où les erreurs aléatoires. En diminuant la tension d'alimentation de l'Arduino à 4,8V on baisse le seuil, le bit 1 est toujours lu à 1, il n'y a plus aucune erreur.
- Pour compliquer encore le diagnostic, le décalage initial du premier cas de figure n'était pas toujours visible. Je suppose (sans certitude) que dans certain cas, après la désynchronisation, le programme se resynchronisait automatiquement et on ne voyait pas l'erreur. Ce phénomène ajoutait un aléa de plus au comportement déjà aléatoire, c'est pourquoi il a été si long et si difficile de trouver la solution.
Un fait est certain : sans analyseur logique je n'aurais jamais pu trouver les bonnes temporisations du programme Arduino, et sans oscilloscope je n'aurais jamais pu comprendre les causes des anomalies.
Maintenant tout est au point, je prépare une page pour présenter le matériel et les programmes à la section Bricolage du site dcmoto. Si vous avez besoin de conseils ou d'aide pour construire l'interface, nous pouvons en discuter à la section Bricolage du forum. Ci-dessous le schéma définitif :
Notez que la limitation à 120 Ko/s est celle du programme Thomson. L'Arduino peut lire la carte SD à plus de 400 Ko/s.
Il est possible d'augmenter encore le débit avec une transmission sur 16 bits : un LDD est plus rapide que deux LDA. Il faudrait pour cela ajouter un 6821 supplémentaire. J'ai peur que ce soit un peu trop compliqué pour le bricoleur moyen, et l'augmentation de débit ne sera pas spectaculaire.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] Vidéo avec son en streaming
Perfectionnement de l'application :
Actuellement le sketch Arduino lit le fichier SDANIM7.SD. Pour jouer une vidéo, il faut la renommer avec ce nom. Avec le nombre de démos créées par __sam__ on se lasse vite de connecter la carte au PC, renommer le fichier, remettre la carte côté Thomson.
J'ai donc imaginé un moyen simple de choisir le fichier vidéo à jouer, en listant sur l'écran Thomson le répertoire principal de la carte, fichier par fichier. Après l'affichage du nom, on peut taper ENTREE pour jouer le fichier, ou une autre touche pour afficher le nom suivant.
Dans un premier temps j'ai testé seulement le programme de choix du fichier. Reste à l'intégrer au programme de lecture vidéo, côté Arduino et côté Thomson. Il ne devrait pas y avoir de difficulté particulière.
Sketch Arduino
Programme MO5 (adaption TO à faire) :
Lancement en Basic :
Actuellement le sketch Arduino lit le fichier SDANIM7.SD. Pour jouer une vidéo, il faut la renommer avec ce nom. Avec le nombre de démos créées par __sam__ on se lasse vite de connecter la carte au PC, renommer le fichier, remettre la carte côté Thomson.
J'ai donc imaginé un moyen simple de choisir le fichier vidéo à jouer, en listant sur l'écran Thomson le répertoire principal de la carte, fichier par fichier. Après l'affichage du nom, on peut taper ENTREE pour jouer le fichier, ou une autre touche pour afficher le nom suivant.
Dans un premier temps j'ai testé seulement le programme de choix du fichier. Reste à l'intégrer au programme de lecture vidéo, côté Arduino et côté Thomson. Il ne devrait pas y avoir de difficulté particulière.
Sketch Arduino
Code : Tout sélectionner
/**************************************************\
* S D D I R *
* (c) 2015 - Daniel Coulom *
* http://dcmoto.free.fr/ *
* http://forum.system-cfg.com/ *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune garantie et *
* sans engager la responsabilité de l'auteur. *
* Vous pouvez l' utiliser, le modifier et le *
* diffuser librement, en conservant cette licence *
* et les références de l'auteur dans toutes les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/
/***************************************************
* Version 2015.08.28 *
****************************************************
Historique
2015.08.28 premiere version operationnelle
Communication parallele avec un ordinateur Thomson
Lecture de la directory d'une carte SD
Envoi des octets sur le port D a destination du
port manettes de l'ordinateur Thomson.
Connexion module Catalex pour carte micro SD
GND --> GND
SCK --> D13
MISO --> D12
MOSI --> D11
VCC --> VCC (5V)
CS --> D10
Connexion DB9 de la manette 0
1 --> D0 (RX)
2 --> D1 (TX)
3 --> D2
4 --> D3
5 --> non connecte
6 --> D8
7 --> non connecte
8 --> non connecte
9 --> GND
Connexion DB9 de la manette 1
1 --> D4
2 --> D5
3 --> D6
4 --> D7
5 --> VCC (+5V)
6 --> non connecte
7 --> non connecte
8 --> non connecte
9 --> non connecte
This sketch uses the SimpleSDAudio library for SD card access.
Visit SimpleSDAudio website for more information:
http://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio
*/
#include <sd_l0.h>
#include <sd_l1.h>
#include <sd_l2.h>
void setup()
{
uint8_t string[512]; // buffer de lecture de la carte
uint8_t name[32]; // nom de fichie
SD_L2_File_t AudioFileInfo;
//Initialisations
//Serial.begin(9600); // serial communication 9600 bauds
noInterrupts(); // desactiver les interruptions
pinMode(8, INPUT); // configurer pin8 en entree (bit de synchronisation)
DDRD = 0xff; // configurer port D en sortie
PORTD = 0x00; // initialiser port D a zero
SD_L0_CSPin = 10; // definir CS de la carte SD en D10
SD_L2_Init(string); // initialiser la carte SD
SD_L0_SpiSetHighSpeed(); // frequence d'horloge maxi
/**
* Prints a directory.
* Callback must point to a function that prints one string.
*
* Works only over one cluster of directory information. If
* SD_L2_ERROR_DIR_EOC is returned call function again with next
* cluster number.
*
* Set cluster to 0 to access root directory.
*
* Deleted files and long name entries are not shown generally.
*
* Only files are printed that has their attributes set/unset regarding maskSet/maskUnset.
* Examples for maskSet, maskUnset:
* Ouput everything: 0x00, 0x00
* Shortname files only: 0x00, 0x18
* Shortname files and dirs: 0x00, 0x08
* Shortname dirs: 0x10, 0x08
* Volume name: 0x08, 0x10
*
* Mask bits: B7 = 0, B6 = 0, B5 = archive, B4 = directory,
* B3 = volume name, B2 = system, B1 = hidden, B0 = read only
*/
SD_L2_Dir(0x00, 0x00, 0x18, dir_callback);
PORTD = 0xff; // fin de transmission
}
void loop(void) {
}
void dir_callback(char *filename)
{
int i;
for(i = 0; i < strlen(filename); i++) send_char(filename[i]);
send_char(0x0d);
send_char(0x0a);
}
void send_char(char c)
{
PORTD = c; // caractere du nom de fichier
while((PINB & 0x01) == 1); // attente bit de synchro à 0
while((PINB & 0x01) == 0); // attente bit de synchro à 1
}
Code : Tout sélectionner
/**************************************************\
* S D D I R *
* (c) 2015 - Daniel Coulom *
* http://dcmoto.free.fr/ *
* http://forum.system-cfg.com/ *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune garantie et *
* sans engager la responsabilité de l'auteur. *
* Vous pouvez l' utiliser, le modifier et le *
* diffuser librement, en conservant cette licence *
* et les références de l'auteur dans toutes les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/
* Ce programme utilise l'interface de streaming
* compose d'un Arduino et d'une carte SD
* pour lire et afficher la directory de la carte.
/**************************************************\
* Version 2015.08.28 *
\**************************************************/
* Historique
* 2015.08.28 premiere version operationnelle
*------------------------------------------------------
* DEBUT DU PROGRAMME
*------------------------------------------------------
ORG $9E00
*------------------------------------------------------
* Initialisations
*------------------------------------------------------
INIT
PSHS U,Y,X,DP,B,A,CC sauvegarde des registres du Basic
ORCC #$50
LDX #$1F40 adresse pour test RAM ou ROM
LDB ,X lecture adresse X
COM ,X tente de modifier adresse X
CMPB ,X test modification adresse X
BEQ INIT1 pas de difference -> TO
COM ,X retablissement adresse X
LDA #$A7 valeur initialisation DP pour MO
BRA INIT2 suite des initialisations
INIT1
LDA #$E7 valeur initialisation DP pour TO
INIT2
TFR A,DP initialisation DP
*------------------------------------------------------
* INITIALISATION PORTS D'ENTREE/SORTIE
*------------------------------------------------------
CLRA A=$00
CLRB B=$00
STD <$CE selectionne DDRA et DDRB
LDB #$40 B=$40
STD <$CC PA b0-7 en entree, PB b6 en sortie
ORA #$04 set b2
STA <$CE selectionne PORTA
STA <$CF selectionne PORTB
STB <$CD PB6=1
*------------------------------------------------------
* Lecture et affichage de la directory
*------------------------------------------------------
DIR
SWI appel fonction moniteur
FCB $0C scrutation rapide clavier
BNE DIR attente touche relachee
DIR1
LDB <$CC lecture caractere
COM <$CD clear bit synchro
COM <$CD set bit synchro
CMPB #$FF test fin de repertoire
BEQ RETOUR retour au Basic
SWI appel fonction moniteur
FCB $02 affichage caractere
CMPB #$0A nouvelle ligne
BNE DIR1 lecture caractere suivant
DIR2
SWI appel fonction moniteur
FCB $0A lecture du clavier
BEQ DIR2 attente touche enfoncee
CMPB #$0D test touche entree
BEQ RETOUR retour au Basic
BRA DIR suite de la directory
*------------------------------------------------------
* RETOUR AU BASIC
*------------------------------------------------------
RETOUR
PULS CC,A,B,DP,X,Y,U,PC
END
Code : Tout sélectionner
1 '================================
2 ' SDDIR - Daniel Coulom - 2015
3 '================================
20 CLEAR,&H9DFF:A=&H9E00
30 READX$:IFX$="**"THEN99
40 POKEA,VAL("&H"+X$):A=A+1:GOTO30
99 EXEC&H9E00:END
100 DATA 34,7F,1A,50,8E,1F,40,E6
101 DATA 84,63,84,E1,84,27,06,63
102 DATA 84,86,A7,20,02,86,E7,1F
103 DATA 8B,4F,5F,DD,CE,C6,40,DD
104 DATA CC,8A,04,97,CE,97,CF,D7
105 DATA CD,3F,0C,26,FC,D6,CC,03
106 DATA CD,03,CD,C1,FF,27,10,3F
107 DATA 02,C1,0A,26,F0,3F,0A,27
108 DATA FC,C1,0D,27,02,20,E2,35
109 DATA FF,**
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] Vidéo avec son en streaming
Est-il possible d'imaginer un mode "transparent" pour l'arduino et un mode "parallèle/super boost" ?
Dans le mode "transparent", actif au démarrage, l'arduino ne fait que transférer le SPI entre le TO et la carte SD dans les deux sens (il recopie les bits). A ce moment là: le contrôleur CD91-280 marche naturellement permettant de choisir un fichier SD. Puis à un moment si on envoi une commande "à nous" (une super CMD18) via le SPI, l'arduino la reconnait lors de la recopie des bits, et il transmet alors un CMD18 sur la carte SD et passe en mode parallèle.
Plus tard pour revenir en mode transparent, il suffit de resetter l'arduino.
Ca parait jouable ce genre de protocole ?
(bon sinon pour le code C du convertisseur: les vacances se terminent, et je n'ai pas eu le courage de démarrer le portage. C'est vraiment très curieux. Je ne pense pas être devenu allergique au C puis que j'en ait fait plein sur amiga (des modifs et optim de code existant). Non je doit être allergique à refaire de zéro un truc que j'ai déjà fait avec un langage de haut niveau... ouais: grosse flemme car le script marche bien. Mais bon ce n'est pas fini: il reste les soirée au retour du boulot à présent )
Dans le mode "transparent", actif au démarrage, l'arduino ne fait que transférer le SPI entre le TO et la carte SD dans les deux sens (il recopie les bits). A ce moment là: le contrôleur CD91-280 marche naturellement permettant de choisir un fichier SD. Puis à un moment si on envoi une commande "à nous" (une super CMD18) via le SPI, l'arduino la reconnait lors de la recopie des bits, et il transmet alors un CMD18 sur la carte SD et passe en mode parallèle.
Plus tard pour revenir en mode transparent, il suffit de resetter l'arduino.
Ca parait jouable ce genre de protocole ?
(bon sinon pour le code C du convertisseur: les vacances se terminent, et je n'ai pas eu le courage de démarrer le portage. C'est vraiment très curieux. Je ne pense pas être devenu allergique au C puis que j'en ait fait plein sur amiga (des modifs et optim de code existant). Non je doit être allergique à refaire de zéro un truc que j'ai déjà fait avec un langage de haut niveau... ouais: grosse flemme car le script marche bien. Mais bon ce n'est pas fini: il reste les soirée au retour du boulot à présent )
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] Vidéo avec son en streaming
On peut tout imaginer, mais après, pour développer, il faut des dizaines ou des centaines d'heures de travail. L'arduino a un mode SPI "hard", utilisé pour communiquer avec la carte SD. Mais on peut faire aussi du SPI par soft, pour communiquer avec le Thomson. Après il faut faire communiquer les deux SPI, c'est sûrement possible, mais bon courage à qui s'y lancera
Une autre idée serait de faire un contrôleur de disquette communiquant avec la carte SD en parallèle par l'intermédiaire de l'Arduino. On pourrait atteindre des débits 10 fois plus élevés qu'avec le contrôleur CS91-280. Et pourquoi pas, sur la lancée, imaginer des disquettes à 64000 pistes en gardant le système de fichier Thomson pour rester compatible avec les logiciels existants. J'en ai rêvé, mais j'ai déjà beaucoup donné, et je ne me sens pas le courage de repartir dans une nouvelle aventure. Il est clair maintenant que ces petits bricolages n'intéressent personne, sauf leur créateur.
C'est surtout une question de motivation : au début, il y avait l'exploration d'un domaine inconnu : la communication avec une carte SD. Avec la gestion de la liaison SPI par le 6809 c'était 6 Ko/s. Aujourd'hui, avec l'Arduino, nous sommes à 120 Ko/s, et sans la limitation du 6809 nous pourrions monter à 400 Ko/s. On peut charger toute la mémoire d'un TO8D en moins de deux secondes, contre deux minutes avec une disquette et 45 minutes ou plus avec une cassette. C'est un exploit, mais qui l'utilisera ? Personne. Rien que d'y penser, ça me coupe toute envie de le faire.
Pour le streaming vidéo, ce que nous sommes arrivés à faire tous les deux est tellement extraordinaire qu'il faut continuer à améliorer les programmes pour les rendre facile à utiliser. La procédure de génération des vidéos et le choix du fichier dans un répertoire vont rendre le système accessible à tous. Et, qui sait, donner envie à des créateurs de composer des oeuvres originales.
Une autre idée serait de faire un contrôleur de disquette communiquant avec la carte SD en parallèle par l'intermédiaire de l'Arduino. On pourrait atteindre des débits 10 fois plus élevés qu'avec le contrôleur CS91-280. Et pourquoi pas, sur la lancée, imaginer des disquettes à 64000 pistes en gardant le système de fichier Thomson pour rester compatible avec les logiciels existants. J'en ai rêvé, mais j'ai déjà beaucoup donné, et je ne me sens pas le courage de repartir dans une nouvelle aventure. Il est clair maintenant que ces petits bricolages n'intéressent personne, sauf leur créateur.
C'est surtout une question de motivation : au début, il y avait l'exploration d'un domaine inconnu : la communication avec une carte SD. Avec la gestion de la liaison SPI par le 6809 c'était 6 Ko/s. Aujourd'hui, avec l'Arduino, nous sommes à 120 Ko/s, et sans la limitation du 6809 nous pourrions monter à 400 Ko/s. On peut charger toute la mémoire d'un TO8D en moins de deux secondes, contre deux minutes avec une disquette et 45 minutes ou plus avec une cassette. C'est un exploit, mais qui l'utilisera ? Personne. Rien que d'y penser, ça me coupe toute envie de le faire.
Pour le streaming vidéo, ce que nous sommes arrivés à faire tous les deux est tellement extraordinaire qu'il faut continuer à améliorer les programmes pour les rendre facile à utiliser. La procédure de génération des vidéos et le choix du fichier dans un répertoire vont rendre le système accessible à tous. Et, qui sait, donner envie à des créateurs de composer des oeuvres originales.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.