HectorDuino

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

yves
Messages : 464
Inscription : 12 sept. 2007 21:32

Re: HectorDuino

Message par yves »

wow bravo !
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: HectorDuino

Message par Daniel »

:idea: 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.
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

Effectivement. Et lors de la 1er démo vidéo j'avais voulu faire un peu comme cela, mais franchement, c'est tricher :wink:
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

Je m'apperçois que je m'avais pas donné le code de mon player :wink: :

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
		
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: HectorDuino

Message par 6502man »

La vidéo avec le gros plan sur le visage, c'est vraiment impressionnant :shock:

Félicitations :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

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 !
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ »

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
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: HectorDuino

Message par Daniel »

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.
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

Daniel, as tu chronométré le changement de secteur ? ainsi que le possibilité d'voir des fichiers fragmenté ?
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: HectorDuino

Message par Daniel »

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.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

OK, j'ai bien fais de changer de bibliothèque.Celle de base me semblait lente.
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

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 :shock:

... ? 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 !
:D
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

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 :wink: )
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.
et j'ai aussi fait un "ppm install Image-Magick.ppd" dans le répertoire et voilà ce que cela donne après :
PPM.JPG
PPM.JPG (54.92 Kio) Consulté 3432 fois
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: HectorDuino

Message par __sam__ »

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 :wink: )
Je suis sous Windows 10.

L'erreur :
"C:\Users\jj\Desktop\ffmpeg>script.pl
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.

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
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: HectorDuino

Message par yo_fr »

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 !)
Répondre