HectorDuino
Modérateurs : Papy.G, fneck, Carl
Re: HectorDuino
D'après les schémas, la sortie audio de la cassette est mélangée avec la sortie du synthétiseur pour être envoyée à l'entrée audio du téléviseur. En reliant une sortie PWM de l'Arduino au connecteur cassette, on doit pouvoir ajouter le son à la vidéo.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: HectorDuino
Effectivement. Et lors de la 1er démo vidéo j'avais voulu faire un peu comme cela, mais franchement, c'est tricher
Re: HectorDuino
Je m'apperçois que je m'avais pas donné le code de mon player :
Code : Tout sélectionner
; VIDEO PLAYER RELATIF!
; On recoit en 1er octet un offset
; Puis 2 octets de valeur d'écran
; Offset :
; S'il vaut 0 c'est que c'est un envoi de donnée brute (couleur/résolution)
; Sinon c'est un déplacement positif non signé...
NOP ; Des fois que...
VIDEO_OFF:
RST 18H ; Dans tous les cas, c'est en mémoire VIDEO !
DI
LD A,0
OUT (PORTA),A ; RAZ du port A
BCL_VID_OFF:
IN A,(PORTC) ; lecture portC
AND $10 ; PC4? Octet suivant D>H disponible ?
JR Z,BCL_VID_OFF ; attente
LD A,$05 ; X0/X2 => PC0 / PC2 à 1
OUT (PORTC),A ; Validation octet envoyé sur PORTB
IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk)
LD C,A ; on mets de coté
LD A,$07 ; X0/X1/X2 => PC0 PC1 PC2
OUT (PORTC),A ; RAZ du bit X1 => validation lecture
LD A,C ; Restauration octet lu !
CP 0 ; Offset reçu = 0 ???
JR Z,CONTROLE_VIDEO
; Addition HL,A
ADD A,L
LD L,A
ADC A,H
SUB L
LD H,A
; 1er octet de 4 pixels
BCL_2:
IN A,(PORTC) ; 3FE1 lecture portC
AND $10 ; PC4? Octet suivant D>H disponible ?
JR Z,BCL_2 ; attente
LD A,$05 ; X0/X2 => PC0 / PC2 à 1
OUT (PORTC),A ; Validation octet envoyé sur PORTB
IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk)
LD (HL),A ; On mets à l'adresse demandé l'octet reçu
LD A,$07 ; X0/X1/X2 => PC0 PC1 PC2
OUT (PORTC),A ; RAZ du bit X1 => validation lecture;
INC HL
; 2eme octet de 4 pixels
BCL_3:
IN A,(PORTC) ; lecture portC
AND $10 ; PC4? Octet suivant D>H disponible ?
JR Z,BCL_3 ; attente
LD A,$05 ; X0/X2 => PC0 / PC2 à 1
OUT (PORTC),A ; Validation octet envoyé sur PORTB
IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk)
LD (HL),A ; On mets à l'adresse demandé l'octet reçu
LD A,$07 ; X0/X1/X2 => PC0 PC1 PC2
OUT (PORTC),A ; RAZ du bit X1 => validation lecture;
JR BCL_VID_OFF
CONTROLE_VIDEO:
; Si on est ici c'est que l'on a recu un code offset à 0
; On charge donc les 2 octets suivant dans HL
BCL_4:
IN A,(PORTC) ;3FE1 lecture portC
AND $10 ; PC4? Octet suivant D>H disponible ?
JR Z,BCL_4 ; attente
LD A,$05 ; X0/X2 => PC0 / PC2 à 1
OUT (PORTC),A ; Validation octet envoyé sur PORTB
IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk)
LD H,A ; Poids fort dans H
LD A,$07 ; X0/X1/X2 => PC0 PC1 PC2
OUT (PORTC),A ; RAZ du bit X1 => validation lecture
BCL_5:
IN A,(PORTC) ; lecture portC
AND $10 ; PC4? Octet suivant D>H disponible ?
JR Z,BCL_5 ; attente
LD A,$05 ; X0/X2 => PC0 / PC2 à 1
OUT (PORTC),A ; Validation octet envoyé sur PORTB
IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk)
LD L,A ; Poids faible dans L
LD A,$07 ; X0/X1/X2 => PC0 PC1 PC2
OUT (PORTC),A ; RAZ du bit X1 => validation lecture
; Si adresse = 01 => c'est que c'est fini on sort
; -> 0100 ou 0001 ou 0101 ce qui ne rime à rien dans la ram Hector
LD A,L
OR H
CP 1
JR Z,VIDEO_OUT ; Si c'est la cas => on sort !
; Sinon c'est que l'on souhaite écrire en mémoire !
BCL_6:
IN A,(PORTC) ; lecture portC
AND $10 ; PC4? Octet suivant D>H disponible ?
JR Z,BCL_6 ; attente
LD A,$05 ; X0/X2 => PC0 / PC2 à 1
OUT (PORTC),A ; Validation octet envoyé sur PORTB
IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk)
LD (HL),A ; On mets à l'adresse demandé l'octet reçu
LD A,$07 ; X0/X1/X2 => PC0 PC1 PC2
OUT (PORTC),A ; RAZ du bit X1 => validation lecture
; on relance
JP BCL_VID_OFF ; non ce n'est pas une nouvelle frame, mais une nouvelle base de remplissage BCL_NEW_FRAME
VIDEO_OUT:
LD HL, $0
LD (HL),0 ; passage en HR !
DI
RET
Re: HectorDuino
La vidéo avec le gros plan sur le visage, c'est vraiment impressionnant
Félicitations
Félicitations
Re: HectorDuino
Je commence un peu les optimisations :
Sur la vidéo de bad apple (soit 2 076 621 octets = 1'40sec en réel)
Temps mis initialement en 2"08 sec => 16,223 ko/s
Avec la bibliothèque utilisée par Daniel (Simple Audio Player) : 1"44 => 19.967 ko/s
pas mal non
PS : C'est vrai que les visages en gros plan sont pas mal du tout !
Sur la vidéo de bad apple (soit 2 076 621 octets = 1'40sec en réel)
Temps mis initialement en 2"08 sec => 16,223 ko/s
Avec la bibliothèque utilisée par Daniel (Simple Audio Player) : 1"44 => 19.967 ko/s
pas mal non
PS : C'est vrai que les visages en gros plan sont pas mal du tout !
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: HectorDuino
C'est donc l'arduino qui limitait la vitesse sur Hector. J'aurais pensé que, tout comme sur 6809, c'est le Z80 qui plafonne.
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: HectorDuino
La lecture d'un fichier avec la bibliothèque Simple Audio Player est lente, par contre la lecture physique de secteurs avec la commande CMD18 (Read Multi-blocks) est nettement plus rapide : entre 2 et 3µs par octet, de l'ordre de 400 Ko/s avec un ATmega328 à 16 MHz.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: HectorDuino
Daniel, as tu chronométré le changement de secteur ? ainsi que le possibilité d'voir des fichiers fragmenté ?
Re: HectorDuino
Avec la lecture physique de secteurs, les fichiers ne doivent pas être fragmentés, mais ce n'est pas une grosse contrainte : il suffit de formater la carte et de copier les fichiers sans en effacer. Quand la carte est pleine on reformate et on recommence.
Le changement de secteur est plus ou moins long selon le type de carte, et n'est pas forcément parfaitement régulier. Pour le son il faut en tenir compte, mais pour l'image c'est imperceptible. Avec les cartes que j'utilise et l'ATmega328 à 16 MHz, le délai mesuré avec l'analyseur logique est de l'ordre de 10 à 12 µs, y compris la lecture des deux octets de CRC et de l'octet $FE de début du bloc suivant.
Le changement de secteur est plus ou moins long selon le type de carte, et n'est pas forcément parfaitement régulier. Pour le son il faut en tenir compte, mais pour l'image c'est imperceptible. Avec les cartes que j'utilise et l'ATmega328 à 16 MHz, le délai mesuré avec l'analyseur logique est de l'ordre de 10 à 12 µs, y compris la lecture des deux octets de CRC et de l'octet $FE de début du bloc suivant.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: HectorDuino
OK, j'ai bien fais de changer de bibliothèque.Celle de base me semblait lente.
Re: HectorDuino
Alors là je suis (étais) tombé sur un os :
J'ai passé la même vidéo en BR et en HR (quand je dis la même, c'est le même fichier dans lequel j'ai simplement modifié 1 octet pour rester en HR, la vidéo de base étant en BR, même lorsqu'elle est en HR, l'écriture est aux adresses BR) :
Video en BR : 64 124 ms
ech = 1 247 586 échantillons
Freq = 19463 octets/sec
Video en HR : 38 980 ms
ech = 1 247 586 échantillons
Freq = 32 071 octets/sec
... ? pourquoi ?
La solution était simple : lorsque je passe en BR, Hector CHANGE sa fréquence de fonctionnement pour être compatible avec les jeux BR...!
Lors de mes 1ers essais j'étais limité par la lecture SD par l'Arduino et je ne m'apercevais pas du changement de fréquence d'Hector!
=> Le changement de bibliothèque m'a donc boosté de 16Ko/s à 32Ko/sec ! (mais uniquement en HR!). ça monte, ça monte !
J'ai passé la même vidéo en BR et en HR (quand je dis la même, c'est le même fichier dans lequel j'ai simplement modifié 1 octet pour rester en HR, la vidéo de base étant en BR, même lorsqu'elle est en HR, l'écriture est aux adresses BR) :
Video en BR : 64 124 ms
ech = 1 247 586 échantillons
Freq = 19463 octets/sec
Video en HR : 38 980 ms
ech = 1 247 586 échantillons
Freq = 32 071 octets/sec
... ? pourquoi ?
La solution était simple : lorsque je passe en BR, Hector CHANGE sa fréquence de fonctionnement pour être compatible avec les jeux BR...!
Lors de mes 1ers essais j'étais limité par la lecture SD par l'Arduino et je ne m'apercevais pas du changement de fréquence d'Hector!
=> Le changement de bibliothèque m'a donc boosté de 16Ko/s à 32Ko/sec ! (mais uniquement en HR!). ça monte, ça monte !
Re: HectorDuino
Salut sam,
Je n'arrive pas à lancer ton script perl.
J'ai bien installé ImageMagick (6.9.1-Q16, en cochant l'installation des libraries )
Je suis sous Windows 10.
L'erreur :
"C:\Users\jj\Desktop\ffmpeg>script.pl
'.' n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
&Image::Magick::constant not defined. The required ImageMagick libraries are not installed or not installed properly.
&Image::Magick::constant not defined. The required ImageMagick libraries are not installed or not installed properly.
END failed--call queue aborted at C:\Users\jj\Desktop\ffmpeg\Script.pl line 55.
"
Tu aurais une idée avant que je ne plonge dans ton script ?
Je voudrais pouvoir l'utiliser pour d'autre résolution (passage en HR, 4 couleurs) et transférer d'autres vidéos.
Merci !
JJ
[EDIT]
Version de perl :
et j'ai aussi fait un "ppm install Image-Magick.ppd" dans le répertoire et voilà ce que cela donne après :
Je n'arrive pas à lancer ton script perl.
J'ai bien installé ImageMagick (6.9.1-Q16, en cochant l'installation des libraries )
Je suis sous Windows 10.
L'erreur :
"C:\Users\jj\Desktop\ffmpeg>script.pl
'.' n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
&Image::Magick::constant not defined. The required ImageMagick libraries are not installed or not installed properly.
&Image::Magick::constant not defined. The required ImageMagick libraries are not installed or not installed properly.
END failed--call queue aborted at C:\Users\jj\Desktop\ffmpeg\Script.pl line 55.
"
Tu aurais une idée avant que je ne plonge dans ton script ?
Je voudrais pouvoir l'utiliser pour d'autre résolution (passage en HR, 4 couleurs) et transférer d'autres vidéos.
Merci !
JJ
[EDIT]
Version de perl :
Code : Tout sélectionner
C:\Program Files\ImageMagick-6.9.1-Q16\PerlMagick>perl -v
This is perl 5, version 20, subversion 2 (v5.20.2) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2015, Larry Wall
Binary build 2001 [298913] provided by ActiveState http://www.ActiveState.com
Built Mar 24 2015 12:09:44
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: HectorDuino
En général je fais "perl script.pl arguments". Essaye pour voir si ca marche mieux. Il n'y a que dans les unix-like que l'OS reconnait correctement le #!/bin/perl du début.yo_fr a écrit :Salut sam,
Je n'arrive pas à lancer ton script perl.
J'ai bien installé ImageMagick (6.9.1-Q16, en cochant l'installation des libraries )
Je suis sous Windows 10.
L'erreur :
"C:\Users\jj\Desktop\ffmpeg>script.pl
Si ca ne marche pas, desinstalle les versions stand-alone de perl et image magick, et installe plutot cygwin (32bits) en selectionnant perl-magick dans la liste des packages. Ca devrait bien mieux marcher dans cet environnement plus "unix". C'est ce que j'utilise chez moi.
Note: je vois que ton perl est 64bits. Est-ce que par malchance image-magick serait installé avec des dll 32bits? Windows ne sait pas utiliser des dll 32bits dans un exe 64bits (mais ca tu dois déjà le savoir je pense)
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: HectorDuino
Ils sont tous les 2 64 bits...
perl script.pl fonctionne pas.
j'essaye cygwin...
[cygwin installé]
Lorsque je lance :$ perl script.pl
Can't locate object method "new" via package "Image::Magick" at script.pl line 131.
(désolé je ne connais vraiment pas ces outils... trop moderne pour moi (VB / C / asm : ok, php / html /... perl trop moderne !)
perl script.pl fonctionne pas.
j'essaye cygwin...
[cygwin installé]
Lorsque je lance :$ perl script.pl
Can't locate object method "new" via package "Image::Magick" at script.pl line 131.
(désolé je ne connais vraiment pas ces outils... trop moderne pour moi (VB / C / asm : ok, php / html /... perl trop moderne !)