Commande pour module audio WTV020-xxD

Pedro51

Member
Bonjour,

Il y a un peu plus de deux ans déja, j'ai utilisé ce module "WTV020", c'est un lecteur de piste audio au format *.ad4.
Le module est assez contraignant, il y a pas mal de paramètre à prendre en compte. Un lien vers un tuto très bien fait (in english quand même).
http://www.picaxeforum.co.uk/showthread.php?13971-Getting-started-with-the-4D-Systems-SOMO-14D-audio-module

Je n'avais pas réussi a l’époque à l'utiliser en liaison série. Mais bon, j’étais vite passé à autre chose puisque de toute manière, je souhaitai lancer que quelques pistes, une commande sur "next" suffisait.

Pour un projet futur, j'ai retenté l’expérience. Et j'ai enfin réussi à le commander en série.

Avec l'aide d'un oscilloscope, j'ai pu observer le signal de l'horloge en sortie du picaxe, et ajuster ses périodes dans le programme, bien que cela ne soit pas critique. l'horloge peut tourner autour de 0,5 à 5ms par période sans problème. Seul le délai entre le reset et le début du signal est important, ni trop court sinon le signal n'est pas prit en compte, ni trop long sinon le module se met en standby après une seconde et plus aucune donnée ne sera prise en compte. C'est pourquoi il faut absolument faire un reset avant la lecture des pistes.



J'utilise des transistors NPN pour commander le module, cela évite les problèmes de tensions entre le processeur et le module.
Édit: Au lieu des résistances de 100 Ohms au niveau de la commande des transistors, mettez plutôt des résistances de 1k.



Le programme qui tourne à 32Mhz pour ceux qui seront intéressés. Testé et fonctionne aussi en changeant seulement "setfreq" à 16Mhz et en supprimant "pauseus 300" qui devient obsolète dans cette config.

Code:
#Picaxe 08m2
setfreq m32

symbol bits 	= 16
symbol counter 	= b2
symbol masque 	= bit15
symbol var_out 	= w0
symbol rst 		= C.0
symbol sdata 	= C.1
symbol sclk		= C.2
symbol busy 	= pinC.4
symbol msb		= $8000
		

main:
		pause 80
		if pinC.3 = 0 then goto main	' inter pour lancer piste suivante				

LSB:
		high rst : pause 40 : low rst ' reset 5ms
		pause 3400				' attente 425ms, ne fonctionne pas en dessous de cette valeur
							' malgré que le constructeur donne 300ms dans sa doc
		
		for counter = 1 to bits 	' envoi en 16 bits
		if masque = 1 then : low sdata : else : high sdata : endif 
		
		pulsout sclk,800			' Impulsion clock à x*1,25us soit environ 1ms
		pauseus 300				' pour étalonner la boucle à x*1,25us soit environ 375us
							' la boucle "counter" se fait en 625us, on obtient notre milliseconde.
		
		var_out = var_out * 2 		' décalage à gauche de la variable 
		next counter
		low sclk : low sdata

		inc b4 : if b4 >= 8 then : b4 = 0 : endif : var_out = b4
			
Hold:		' Hold bloque le prog temps que la piste n'est pas finie
		pause 240  			' delai de 30ms pour que busy soit prit en compte				

	
		if busy = 1 then Hold
		goto main
Certains ce contenteront de résistance de 100r entre le module et le picaxe. Dans ce cas, il faudra donc utiliser ce programme.

Code:
#Picaxe 08m2
setfreq m32

symbol bits 	= 16
symbol counter 	= b2
symbol masque 	= bit15
symbol var_out 	= w0
symbol rst 		= C.0
symbol sdata 	= C.1
symbol sclk		= C.2
symbol busy 	= pinC.4
symbol msb		= $8000

init:		
		high sclk : high sdata : high rst
main:
		pause 80
		if pinC.3 = 0 then goto main	' inter pour lancer piste suivante

LSB:
		low rst : pause 40 : high rst ' reset 5ms
		pause 3400				' attente 425ms, ne fonctionne pas en dessous de cette valeur
							' malgré que le constructeur donne 300ms dans sa doc
		
		for counter = 1 to bits 	' envoi en 16 bits
		if masque = 1 then : high sdata : else : low sdata : endif 
		
		pulsout sclk,800			' Impulsion clock à x*1,25us soit environ 1ms
		pauseus 300				' pour étalonner la boucle à x*1,25us soit environ 375us
							' la boucle "counter" se fait en 625us, on obtient bien notre milliseconde.
		
		var_out = var_out * 2 		' décalage à gauche de la variable 
		next counter


		
		inc b4 : if b4 >= 8 then : b4 = 0 : endif : var_out = b4 'pistes 0 à 9
			
Hold:		' Hold bloque le prog temps que la piste n'est pas finie
		pause 240  			' delai de 30ms pour que busy soit prit en compte				

	
		if busy = 1 then Hold
		goto init
Quoi qu'il en soit, les deux montages fonctionneront (j'ai testé les deux), mais les résistances ne permettent pas d'abaisser suffisamment la tension. Et a partir de 330r, les commandes ne fonctionneront plus. Voila pourquoi j'ai fait le choix de la commande par transistors, cela me semble plus viable et pas spécialement beaucoup plus cher.
Édit: "Mais vous pouvez aussi alimenter le tout à 3,3v. Cela dépendra de votre projet."

Bon courage avec ce module surtout pour trouver la bonne micro SD qui sera compatible. Je vous conseil une 128Mo. Ce sont statistiquement celle qui fonctionnent le mieux.

@+
 
Last edited:

MGU

Senior Member
Bonjour,

Quelle est la valeur des résistances dans les bases transistors? 100 ohms?
Et rien sur les collecteurs, pas de pullup? c'est normal?

MM
 

PieM

Senior Member
Bonjour,

Quelle est la valeur des résistances dans les bases transistors? 100 ohms?
Et rien sur les collecteurs, pas de pullup? c'est normal?

MM
Il y a effectivement un problème !

100R c'est plus de 40 mA (théorique) en sortie du picaxe !
et pas de pullup ?! ...

Pour éviter les problèmes de tension, alimentez le picaxe en 3.3V c'est quand même plus simple.
 

Pedro51

Member
Salut MGU,

Ce sont des résistances de 100 ohms, en effet. Justement je pense qu'il y a déjà les résistances de pull-up dans le module. Patte en l'air, le module délivre déjà 3,3v a ses entrées.

C'est pour cela qu'avec seulement les résistances, ont ne peut pas abaisser la tension correctement de 5v a 3,3v. J'ai bien peur que malgré que cela fonctionne, a la longue, le WTV020-20SS ne supporte pas la surtension.
 

Pedro51

Member
Salut PieM,

oui alimenter le tout en 3,3v serai plus commode mais j'ai besoin du 5v en sortie du picaxe pour commander des mosfets et des servo-moteur.

On pourrai mettre des 1k sans affecter la commutation des transistors. C'est juste que les 100r été déjà sortie.
 

dje8269

Senior Member
Bonjour à tous,

Je déconseille d'alimenter les servos ET le picaxe sur la même alim, j'ai eu pas mal de déboires ou alors faut vraiment bien découpler .
Les mosFet ( je suppose en logic level ?) sinon tu peut aussi les commander par un transistor pour harmoniser les alims .
 

Pedro51

Member
Bonjour,

Ouf, coup de chance, ça aurait pu être des 10 ohms....

MM
Ah oui, ;) je n'avait pas compris. Je pensai que vous me parliez de la limitation en courant au niveau du WTV020 mais je ne pensai pas du tout au picaxe. :rolleyes:

Pour les servos, j'ai intérêt à soigner l'alim en effet surtout que je vais devoir en commander sept. Mais j'ai déjà ma petite idée la dessus.

De toute façon rien n'est arrêté quand on fait ce type de projet. J'aviserai quand j'aurai tout les éléments en main.

Je vais modifier mon premier post afin de ne pas induire en erreur les éventuel forumeur qui souhaiterai s'inspirer de mon montage.
 
Top