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.
Certains ce contenteront de résistance de 100r entre le module et le picaxe. Dans ce cas, il faudra donc utiliser ce programme.
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.
@+
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
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
É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: