Generar tonos dtmf en visual basic 2005

Hola. Estoy armando un proyecto para la escuela y tenia pensado armar un cochecito a control remoto controlado desde la PC. Tenia pensado para la interfaz usar tonos DTMF, un soft en VB los generaria a traves de la salida de sonido a la cual estaria conectado un transmisor de FM, en el cocchicito estaria un MP3 con radio para la recepcion de los tonos DTMF, a la salida de sonido del MP3 iria un 8870 para detectar el tono y entregar una salida binaria que el PIC detectaria y actuaria en consecuencia.

Mi problema surge en la forma de generar los tonos DTMF, solo se programar en VB y se me ocurrieron dos ideas. La primera, reproducir archivos de audio con los tonos, eso lo se hacer. La segunda era la de generar los tonos con el programa, pero no se si podra hacer en VB y tampoco puedo conseguir los archivos de audio con los tonos DTMF.

desde ya muchas gracias.
 
solo tienes que utilizar un programa de libre distribucion para la grabacion y modificacion de audio, el cual ya dispone en sus archivos los tonos dtmf.
busca en google el audacity
 
Otra forma podría ser usar un chip generador de DTMF (UM95089 o similares), el "complemento" del 8870. Ambos usan un cristal de 3579545 Hz.
En el 95089 la frecuencia se selecciona mandando a tierra 2 de 8 líneas (una "f" y una "c").
En lugar de conmutarlas desde un teclado de 4x4 o 3x4, como se usa normalmente, se podrían manejar desde el puerto paralelo de la pc.
 
Última edición:
Alejandro Sherar escribio: "... En el 95089 la frecuencia se selecciona mandando a tierra 2 de 8 l¡neas (una "f" y una "c")..."

Hola Alejandro... Si pudieras explicar mas lo anterior ? cúales lineas serian ?.
Saludos
 
Debería haber puesto "el par de frecuencias" teniendo en cuenta que son dos. :unsure:

El integrado está pensado para manejarse desde un teclado de hasta 16 teclas: 4 filas x 4 columnas.
Por eso hay 4 patillas 3, 4, 5,y 9 (/C1, /C2, /C3, /C4) con las que se selecciona la frecuencia asociada a la columna de la tecla oprimida. Lo mismo pasa con las patillas 14, 13, 12, 11 que seleccionan la frecuencia asociada a la fila (/R1, /R2, /R3, /R4, respectivamente, R por ROW=FILA).
Por lo tanto, los bits 2 a 9 del puerto paralelo se pueden conectar a las /Cn, /Fn (n=1,...,4) para mandar a tierra 1 fila y 1 columna. Con esto se seleccionan las dos frecuencias que forman el par DTMF.

Un cuidado importante es asegurar el estado alto en las patillas de entrada (pull-up interno de 10k - 20k).
Recuerden que el puerto paralelo en alto da solo 3 V "y pico" y una corriente de la que no conviene abusar. :eek:
Por suerte el integrado acepta Vcc desde 2.5 V.
Un par de pilas de 1.5V, unas resistencias serie de valor bajo en el puerto, y listo.

Una miradita a la hoja de datos no viene mal. :cool:

Saludos
 
Última edición:
Muchisimas gracias, en especial a Alejandro, no conocia la existencia de ese integrado. hoy voy a ir a comprarlo y a empezar a probarlo,(tartenme de vicioso de la electronica por eso, hoy es My Birthday :p)
 
Muchisimas gracias, en especial a Alejandro, no conocia la existencia de ese integrado. hoy voy a ir a comprarlo y a empezar a probarlo,(tartenme de vicioso de la electronica por eso, hoy es My Birthday :p)

Bueno, bueno, bueno!!! :D

Que los cumplas muy feliz! :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso: :aplauso:

Como regalo de cumple, cuando llegue a casa te subo el código de VB6 que genera los códigos para entrarle al UM95089, y una fotito de mi probador elemental !!! (y)
 
Última edición:
Lo prometido es deuda.
De todos modos tomalo sólo como un "bonus track", porque verás que este pequeño
procedimiento no es nada del otro mundo.

La disposición de pines es tal que:

Código:
Chip   - DB25 
 3       -    2
 4       -    3 
 5       -    4 
 9       -    5 
15      -    6  
14      -    7 
13      -    8 
12      -    9
Lo que sigue es la rutina de teclado. También adjunto el frm completo.
Al final van algunas rutinas que usa adentro.

Código:
Public Sub Command1_Click(Index As Integer)
Dim Puerto As Integer
Dim Comando As Integer

Puerto = 888

Comando = 0
out Puerto, 0

Select Case Index
    Case 0:
        Bit_put 0, Comando
        Bit_put 4, Comando
    Case 1:
        Bit_put 0, Comando
        Bit_put 5, Comando
    Case 2:
        Bit_put 0, Comando
        Bit_put 6, Comando
    Case 3:
        Bit_put 0, Comando
        Bit_put 7, Comando
    
    Case 4:
        Bit_put 1, Comando
        Bit_put 4, Comando
    Case 5:
        Bit_put 1, Comando
        Bit_put 5, Comando
    Case 6:
        Bit_put 1, Comando
        Bit_put 6, Comando
    Case 7:
        Bit_put 1, Comando
        Bit_put 7, Comando
    
    Case 8:
        Bit_put 2, Comando
        Bit_put 4, Comando
    Case 9:
        Bit_put 2, Comando
        Bit_put 5, Comando
    Case 10:
        Bit_put 2, Comando
        Bit_put 6, Comando
    Case 11:
        Bit_put 2, Comando
        Bit_put 7, Comando
    
    Case 12:
        Bit_put 3, Comando
        Bit_put 4, Comando
    Case 13:
        Bit_put 3, Comando
        Bit_put 5, Comando
    Case 14:
        Bit_put 3, Comando
        Bit_put 6, Comando
    Case 15:
        Bit_put 3, Comando
        Bit_put 7, Comando
    
End Select

out Puerto, 255 - Comando
Delay_ms 500
out Puerto, 255

End Sub
 
'----------------------------------------------------
Public Sub Bit_put(ByVal bit As Integer, ByRef reg As Integer)
reg = reg Xor (2 ^ bit)
End Sub

'----------------------------------------------------
' Retraso aproximado a 1 mili segundo
Public Sub Delay_ms(ByVal tiempo As Long)
Dim t As Long, x As Long

For t = 0 To tiempo
For x = 0 To 1000
    DoEvents
Next x
Next t

End Sub

'----------------------------------------------------
' En algún archivo *.bas debe ir esto, para declarar las rutinas de la dll 
' inpout32.dll, que debe estar en la misma carpeta del exe
' Por si no las tenés también las adjunto.
'
Public Declare Function inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer

Public Declare Sub out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
El transistor que se ve en la foto es un tip 31 (medio sobredimensionado) para la salida al parlantito.
 

Adjuntos

  • INPOUT32.zip
    24.1 KB · Visitas: 146
  • DTMF.zip
    962 bytes · Visitas: 148
  • 100_1591_20pc.JPG
    100_1591_20pc.JPG
    60.4 KB · Visitas: 105
  • 100_1589_20pc.JPG
    100_1589_20pc.JPG
    50 KB · Visitas: 84
Última edición:
Hola. Estoy armando un proyecto para la escuela y tenia pensado armar un cochecito a control remoto controlado desde la PC. Tenia pensado para la interfaz usar tonos DTMF, un soft en VB los generaria a traves de la salida de sonido a la cual estaria conectado un transmisor de FM, en el cocchicito estaria un MP3 con radio para la recepcion de los tonos DTMF, a la salida de sonido del MP3 iria un 8870 para detectar el tono y entregar una salida binaria que el PIC detectaria y actuaria en consecuencia.

Mi problema surge en la forma de generar los tonos DTMF, solo se programar en VB y se me ocurrieron dos ideas. La primera, reproducir archivos de audio con los tonos, eso lo se hacer. La segunda era la de generar los tonos con el programa, pero no se si podra hacer en VB y tampoco puedo conseguir los archivos de audio con los tonos DTMF.

desde ya muchas gracias.
Saludos, viendo este comentario, pues en mi pagina encontraran este tipo de aplicación mas un proyecto de ejemplo con PIC16F628A
www.galeon.com/exodusklient/ ;)
 
Debería haber puesto "el par de frecuencias" teniendo en cuenta que son dos. :unsure:

El integrado está pensado para manejarse desde un teclado de hasta 16 teclas: 4 filas x 4 columnas.
Por eso hay 4 patillas 3, 4, 5,y 9 (/C1, /C2, /C3, /C4) con las que se selecciona la frecuencia asociada a la columna de la tecla oprimida. Lo mismo pasa con las patillas 14, 13, 12, 11 que seleccionan la frecuencia asociada a la fila (/R1, /R2, /R3, /R4, respectivamente, R por ROW=FILA).
Por lo tanto, los bits 2 a 9 del puerto paralelo se pueden conectar a las /Cn, /Fn (n=1,...,4) para mandar a tierra 1 fila y 1 columna. Con esto se seleccionan las dos frecuencias que forman el par DTMF.

Un cuidado importante es asegurar el estado alto en las patillas de entrada (pull-up interno de 10k - 20k).
Recuerden que el puerto paralelo en alto da solo 3 V "y pico" y una corriente de la que no conviene abusar. :eek:
Por suerte el integrado acepta Vcc desde 2.5 V.
Un par de pilas de 1.5V, unas resistencias serie de valor bajo en el puerto, y listo.

Una miradita a la hoja de datos no viene mal. :cool:

Saludos

Hola

Podrias explicarme como conectar un teclado 4x4 al integrado 90589, la verdad es que no entiendo el diagrama del datsheet.
gracias
 
Atrás
Arriba