# Interfaz para generar llamada telefonica por tonos DTMF



## Pedro Pihuave (Mar 5, 2010)

Hola con todos primero me disculpo porque me he dado cuenta de que no he realizado aportes al foro y esto es porque recien estoy en proceso de aprendizaje. En esta ocasión tengo una duda sobre el título de este tema estoy realizando una alarma casera, hasta ahí todo bien estoy utilizando el pic 16f628A quería que otra de las características de la alarma sea que genere una llamada telefónica. El circuito para generar la llamada la saque de un libro y el diagrama lo adjunto. Ahora, me he dado cuenta q*UE* los tonos si se generan correctamente porque la primera vez esperé a q*UE* se realize la llamada y no paso nada, después en otro intento, levanté otro teléfono y luego de generados los tonos la línea seguía dando tono de marcado mas no de timbrado (al otro teléfono). Ustedes dirán ya hay muchos temas en este foro al respecto pero la verdad es que no son muy claros para mi, ahora en base a lo que he leído en el foro tengo la sospecha que lo que está fallando es lo que llaman la interfaz o simulación de "teléfono levantado". Esa es mi sospecha pero no se si sea cierta. Les agradezco mucho que me orienten en qué cambios se le pueden hacer a este circuito para que funcione, muchas gracias.


----------



## tecnogirl (Mar 8, 2010)

Pedro, es que tengo la impresion de que el circuito que adjuntas es para lineas telefonicas tipo discado (dial) no para  lineas del tipo tonos (DTMF).

Ahora bien, si efectivamente es para lineas DTMF, donde está el circuito generador de tonos ?, dentro del PIC ?, ahi podria estar la razon de la falla, ya que la generacion PIC de los tonos no es la mejor y entonces el circuito falla.

Saludos


----------



## Pedro Pihuave (Mar 8, 2010)

Gracias por tu respuesta tecnogirl, los tonos si se realizan por medio del PIC he buscado hasta el cansancio sobre el tema y resulta que encontré que si utilizara CI's como el MT8880, para la interfaz necesitaría un transformador de acoplamiento de 600Ohms 1:1 que no consigo por ningún lado, alguna otra manera, o la manera más efectiva para realizar esta interfaz? cualquier guía o ayuda yo los agradezco mucho mucho mucho.


----------



## santiago (Mar 8, 2010)

http://www.pablin.com.ar/electron/circuito/telefon/discdtmf/index.htm

probalo, y busca el datasheet del integrado, este no parece llevar trafo de acoplamiento

saludos

saludos


----------



## tecnogirl (Mar 9, 2010)

El trafo de acoplamiento: lo puedes hacer u obtener en una tienda o taller de telefonia. Saludos.


----------



## Pedro Pihuave (Mar 18, 2010)

Gracias por sus respuestas tecnogirl y santiago, a la final probé lo que  me propusiste en la página de pablin y no funcionó. He intentado tanto y  nada ha dado resultado, es la primera vez que no consigo finalizar un  proyecto pero supongo que para todo hay una primera vez... Conseguí  hacer la llamada telefónica desde mi alarma pero lo hice por pulsos  mediante un relé y el mismo pic que menciono, pero acoplado mi circuito a  un teléfono de esos baratos. Creo que la razón de mi fracaso radica en  lo propuesto por tecnogirl, es decir la generación de estos tonos  mediante un pic, puede ser deficiente, hubiera intentado algun otro  circuito con los generadores propios de tonos DTMF, pero me quedé sin  presupuesto, además, los circuitos que encontré también llevaban el  dichoso transformador de acoplamiento 1:1 de 600Ohms, x acá en una  electrónica me dijeron que me lo fabricarían por casi 20 dólares, pero  eso es mucho para mi como estudiante, entonces no pude hacer ningún  aporte sobre este tema, creo que lo único que puedo decir a quienes  intenten hacer algo parecido es:

NO UTILICEN PICs PARA LA GENERACIÓN DE ESTOS TONOS, y si alguien  necesita ayuda para generar una llamada mediante pulsos... ahí si que  puedo ayudar. saludos y exitos a todos.


----------



## tecnogirl (Mar 19, 2010)

Para que no renuncies a la pelea... mira este tema:
https://www.forosdeelectronica.com/f26/generar-tonos-dtmf-visual-basic-2005-a-32928/
alli, alejandro Sherar sugirio el uso de un chip codificador de DTMF UM95089 .
Por otro lado, se consiguen telefonos muy baratos con chips codificadores DTMF que pudieras aprovechar.

Saludos.


----------



## DATAGENIUS (Dic 28, 2010)

Ja Ja hola a todos... soy nuevo y no he ido a presentarme aun... pero ya voy.

Me gustaría haber podido ayudar antes.... pero no estaba 

Si se puede, yo ya lo hice y me resultó de pelos... es mas, le aplique un chip de voz grabada tipo ISD1750... asi *QU*e, no se desesperen... cometí muchos errores y aprendí, pero, antes *QU*e nada, repite conmigo: NO PUEDO ACEPTAR DEJAR DE INTENTARLO... (Michael Jordan)

Para empezar, si se puede, pero yo use el HT9200 que es muchísimo mas barato y fácil de usar. Lo puedes conectar en modo serial (I2C) o en modo paralelo.

Lo siguiente es saber que para generar DTMF hay que conocer las reglas del juego:
1º.- la duración mínima del tono DTMF es de 70 mili segundos (yo uso 100 ms)
2º.- debes usar una pausa, o interdígito, de igual período de duración entre dígito y dígito.

(apuesto *QU*e no lo sabias... )

Ahora, dibujé a la rápida este esquema unifilar para explicarlo:







Cuando quieras tomar línea, le pides al PIC que active el RELE mediante la R2 (*QU*e se yo... tal vez de 1k) y cuando el RELE se cerró, queda la R2 como impedancia de entrada para la línea telefónica (que la acoplas al circuito mediante un puente de diodos con el positivo hacia el RELE y el negativo hacia la R3 de 100k) y es de 820 ohms. Con esa impedancia baja, tendrás TONO y el voltaje de la línea telefónica desciende de unos 50v a unos 8v mas o menos.

Para acoplar el DTMF prueba 2 cosas:
1º Acoplo directo mediante un condensador desde la pata de salida del DTMF al contacto del RELE con la R1, ó
2º Acoplo indirecto usando un simple "4N26" que es un opto transistor. Se pone el transistor en paralelo a R1 y la salida del DTMF controla al LED interno del 4N26.
 me gusta ayudar, pero que aprendan experimentando... 

Ahora, puedes generar con tu PIC órdenes para que el HT9200 arroje DTMF, lo controlas con la patita CE\. En el dibujo, la línea gruesa entre el PIC y el HT es el bus de datos de 4 bits y la línea delgada son las líneas de control que necesites.

OPCIONAL: Se le puede agregar al circuito propuesto un detector de "respuesta" 

Es que puedes detectar si la llamada tuvo o no respuesta.... 

Pero eso es mas complejo y lo dejamos para mas adelante, ok?

Un saludo a todos y ahora voy a presentarme...


----------



## asherar (Mar 24, 2011)

Microchip tiene algunas notas de aplicacion donde figuran programas de ejemplos.

http://ww1.microchip.com/downloads/en/AppNotes/00616a.pdf

http://ww1.microchip.com/downloads/en/AppNotes/00655a.pdf

http://ww1.microchip.com/downloads/en/AppNotes/00543c.pdf


----------



## DATAGENIUS (Mar 25, 2011)

DATAGENIUS dijo:


> Lo siguiente es saber que para generar DTMF hay que conocer las reglas del juego:
> 1º.- la duración mínima del tono DTMF es de 70 mili segundos (yo uso 100 ms)
> 2º.- debes usar una pausa, o interdígito, de igual período de duración entre dígito y dígito.
> 
> (apuesto que no lo sabias... )



 La explicación que levanté mas arriba, corresponde al resultado de un trabajo que efectué para generar llamadas telefónicas dada cierta situación.

 Los puntos que repito y destaco, son la principal causa de error. Generar DTMF es simple con los chips disponibles, como el que yo usé. El PIC solo le provee de una serie de códigos binarios que el chip traduce en tonos. Pero el discado en centrales públicas y privadas, requiere que se respeten ciertas normas: la duración mínima del tono emitido (70ms) y la duración mínima de un *interdígito*, o pausa entre un dígito y otro (70ms).

Todo esto quiere decir que no se trata de emitir tonos de cada dígito y punto, y creer que saldremos al mundo, *no*. Hay reglas que respetar.

 Lo otro, tiene que ver con tomar línea, es decir, lograr que la línea telefónica alcance el voltaje apropiado para poder transmitir tonos e incluso voz posterior a los tonos. Para ello es necesario usar una R=680 Ω 1w como resistencia de carga. La central telefónica, cuando percibe esta impedancia baja, disminuye la tensión de la línea y con ello permite la comunicación.

 Puedes usar el bosquejo mio como modelo. Si tienes otra duda o algo no te queda claro, puedes seguir planteándolas en este hilo.

 lo olvidaba... más ayuda de como funciona el discado DTMF o PULSO lo puedes encontrar en mi tutorial de telefonía pública desde el post #4 al #8 (y aprovecha de opinar )

Saludos y éxito en tu proyecto


----------



## ricbevi (Mar 25, 2011)

Hola a todos ....DTMF se puede generar mediante software en un PIC. Adjunto como ejemplo una extracción de la ayuda del compilador de Basic Proton Ide para PIC que nativa mente tiene la instrucción DTMFOUT para sacar DTMF por un pin asignado del pic a tal fin y de forma extremadamente sencilla.
Saludos.

Ric.


----------



## cesar Alvarez (Abr 17, 2011)

Muy buen apunte Datagenius.
Ley tu proyecto con cuidado, voy a hacerlo para ver como me funciona,
Me pondre en la tareas de conseguir el HT 9200.
Estuve haciendo algo similar y enn el protoboard con un pic 16f628, me funciono. ( claro que lo trabaje fue con una planta telefonica, y me hacia las marcaciones perfectas. No lo probe directamente a la linea.
Pero cuando hice el circuito impreso y monte los elemento, me dejo viendo estrellas, !! no funciono"" y eso que monte los mismos elementos que tenia en el protoboard.
Bueno seguire luchandole hasta que lo logre.
Gracias por tus aportes.


----------



## DATAGENIUS (Abr 18, 2011)

Gracias Cesar, tal vez te agrade saber que una vez domines lo del discado DTMF se le pueden incorporar otros servicios a tu esquema, por ejemplo, una vez que termine de discar, que sepa el circuito "cuando" respondió al que llamas y a continuación active una voz grabada en algún chip y que finalmente corte la llamada...  también un identificador del RING, que es timbre o corriente de llamada que te avisa de que te están llamando, luego tu sistema contesta automáticamente y reproduce otro mensaje pre grabado... y cosas como esas.

 espero que te resulte tu circuito y repares tu problema del circuito impreso.


----------



## cesar Alvarez (Ago 17, 2011)

HOLA DATAGENIUS.
bueno hasta ahora pude conseguir el integrado ht9200a, ( vivo en BELIZE C.A) pero solo pude conseguir el de 8 pines. el cual es de configuracion serial.
pienzo que he hecho el programa para el pic de acuerdo al data sheet, pero no me genera el tono, Si genera un ruido , pero nada que ver un tono DTMF.
Si pudieras revisar mi codigo por favor y decirme donde esta el error. para que no genere tono.
yo lo entiendo de esta manera.

coloco el clock en alto.
ingreso el codiogo del digito telefonico que quiero marcar.
coloco ahora el clock en bajo (EL DATA SHEET dice que el data ingresa en la transicion alto a bajo 0
doy  un retardo
coloco clock en alto
ingreso codigo del  2do  digito telefonico.
clock en bajo
retardo.
al finalizar el numero de digitos del telefono que quiero marcar, debo ingresar el codigo de stop
el cual es 11111.
adjunto mi programa . gracias por tu ayuda.



	LIST		P=16F876A
	INCLUDE		<P16F876A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_OFF & _XT_OSC




	CBLOCK	0X20
	CONTADOR_BITS				; Cuenta los bits a transmitir o a recibir.
	NUMERO_TELEFONO				; Dato a transmitir o recibido.
	I2C_Flags				; Guarda la información del estado del bus I2C.
	ENDC



#DEFINE CLK	PORTC,7				
#DEFINE DATA	PORTC,6				

	ORG	0X00
	GOTO	Inicio

Inicio
	MOVLW	0X06
	MOVWF	ADCON1
	BSF	STATUS,RP0
	BCF	PORTC,5		;ENABLE
	BCF	PORTC,6		;DATA
	BCF	PORTC,7		;CLOCK
	movlw	0x06
	movwf	ADCON1
	BCF	STATUS,RP0
	BCF	PORTC,5
	BCF	PORTC,6
	BCF	PORTC,7
	GOTO	Principal
;*****************

TABLA
	addwf	PCL,F
	RETLW	B'01010'	;No 0
	RETLW	B'00001'	;No 1
	RETLW	B'00010'
	RETLW	B'00011'
	RETLW	B'00100'
	RETLW	B'00101'
	RETLW	B'00110'
	RETLW	B'00111'
	RETLW	B'01000'
	RETLW	B'01001'	;No 9
	RETLW	B'11111'	;STOP
;********************************
Principal
	BSF	PORTC,5		;ENABLE BAJO = 0 
	CALL	Retardo_1s
	movlw	.0		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.1		;NUMERO_TEL
	CALL	ENVIA
	movlw	.2		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.3		;NUMERO_TEL
	CALL	ENVIA
	movlw	.4		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.5		;NUMERO_TEL
	CALL	ENVIA
	movlw	.6		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.7		;NUMERO_TEL
	CALL	ENVIA
	movlw	.8		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.9		;NUMERO_TEL
	CALL	ENVIA
	CALL	Retardo_200ms

	movlw	.10		;STOP
	CALL	ENVIA
	CALL	Retardo_5s

	GOTO	Principal

ENVIA
	BCF	PORTC,5		;ENABLE
	CALL	TABLA		
	MOVWF	NUMERO_TELEFONO
	CALL	ENV_DIGITO_TEL_BYTE

	RETURN
;**************************************************
ENV_DIGITO_TEL_BYTE
	BCF	PORTC,5
	movwf	NUMERO_TELEFONO		; Almacena el byte a transmitir.
	movlw	0x05			; A transmitir 5 bits.
	movwf	CONTADOR_BITS
ENVIA_BITE
	BSF	CLK			;CLOCK = 1
	rrf	NUMERO_TELEFONO,F	; Chequea el bit, llevándolo previamente al Carry.
	btfsc	STATUS,C
	goto	ENVIA_UNO
ENVIA_CERO
	BCF	DATA			;TRANSMITE 0 AL DATA
	CALL	Retardo_200micros
	BCF	CLK			;CLOCK BAJO = 0	 INGRESA EL DATA
	CALL	Retardo_200micros
	goto	NEXT_BITE		;DESCUENTA UN BITE Y SIGUE
ENVIA_UNO
	BSF	DATA			;TRANSMITE 1 AL DATA 
	CALL	Retardo_200micros
	BCF	CLK			;CLOCK BAJO INGRESA EL DATA
	CALL	Retardo_200micros
NEXT_BITE
	;CALL	Retardo_200micros			
	decfsz	CONTADOR_BITS,F		; DESCUENTA UN BITE
	goto	ENVIA_BITE		; NO ES CERO VUELE AL SIGUIENTE BITE
					; SI YA ES ULTIMO TERMINA
	CALL	Retardo_200micros
	return



;*******************************************
;**************************** Librería "RETARDOS.INC" *********************************
;
;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		www.pic16f84a.com
; 	  Editorial Ra-Ma.  www.ra-ma.es
;	===================================================================
;
; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos. 
; Además se pueden implementar otras subrutinas muy fácilmente.
;
; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal
; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada
; ciclo máquina tarda 4 x 1/4MHz = 1 µs.
;
; En los comentarios, "cm" significa "ciclos máquina".
;
; ZONA DE DATOS *********************************************************************

	CBLOCK
	R_ContA						; Contadores para los retardos.
	R_ContB
	R_ContC
	ENDC
;
; RETARDOS de 4 hasta 10 microsegundos ---------------------------------------------------
;
; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ,
; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina
; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina.
;
Retardo_10micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
Retardo_5micros					; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
Retardo_4micros					; La llamada "call" aporta 2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------
;
Retardo_500micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	movlw	d'164'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_200micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	movlw	d'64'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_100micros				; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'31'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_50micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	movlw	d'14'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_20micros				; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'5'				; Aporta 1 ciclo máquina. Este es el valor de "K".
;
; El próximo bloque "RetardoMicros" tarda:
; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
;
RetardoMicros
	movwf	R_ContA				; Aporta 1 ciclo máquina.
Rmicros_Bucle
	decfsz	R_ContA,F			; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	Rmicros_Bucle		; Aporta (K-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_500micros:	2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
; - Retardo_200micros:	2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
; - Retardo_100micros:	2     + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
; - Retardo_50micros :	2 + 1 + 1 + 2 + (2 + 3K) =  50 cm =  50 µs. (para K= 14 y 4 MHz).
; - Retardo_20micros :	2     + 1     + (2 + 3K) =  20 cm =  20 µs. (para K=  5 y 4 MHz).
;
; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
;
Retardo_200ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'200'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_100ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'100'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_50ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'50'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_20ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'20'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_10ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'10'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_5ms						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'5'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_2ms						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'2'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_1ms						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'1'				; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
	movwf	R_ContB				; Aporta 1 ciclo máquina.
R1ms_BucleExterno
	movlw	d'249'				; Aporta Mx1 ciclos máquina. Este es el valor de "K".
	movwf	R_ContA				; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
	nop							; Aporta KxMx1 ciclos máquina.
	decfsz	R_ContA,F			; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
	goto	R1ms_BucleInterno	; Aporta (K-1)xMx2 ciclos máquina.
	decfsz	R_ContB,F			; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1ms_BucleExterno 	; Aporta (M-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_200ms:	2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms:	2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_50ms :	2 + 1 + 2 + (2 + 4M + 4KM) =  50007 cm =  50 ms. (M= 50 y K=249).
; - Retardo_20ms :	2 + 1 + 2 + (2 + 4M + 4KM) =  20007 cm =  20 ms. (M= 20 y K=249).
; - Retardo_10ms :	2 + 1 + 2 + (2 + 4M + 4KM) =  10007 cm =  10 ms. (M= 10 y K=249).
; - Retardo_5ms  :	2 + 1 + 2 + (2 + 4M + 4KM) =   5007 cm =   5 ms. (M=  5 y K=249).
; - Retardo_2ms  :	2 + 1 + 2 + (2 + 4M + 4KM) =   2007 cm =   2 ms. (M=  2 y K=249).
; - Retardo_1ms  :	2 + 1     + (2 + 4M + 4KM) =   1005 cm =   1 ms. (M=  1 y K=249).
;
; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
;
Retardo_20s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'200'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_10s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'100'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_5s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'50'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_2s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'20'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_1s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'10'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_500ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'5'				; Aporta 1 ciclo máquina. Este es el valor de "N".
;
; El próximo bloque "Retardo_1Decima" tarda:
; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
;   + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
;
Retardo_1Decima
	movwf	R_ContC				; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
	movlw	d'100'				; Aporta Nx1 ciclos máquina. Este es el valor de "M".
	movwf	R_ContB				; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
	movlw	d'249'				; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
	movwf	R_ContA				; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno          
	nop							; Aporta KxMxNx1 ciclos máquina.
	decfsz	R_ContA,F			; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
	goto	R1Decima_BucleInterno	; Aporta (K-1)xMxNx2 ciclos máquina.
	decfsz	R_ContB,F			; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
	goto	R1Decima_BucleExterno	; Aporta (M-1)xNx2 ciclos máquina.
	decfsz	R_ContC,F			; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1Decima_BucleExterno2	; Aporta (N-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_20s:	2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s.
;			(N=200, M=100 y K=249).
; - Retardo_10s:	2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s.
;			(N=100, M=100 y K=249).
; - Retardo_5s:		2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  5000207 cm =  5 s.
;			(N= 50, M=100 y K=249).
; - Retardo_2s:		2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  2000087 cm =  2 s.
;			(N= 20, M=100 y K=249).
; - Retardo_1s:		2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  1000047 cm =  1 s.
;			(N= 10, M=100 y K=249).
; - Retardo_500ms:	2 + 1     + (2 + 4N + 4MN + 4KMN) =   500025 cm = 0,5 s.
;			(N=  5, M=100 y K=249).

;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		www.pic16f84a.com
; 	  Editorial Ra-Ma.  www.ra-ma.es
;	===================================================================





	END


----------



## DATAGENIUS (Ago 17, 2011)

cesar Alvarez dijo:


> HOLA DATAGENIUS.
> bueno hasta ahora pude conseguir el integrado ht9200a, ( vivo en BELIZE C.A) pero solo pude conseguir el de 8 pines. el cual es de configuracion serial.
> pienzo que he hecho el programa para el pic de acuerdo al data sheet, pero no me genera el tono, Si genera un ruido , pero nada que ver un tono DTMF.
> Si pudieras revisar mi codigo por favor y decirme donde esta el error. para que no genere tono.
> ...



 Cesar, parece que te equivocaste...

Mira, hice esmero en dejar claro el procedimiento de la llamada telefónica usando DTMF.

1º La información serial usa el protocolo I2C muy bien explicado en el libro de donde sacaste los retardos.
2º La emisión de "cada dígito" debe durar 70ms como mínimo, luego debes acompañar ese dígito con una pausa de igual duración y luego enviar otro dígito.
3º La conversación entre PIC y HT es serial, por tanto manda ese protocolo. Tienes que decirme si lo estás empleando bien antes de juzgar el porqué no te resulta.

La rutina que mandas es principalmente la configuración base del 16F876A, el envío de datos y las rutinas de retardo... no veo las rutinas de envío I2C, solo tu protocolo de envío

 *OJO, tu dices en tu rutina*:
Principal
BSF	PORTC,5	 ;ENABLE BAJO = 0     => *ERROR*, estas ordenando un 1 (bcf=0)

ENV_DIGITO_TEL_BYTE
BCF	PORTC,5
movwf	NUMERO_TELEFONO	 ; Almacena el byte a transmitir.
*movlw	0x05	 ; A transmitir 5 bits.*
movwf	CONTADOR_BITS

===> No sé porqué solo envías 5 bits...  yo envío los 8, si es que estamos hablando de los 8 bits que compondrán el dígito en el HT

 Bueno, seguimos en conversación....  te des por vencido !


----------



## cesar Alvarez (Ago 18, 2011)

Hola Datahenius.
Si tienes razon, cometi un error en la expresion  BSF PORTC,5 ;ENABLE BAJO = 0 => 
BSF es alto. "de todas manera mi idea es .... desde el comienzo deshabilito el pin 1 CE Negado del HT 9200 Aara que el IC  no funcione.
ya mas adelante lo coloco en bajo para habilitarlo.  

ENV_DIGITO_TEL_BYTE
BCF PORTC,5         creo que con esta expresion  habilito  el funciomiento del HT 9200.
En cuanto al porque envio solamente 5 digitos 

movlw 0x05 ; A transmitir 5 bits.
movwf CONTADOR_BITS

MI RAZON ( no se si estoy equivocado ) es que cada digito de numero telefonico esta compuesto por  5 digitos para generar cada tono ( esto de acuerdo al data sheet )
donde dice 
''''  para generar el tono correspondiente a un numero se  deben ingresar los 5 digitos correspondientes  comenzando desde  D0.
DIGITO	D4	D3	D2	D1	D0	FRECUENCIA
1	0	0	0	0	1	697 + 1209 hz
2	0	0	0	1	0	697 +1336 hz

						etc
						etc
Dtmf 0ff 	1	1	1	1	1	---

Esto es lo que dice el data sheet.
de dat forma que yo envio solamente estos 5 digitos. los almaceno en el buffer y los voy transmitiendo uno por uno ( con rotacion a la derecha ) cada digito ingresa al ht 9200  cuando el pic envia un DATA 0 o  1  en el momento de la transision de alto a bajo del clock.
lo del protocolo I2C  pues lo trate de implementar de acuerdo al libro ( PROYECTOS CON PIC 16F84 EDOITORIAL RAMA).
AHORA BIEN :despues de que coloque el post ,ingrese los tiempos de retardo de 70 ms como tu dices.
bueno pues el HT9200 si genera unos tonos , pero  no se porque NO HACEN LA MARCACION, de acuerdo al numero discado.
PIENZO que si el ht 9200 esta sacando informacion por el pin DTMF  es porque el protocolo I2C esta tranajando ( Si estoy equivocado por favor hasme la acotacion en que lugar tengo mi problema para corregirlo.)

por favor si puedes revisar nuevamente mi codigo y decirme donde estoy equivocado ::: te lo agradecere

CORDIALMENTE 
cesar
;***************************		SERIE_7.ASM	***********************

;

	LIST		P=16F876A
	INCLUDE		<P16F876A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_OFF & _XT_OSC




	CBLOCK	0X20
	CONTADOR_BITS				; Cuenta los bits a transmitir o a recibir.
	NUMERO_TELEFONO				; Dato a transmitir o recibido.
	I2C_Flags				; Guarda la información del estado del bus I2C.
	ENDC



#DEFINE CLK	PORTC,7				
#DEFINE DATA	PORTC,6				

	ORG	0X00
	GOTO	Inicio

Inicio
	MOVLW	0X06
	MOVWF	ADCON1
	BSF	STATUS,RP0
	BCF	PORTC,5		;ENABLE
	BCF	PORTC,6		;DATA
	BCF	PORTC,7		;CLOCK
	movlw	0x06
	movwf	ADCON1
	BCF	STATUS,RP0
	BCF	PORTC,5
	BCF	PORTC,6
	BCF	PORTC,7
	GOTO	Principal
;*****************

TABLA
	addwf	PCL,F
	RETLW	B'01010'	;No 0
	RETLW	B'00001'	;No 1
	RETLW	B'00010'
	RETLW	B'00011'
	RETLW	B'00100'
	RETLW	B'00101'
	RETLW	B'00110'
	RETLW	B'00111'
	RETLW	B'01000'
	RETLW	B'01001'	;No 9
	RETLW	B'11111'	;STOP
;********************************
Principal
	BSF	PORTC,5		;DISABLE 
	CALL	Retardo_1s
	movlw	.6		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.6		;NUMERO_TEL
	CALL	ENVIA
	movlw	.1		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.0		;NUMERO_TEL
	CALL	ENVIA
	movlw	.6		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.8		;NUMERO_TEL
	CALL	ENVIA
	movlw	.6		;NUMERO_TEL
	CALL	ENVIA

	GOTO	Principal	; AQUI LO DEVUELVO A Principal 
				; es provisional , esta rutina sera
				; enviada a un """ espere mientras se da orden de
				; discado""""

ENVIA

	BCF	PORTC,5		;ENABLE  aqui se habilta para que el ht 9200 funcione
	CALL	TABLA		; los 5 digitos correspondientes a la frecuencia cada tono	
	MOVWF	NUMERO_TELEFONO
	CALL	ENV_DIGITO_TEL_BYTE
	CALL	Retardo_1s
				; AQUI ENVIO LA SENAL DE FINAL despues de cada digito
				; marcado,  '''' NO SE SI ES CORRECTO O NO """"
	movlw	.10		;STOP senal de stop de DTMF 
	CALL	TABLA		
	MOVWF	NUMERO_TELEFONO
	CALL	ENV_DIGITO_TEL_BYTE
	RETURN
;**************************************************

;		No utilizo la rutina I2C completa puesto que estoy
;		utilizando el HT 9200 	solo como esclavo
;		por lo tanto no requiero enviar respuesta desde el HT 9200 AL PIC
;		ESO ES LO QUE CREO  !!puedo estar equivocado!!
;*********************************************
ENV_DIGITO_TEL_BYTE
	BCF	PORTC,5			; Habilito ht 9200
	movwf	NUMERO_TELEFONO		; Almacena el byte a transmitir.
	movlw	0x05			; A transmitir 5 bits.(D0 HASTA D4)
	movwf	CONTADOR_BITS
ENVIA_BITE
	BSF	CLK			;CLOCK = 1
	rrf	NUMERO_TELEFONO,F	; Chequea el bit, llevándolo previamente al Carry.
	btfsc	STATUS,C
	goto	ENVIA_UNO
ENVIA_CERO
	BCF	DATA			;TRANSMITE 0 AL DATA
	CALL	Retardo_50ms
	CALL	Retardo_20ms
	BCF	CLK			;CLOCK BAJO = 0	 INGRESA EL DATA
	CALL	Retardo_50ms
	CALL	Retardo_20ms
	goto	NEXT_BITE		;DESCUENTA UN BITE Y SIGUE
ENVIA_UNO
	BSF	DATA			;TRANSMITE 1 AL DATA 
	CALL	Retardo_50ms
	CALL	Retardo_20ms
	BCF	CLK			;CLOCK BAJO INGRESA EL DATA
	CALL	Retardo_50ms
	CALL	Retardo_20ms
NEXT_BITE

	decfsz	CONTADOR_BITS,F		; DESCUENTA UN BITE
	goto	ENVIA_BITE		; NO ES CERO VUELE AL SIGUIENTE BITE


	return



;*******************************************
;**************************** Librería "RETARDOS.INC" *********************************
;
;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		www.pic16f84a.com
; 	  Editorial Ra-Ma.  www.ra-ma.es
;	===================================================================
;
; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos. 
; Además se pueden implementar otras subrutinas muy fácilmente.
;
; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal
; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada
; ciclo máquina tarda 4 x 1/4MHz = 1 µs.
;
; En los comentarios, "cm" significa "ciclos máquina".
;
; ZONA DE DATOS *********************************************************************

	CBLOCK
	R_ContA						; Contadores para los retardos.
	R_ContB
	R_ContC
	ENDC
;
; RETARDOS de 4 hasta 10 microsegundos ---------------------------------------------------
;
; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ,
; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina
; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina.
;
Retardo_10micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
	nop							; Aporta 1 ciclo máquina.
Retardo_5micros					; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
Retardo_4micros					; La llamada "call" aporta 2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------
;
Retardo_500micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	movlw	d'164'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_200micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	movlw	d'64'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_100micros				; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'31'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_50micros				; La llamada "call" aporta 2 ciclos máquina.
	nop							; Aporta 1 ciclo máquina.
	movlw	d'14'				; Aporta 1 ciclo máquina. Este es el valor de "K".
	goto	RetardoMicros		; Aporta 2 ciclos máquina.
Retardo_20micros				; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'5'				; Aporta 1 ciclo máquina. Este es el valor de "K".
;
; El próximo bloque "RetardoMicros" tarda:
; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
;
RetardoMicros
	movwf	R_ContA				; Aporta 1 ciclo máquina.
Rmicros_Bucle
	decfsz	R_ContA,F			; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	Rmicros_Bucle		; Aporta (K-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_500micros:	2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
; - Retardo_200micros:	2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
; - Retardo_100micros:	2     + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
; - Retardo_50micros :	2 + 1 + 1 + 2 + (2 + 3K) =  50 cm =  50 µs. (para K= 14 y 4 MHz).
; - Retardo_20micros :	2     + 1     + (2 + 3K) =  20 cm =  20 µs. (para K=  5 y 4 MHz).
;
; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
;
Retardo_200ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'200'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_100ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'100'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_50ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'50'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_20ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'20'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_10ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'10'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_5ms						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'5'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_2ms						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'2'				; Aporta 1 ciclo máquina. Este es el valor de "M".
	goto	Retardos_ms			; Aporta 2 ciclos máquina.
Retardo_1ms						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'1'				; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
	movwf	R_ContB				; Aporta 1 ciclo máquina.
R1ms_BucleExterno
	movlw	d'249'				; Aporta Mx1 ciclos máquina. Este es el valor de "K".
	movwf	R_ContA				; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
	nop							; Aporta KxMx1 ciclos máquina.
	decfsz	R_ContA,F			; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
	goto	R1ms_BucleInterno	; Aporta (K-1)xMx2 ciclos máquina.
	decfsz	R_ContB,F			; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1ms_BucleExterno 	; Aporta (M-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_200ms:	2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms:	2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_50ms :	2 + 1 + 2 + (2 + 4M + 4KM) =  50007 cm =  50 ms. (M= 50 y K=249).
; - Retardo_20ms :	2 + 1 + 2 + (2 + 4M + 4KM) =  20007 cm =  20 ms. (M= 20 y K=249).
; - Retardo_10ms :	2 + 1 + 2 + (2 + 4M + 4KM) =  10007 cm =  10 ms. (M= 10 y K=249).
; - Retardo_5ms  :	2 + 1 + 2 + (2 + 4M + 4KM) =   5007 cm =   5 ms. (M=  5 y K=249).
; - Retardo_2ms  :	2 + 1 + 2 + (2 + 4M + 4KM) =   2007 cm =   2 ms. (M=  2 y K=249).
; - Retardo_1ms  :	2 + 1     + (2 + 4M + 4KM) =   1005 cm =   1 ms. (M=  1 y K=249).
;
; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
;
Retardo_20s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'200'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_10s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'100'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_5s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'50'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_2s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'20'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_1s						; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'10'				; Aporta 1 ciclo máquina. Este es el valor de "N".
	goto	Retardo_1Decima		; Aporta 2 ciclos máquina.
Retardo_500ms					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'5'				; Aporta 1 ciclo máquina. Este es el valor de "N".
;
; El próximo bloque "Retardo_1Decima" tarda:
; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
;   + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
;
Retardo_1Decima
	movwf	R_ContC				; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
	movlw	d'100'				; Aporta Nx1 ciclos máquina. Este es el valor de "M".
	movwf	R_ContB				; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
	movlw	d'249'				; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
	movwf	R_ContA				; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno          
	nop							; Aporta KxMxNx1 ciclos máquina.
	decfsz	R_ContA,F			; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
	goto	R1Decima_BucleInterno	; Aporta (K-1)xMxNx2 ciclos máquina.
	decfsz	R_ContB,F			; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
	goto	R1Decima_BucleExterno	; Aporta (M-1)xNx2 ciclos máquina.
	decfsz	R_ContC,F			; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1Decima_BucleExterno2	; Aporta (N-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_20s:	2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s.
;			(N=200, M=100 y K=249).
; - Retardo_10s:	2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s.
;			(N=100, M=100 y K=249).
; - Retardo_5s:		2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  5000207 cm =  5 s.
;			(N= 50, M=100 y K=249).
; - Retardo_2s:		2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  2000087 cm =  2 s.
;			(N= 20, M=100 y K=249).
; - Retardo_1s:		2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  1000047 cm =  1 s.
;			(N= 10, M=100 y K=249).
; - Retardo_500ms:	2 + 1     + (2 + 4N + 4MN + 4KMN) =   500025 cm = 0,5 s.
;			(N=  5, M=100 y K=249).

;	===================================================================
;	  Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;	  E. Palacios, F. Remiro y L. López.		www.pic16f84a.com
; 	  Editorial Ra-Ma.  www.ra-ma.es
;	===================================================================





	END


----------



## DATAGENIUS (Ago 18, 2011)

Ufff, mucho código... 

 mira, reconozco que tienes razón con lo de enviar 5 bits por dígito DTMF 

 Ahora, como estoy cansadito del trabajo, solo me alcancé a dar cuenta del siguiente error:

; AQUI ENVIO LA SENAL DE FINAL despues de cada digito
; marcado, '''' NO SE SI ES CORRECTO O NO """"
*movlw	.10	 ;STOP senal de stop de DTMF* 

La data exige que emitas 5 "unos" (11111)

 para que te aparezcan puros "unos" mejor pon:

*movlw	.255	 ;STOP senal de stop de DTMF* 

Así te aparece el código b'11111111' del cual solo envías los 5 primeros bits 

 El .10 equivale en binario a b'00001010'

Que tal si lo pruebas así y vemos qué pasa? 

La próxima vez, no es necesario que listes todo el programa. Evita las rutinas de Retardos, ya están archi probadas.

Nos leemos


----------



## cesar Alvarez (Ago 23, 2011)

hola Datagenius.
lamento la demora en la respuesta sucede que hace unos dias tuve una cirugia de vesicula, y no me habia sentido bien  , para sentarme al  computador, PERO bueno aqui estoy hoy.

gracias por tu interes, de acuerdo a lo que me dices de el  STOP.
Si observas la expresion,
   movlw .10                          ;STOP senal de stop de DTMF 
   CALL TABLA 

aqui la rutina se dirige a la tabla donde busca la posicion  10.

RETLW   B'11111'            desde aqui me envia  Los cinco digitos de senal STOP.
por lo tanto creo que estoy enviando el codigo correcto, 

De todas maneras gracias por tu ayuda y tu interes en este proyecto.
seguire trabajandolo hasta que lo logre
cordialmente

cesar







































































































































































































































































































































++


----------



## cesar Alvarez (Ago 24, 2011)

A todos los integrantes y al administrador de este foro.

Quiero Disculparme, ya que al colocar el anterior post, algo sucedio con el teclado de mi pc, y envie un monton de espacio en blanco.lo cual se ve terrible.
Disculpenme por favor . Fue un accidente.

Cordialmente

Cesar


----------



## cesar Alvarez (Ago 25, 2011)

Hola Datagenius:
Buenas Noticias  
!!!!!!!!!!!!!   EUREKA  !!!!!!!!!!!!!!!!! funciono,
ya pude generar los tonos con el HT9200A (serial)
quiero darte las gracias por tu aporte y gran colaboracion, fuiste mi faro de luz.
quiero hacerte una pregunta ??? has trabajado con el MT 8888C. 
ESTE ES UN TRANSEIVER que puede generar, transmitir y recibir tonos DTMF.
si pudieras ayudarme .. mira no he logrado configurar el programa para conectarlo con el pic.... de acuerdo al data sheet  no he podido entender como ingresar a registro STATUS de este (m8888c), para darle la orden de generar un determinado Tono.
otra cosa ??? como puedo detectar que al otro lado de la linea me han contestado???.
generalmente esto es por inversion de polaridad en la linea , pero aqui en Belize no usan ese sistema.

de que otra manera podria detectar que la llamada fue contestada, o esta ocupada la linea????
te agradesco mucho.

aqui publico mi programita ,. tal vez a alguien le interese, 
;*************************	SERIE_12.ASM	***************************
;**********************		SERIE_11.ASM	****************
;**********************************	serie_10.asm	********************
;************************************	SERIE_9.ASM	*********************
;***************************		SERIE_7.ASM	***********************

;

	LIST		P=16F876A
	INCLUDE		<P16F876A.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_OFF & _XT_OSC

;;;;	ME FUNCIONO PERFECTO HIZO LA MARCACION A MI CELULAR
;		CIRCUITO EN PULSONIX  EJEMPLOS   ALARMA TELEFONO OK


;;;;	De acuerdo al uso que se le vaya a dar, habra que hacer una rutina para que vaya a principal
;; 	y marque el numero telefonico que uno quiere.

;	cuando el numero marcado  conteste se le asignara alguna tarea, ya sea un mensaje de VOZ
;;	u otra cosa, de igual manera tan pronto termine, enviar el micro y el HT9200 a reposo
;	hasta un nuevo evento que lo dispare nuevamente.

;	este programa es solamente para ver como se hace la marcacion por TONOS, con 
;	un HT 9200A (SERIAL)
;	Utilizando protocolo I2C.
;	ESPERO USTEDES LO MEJOREN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	CBLOCK	0X20
	CONTADOR_BITS				; Cuenta los bits a transmitir o a recibir.
	NUMERO_TELEFONO				; Dato a transmitir o recibido.
	I2C_Flags				; Guarda la información del estado del bus I2C.
	ENDC



#DEFINE CLK	PORTC,7		;CLOCK para el HT 9200			
#DEFINE DATA	PORTC,6		; DATA PARA EL HT 9200			

	ORG	0X00
	GOTO	Inicio

Inicio
	MOVLW	0X06
	MOVWF	ADCON1
	BSF	STATUS,RP0
	BCF	PORTC,5		;ENABLE
	BCF	PORTC,6		;DATA
	BCF	PORTC,7		;CLOCK
	movlw	0x06
	movwf	ADCON1
	BCF	STATUS,RP0
	BCF	PORTC,5
	BCF	PORTC,6
	BCF	PORTC,7
	BSF	CLK
	GOTO	Principal
;***************************************
;	TABLA PARA SELECCIONAR EL DIGITO TELEFONICO A MARCAR;

TABLA
	addwf	PCL,F
	RETLW	B'01010'	            ;No 0
	RETLW	B'00001'	            ;No 1
	RETLW	B'00010'              ;No 2
	RETLW	B'00011'              ;No 3
	RETLW	B'00100'
	RETLW	B'00101'
	RETLW	B'00110'
	RETLW	B'00111'             ;No 7
	RETLW	B'01000'             ;No 8
	RETLW	B'01001'	           ;No 9
	RETLW	B'11111'	           ;STOP 
;********************************
Principal
	BSF	PORTC,5		;DISABLE HT 9200
	CALL	Retardo_1s
	movlw	.6		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.6		;NUMERO_TEL
	CALL	ENVIA
	movlw	.1		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.0		;NUMERO_TEL
	CALL	ENVIA
	movlw	.6		;NUMERO_TEL
	CALL	ENVIA
	MOVLW	.8		;NUMERO_TEL
	CALL	ENVIA
	movlw	.6		;NUMERO_TEL
	CALL	ENVIA



	call	Retardo_5s	; despues de estos retardo vuelve a principal
	call	Retardo_10s	; y marca de nuevo el numero de tel
				; aqui hay que colocar al micro en reposo
				; hasta que un nuevo evento lo active
				; y haga la marcacion telefonica de nuevo

	GOTO	Principal	             ; AQUI LO DEVUELVO A Principal 
				; es provisional , esta rutina sera
				; enviada a un """ espere mientras se da orden de
				; discado""""

ENVIA

	BCF	PORTC,5		       ;ENABLE  aqui se habilta para que el ht 9200 funcione

	CALL	TABLA		      ; los 5 digitos correspondientes a la frecuencia cada tono	
	MOVWF	NUMERO_TELEFONO
	CALL	ENV_DIGITO_TEL_BYTE
	CALL	Retardo_1s
				     ; AQUI ENVIO LA SENAL DE FINAL despues de cada digito
				     ; marcado,  '''' """"
	movlw	.10		     ;STOP senal de stop de DTMF 
	CALL	TABLA		
	MOVWF	NUMERO_TELEFONO
	CALL	ENV_DIGITO_TEL_BYTE
	RETURN
;**************************************************

;		No utilizo la rutina I2C completa puesto que estoy
;		utilizando el HT 9200 	solo como esclavo
;		por lo tanto no requiero enviar respuesta desde el HT 9200 AL PIC
;		;*********************************************
ENV_DIGITO_TEL_BYTE
	BCF	PORTC,5			; Habilito ht 9200

	movwf	NUMERO_TELEFONO		; Almacena el byte a transmitir.
	movlw	0x05			           ; A transmitir 5 bits.(D0 HASTA D4)
	movwf	CONTADOR_BITS
ENVIA_BITE
	BSF	CLK			          ;CLOCK = 1
	rrf	NUMERO_TELEFONO,F	         ; Chequea el bit, llevándolo previamente al Carry.
	btfsc	STATUS,C
	goto	ENVIA_UNO
ENVIA_CERO
	BCF	DATA			          ;TRANSMITE 0 AL DATA
	CALL	Retardo_50ms
	CALL	Retardo_20ms

	BCF	CLK			       ;CLOCK BAJO = 0	 INGRESA EL DATA

	CALL	Retardo_20ms

	goto	NEXT_BITE		       ;DESCUENTA UN BITE Y SIGUE
ENVIA_UNO
	BSF	DATA			       ;TRANSMITE 1 AL DATA 
	CALL	Retardo_50ms
	CALL	Retardo_20ms

	BCF	CLK			        ;CLOCK BAJO INGRESA EL DATA

	CALL	Retardo_20ms
NEXT_BITE

	decfsz	CONTADOR_BITS,F		; DESCUENTA UN BITE
	goto	ENVIA_BITE		; NO ES CERO VUELE AL SIGUIENTE BITE
			                         ;
	RETURN

;;;;;;;			OJO FALTAN LOS RETARDOS ;;;;;;;;;;;

;*******************************************
;;;;;		LOS RETARDOS LOS PODRAN SACAR DEL ANTERIOR POST DONDE SE ENCUENTRA
;;;;;		LA LIBRERIA DE RETARDOS;;;



	END


----------



## DATAGENIUS (Ago 27, 2011)

cesar Alvarez dijo:


> Hola Datagenius:
> Buenas Noticias
> !!!!!!!!!!!!!   EUREKA  !!!!!!!!!!!!!!!!! funciono,
> ya pude generar los tonos con el HT9200A (serial)


 Te felicito Cesar... solo falta que expongas qué hiciste para que al fin te funcionara... esa es una de las necesidades del foro, retro alimentarse de experiencias y resultados, sean buenos o malos 



cesar Alvarez dijo:


> quiero hacerte una pregunta ??? has trabajado con el MT 8888C.
> ESTE ES UN TRANSEIVER que puede generar, transmitir y recibir tonos DTMF.
> si pudieras ayudarme .. mira no he logrado configurar el programa para conectarlo con el pic.... de acuerdo al data sheet  no he podido entender como ingresar a registro STATUS de este (m8888c), para darle la orden de generar un determinado Tono.


 no, desgraciadamente no me ha tocado usarlo para nada. Pero dame algo de tiempo, por que me interesa, de meterme en la data y familiarizarme con el y así darte alguna ayudita 




cesar Alvarez dijo:


> otra cosa ??? como puedo detectar que al otro lado de la linea me han contestado???.
> generalmente esto es por inversion de polaridad en la linea , pero aqui en Belize no usan ese sistema.
> 
> de que otra manera podria detectar que la llamada fue contestada, o esta ocupada la linea????


 bueno, lo otro que he visto que se ha usado en algunas aplicaciones telefónicas es identificar la "voz", para ello se utiliza un filtro pasa banda al rango de la voz (300Hz a 3Khz) y la salida de este filtro es aplicado a un Schmitt Trigger, de tal forma que el reconocimiento de voz se traduzca en un pulso digital que el PIC puede reconocer como que han contestado. La respuesta es similar a la del gráfico mostrado en esta web. Ahí te puedo orientar pues recuerdo un viejo proyecto experimental al respecto 
Respecto al tono ocupado solo se me ocurre otro filtro a la frecuencia del TO y su cadencia o intermitencia... pero se necesita un osciloscopio 



cesar Alvarez dijo:


> aqui publico mi programita


 Lueguito lo analizo... salgo y vuelvo


----------



## cesar Alvarez (Ago 30, 2011)

OK Datagenius.
Permiteme lo depuro un poquito. lo mejoro, y lo subo al foro.
"" por cierto no se como subir un esquema electronico  , para poder mostrar el circuito de la linea telefonica al pic y al DTMF."" podrias indicarme como hacrlo por favor?.
Gracias

Cesar


----------



## DATAGENIUS (Ago 30, 2011)

cesar Alvarez dijo:


> OK Datagenius.
> Permiteme lo depuro un poquito. lo mejoro, y lo subo al foro.
> "" por cierto no se como subir un esquema electronico  , para poder mostrar el circuito de la linea telefonica al pic y al DTMF."" podrias indicarme como hacrlo por favor?.
> Gracias
> ...



 Depende de tu formato... yo hago dibujos y subo el archivo con las herramientas del foro.

También las subo a un servidor aparte del foro y pego los enlaces con el código IMG... no sé si sabes de eso, tal vez otro forista sea más didáctico al respecto o algún moderador te oriente mejor 

Como sea, sé que lo lograrás


----------



## Asterix007 (Sep 29, 2011)

Hola gente, vengo siguiendo este hilo desde hace ya algun tiempo, y estaria buenisimo que puedan subir el circuito que sí funciono, ya que me encuentro con el mismo problema...Gracias por el aporte!!


----------



## elradista (Oct 14, 2011)

Hola, soy nuevo en el foro y estoy totalmente interesado en intercambiar conocimientos de electrónica, le he dado un seguimiento al tema del DTMF, y CESAR hizo un apunte importante del cual quiero saber, y es sobre como saber cuando te dan respuesta de la llamada. 
 Bueno también desearía una ayudita sobre los puertos FXO y FXS.
Estoy tratando de incorporarle un puerto FXO a una motherboard de una PC.


----------



## DATAGENIUS (Oct 14, 2011)

elradista dijo:


> Hola, soy nuevo en el foro y estoy totalmente interesado en intercambiar conocimientos de electrónica, le he dado un seguimiento al tema del DTMF, y CESAR hizo un apunte importante del cual quiero saber, y es sobre como saber cuando te dan respuesta de la llamada.
> Bueno también desearía una ayudita sobre los puertos FXO y FXS.
> Estoy tratando de incorporarle un puerto FXO a una motherboard de una PC.



 Hola, mucho gusto en conocerte y bienvenido a participar en este hilo... si entendí bien tus consultas, te respondo.

 Respecto a como datectar la respuesta a la llamada, en el hilo se enseñó que se usan 2 métodos:
*1º por reversión de polarida* (el más usado)
*2º por detección de voz* (muy poco usado)

 Acerca de los puertos FXO y FXS te puede servir esta información o esta otra como base.

 Para implementarla al PC no lo sé, a menos que lo trabajes por puerto COM con el chip MAX232 como interfaz de un sistema externo.

Que estes bien...


----------



## cesar Alvarez (Oct 15, 2011)

Hola Bienvenido al Foro.
Bueno yo he  estado experimentando diferentes formas de detectar cuando la llamada ha sido contestada.
por inversion de polaridad no es muy factible, si la empresa de telefonia no suministra este servicio.
por deteccion de voz,  no pude hacerlo tampoco.
Intente con call in progress del MT 8888 . Pero no fui capaz de configuralo para usarlo con  el Microcontrolador, Falle en las rutinads de comunicacion entre el MT 8888 y el PIC.


  A  punta de prueba y error me arme un circuitico basado en el LM 386.y el HT 9200A como Generador de DTMF.

Despues de que el pic  envia la informacion de el numero telefonico que desamos marcar, al HT 9200.
El HT 9200 Genera los correspondientes DTMF hacia la linea telefonica ,Cuando se han  marcado los correspondientes numeros, y al otro lado comienza a timbrar . Parte de esta senal  la tomo y se la envio al lm 386. Con un juego de Condensadores... logre que cada que se genera una timbrada ( o senal de Ocupado ) Un condensador ( el cual se mantiene en 5 Volts Cargado  M ientras no haya senal )  Buena por cada timbrada el condensador trata de descargarse y llegar a 0 Volts, Pues Bien cuando deja de timbrar es porque '""" Alguien Contesto, ahora la cosa es que no se  distingue si es una persona quien contesta o un answer  machine bueno por ahora no me importa ) Como decia al dejar de timbrar el condensador vuelve a cargarse a 5 Volts. BUENO pues esta senal de cinco voltios la envio al pic ( el pic se pregunta BTFSS     PORT,XX  ).  y si la trespuesta es QUE SI HAY 5 VOLTIOS.
Entonces lo mandaria a hacer un trabajo, por ejemplo activar una gravacion de voz y enviarla a la linea telefonica.

Mi circuito es una locura, no esta calculado a base de matematicas,  sino como dije anteriormente  "" Prueba y error "".
Pero por lo menos en mi protoboard me esta funcionando.

Voy a tratar de subir mis diagramas para que puedas verlos, " dame un tiempito a ver como lo logro"

Un saludo

cesar

Respondiendo Al tema de deteccion de llamada Contestada .
Aqui estoy tratando de subir El circuito para tal fin.
espero que lo entienda, de todas manera aqui estoy para lo que pueda colaborar

cesar


----------



## DATAGENIUS (Oct 15, 2011)

cesar Alvarez dijo:


> Hola Bienvenido al Foro.
> Bueno yo he  estado experimentando diferentes formas de detectar cuando la llamada ha sido contestada.
> por inversion de polaridad no es muy factible, si la empresa de telefonia no suministra este servicio.



 Hola Cesar... nos hemos perdido un poco verdad 

Mira respecto al asunto de la factibilidad de la reversión, estoy muy de acuerdo en que depende de las centrales de telefonía de cada lugar... nada que hacer, cuando el servicio está, está... si no está, estamos fritos 



cesar Alvarez dijo:


> por deteccion de voz,  no pude hacerlo tampoco.



 Me extraña que al respecto no pidieras ayuda u orientación... verás, el sistema de detección de voz consiste básicamente en un filtro activo pasa banda de 4º orden, el que hay que diseñar para que al detectar una banda estrecha de frecuencia de 2KHz se active generando un nivel lógico 1, porqué  por que el tono TIM es de alrededor de 400Hz, las frecuencias del DTMF son de entre los 600Hz y 1600Hz y el rango de frecuencias que pueden pasar por la línea telefónica sin atenuación va desde los 300Hz a los 3KHz (que es el rango del ancho de banda de la voz humana). Entonces, el filtro rechaza las frecuencias menores antes indicadas y se satura a frecuencias de alrededor de los 2KHz. Esa saturación la podemos aprobechar para generar un nivel lógico que signifique *HAY RESPUESTA* 




cesar Alvarez dijo:


> Mi circuito es una locura, no esta calculado a base de matematicas,  sino como dije anteriormente  "" Prueba y error "".
> Pero por lo menos en mi protoboard me esta funcionando.



 nada de raro en un electrónico nato... te comprendo perfectamente bien 

 Antes que se me olvide... en este sitio hay un ejemplo de filtro activo de 4º orden, el que se crea a partir de un filtro activo pasa altos y a continuación uno pasa bajos... ambos calculados a 2KHz y solo falta un operacional más, al final, para saturar a Vcc cuando detecte una señas de ese rango y aplicarla a una entrada lógica... (en teoria anda )

Nos vemos


----------



## elradista (Oct 15, 2011)

Hola DATAGENIUS, para el filtro que aparece en el sitio puede usarse el LM741


----------



## DATAGENIUS (Oct 15, 2011)

elradista dijo:


> Hola DATAGENIUS, para el filtro que aparece en el sitio puede usarse el LM741



 Por su puesto...  solo recuerda que ese funciona con fuente dual...  una alternativa para funte simple es el LM358, que además es doble y así usas menos componentes 

Además, queria colaborar con un croquis para entender un poco mejor lo del Filtro Pasa Banda antes mencionado.







Saludos a todos


----------



## cesar Alvarez (Oct 15, 2011)

Nuevo intento de subir dioagrama del circuito

Bueno parece  que en este  intento si pude subir el diagrama de circuito. 

datagenius   Analizalo y me cuentas que opina.
Hasta el momento me esta funcionando bien

Cesar

Segun el cuadro de gestion de archivos adjuntos.
aparentemente ya subio el archivo del diagrama, pero   NO SE ADONDE FUE A  PARAR.
 Me dice que es de  29.0 Kbytes   y se llama 
ALARMA_TE_3A.png

Pero no se donde quedo.
Bueno veo que me quedo grande subior archivos al foro.
Otro dia lo intentare de nuevo


----------



## DATAGENIUS (Oct 15, 2011)

cesar Alvarez dijo:


> Nuevo intento de subir dioagrama del circuito



 Haber, te ayudo... trata de convertirlo en imágen jpg de hasta 400Kb... si es más pesada la comprimes sin que supere los 2Mb... para ambos casos puedes usar el "clip" al lado de la carita amarilla en las barras de herramientas de la ventana de texto cuando respondes en el foro... la adjuntas bajo esas condiciones y la puedes subir...






Vamos, tu puedes :buenpost:


----------



## cesar Alvarez (Oct 15, 2011)

Hola  DATAGENIUS.  Veo que potr fin lo logre Bueno Muchas gracias por tu paciencia.


----------



## elradista (Oct 15, 2011)

Hola, hay una cosa que no entiendo y que si las Sx en los PIN Tin y Tout, asi co en los Rin y Rout del MAX232 pueden ser analógica y/o digitales???

yo tengo una PC que tiene un puerto con 4 PIN analógicos y como 32 Digitales, entonces quiero usar ese puerto para incorporarle un puerto FXO......


----------



## DATAGENIUS (Oct 15, 2011)

elradista dijo:


> Hola, hay una cosa que no entiendo y que si las Sx en los PIN Tin y Tout, asi co en los Rin y Rout del MAX232 pueden ser analógica y/o digitales???
> 
> yo tengo una PC que tiene un puerto con 4 PIN analógicos y como 32 Digitales, entonces quiero usar ese puerto para incorporarle un puerto FXO......



 Llevo 10 o 15 minutos tratando de entenderte... te pido que luego que escribas revises tu mensaje y asegúrate por favor que todos podamos entender...

Te sugiero que vuelvas a re editar tu post...





cesar Alvarez dijo:


> datagenius   Analizalo y me cuentas que opina.
> Hasta el momento me esta funcionando bien



 Bueno Cesar, si te funciona  sin embargo, me gustaría saber que pasa con tu circuito en otras ocaciones como cuando generas DTMF... esa señal, retorna también al LM386 ?

Otra cosa, si al cesar el timbre que tu estas detectando, aparece una señal inmediata que es la de la voz humana, cómo reacciona en este caso?

Continúa cargado el condensador en estos casos que te planteo ? 

Por último, la impedancia de línea telefónica principal, está dada por la R=220Ω a continuación del circuito puente... no es tan relevante, pero considero que está un poquito baja... según mi experiencia, debería ser de unos 680Ω prox. y verásque discipa menos potencia.

Pero repito, si te funciona  tengo solamente que aprender de ti


----------



## elradista (Oct 15, 2011)

Bien, gracias por el consejo, lo tendré en cuenta para los próximos mensajes.

A lo que me refiero es que si yo puedo usar señales analógicas con el MAX232 en los pines T1IN; T2IN; R1IN; R2IN; T1OUT; T2OUT; R1OUT y R2OUT. La cuestion es que tengo una PC con un puerto que tiene 4 pines analógicos y el resto son digitales, y la idea es usar ese puerto como FXO


----------



## DATAGENIUS (Oct 15, 2011)

elradista dijo:


> Bien, gracias por el consejo, lo tendré en cuenta para los próximos mensajes.
> 
> A lo que me refiero es que si yo puedo usar señales analógicas con el MAX232 en los pines T1IN; T2IN; R1IN; R2IN; T1OUT; T2OUT; R1OUT y R2OUT. La cuestion es que tengo una PC con un puerto que tiene 4 pines analógicos y el resto son digitales, y la idea es usar ese puerto como FXO



 Ahora nos estamos entendiendo 

 Mira, hasta donde yo sé, el único uso del MAX232 es en transmisión de datos digitales según la norma de transmisión RS-232, la que te sugiero que repases o estudies un poco para entender sus alcances :estudiando:

 Otro aspecto, es que en el MAX323 hay pines para entrada y salida de datos (en correspondencia a la norma) y los otros pines, son un arreglo para que el chip pueda elevar el voltaje de 5 a unos +-15v (normalmente es poco menos) por un asunto de hacerlo inmune a la inducción de ruidos.

Pero si alguien haya logrado usarlo como tu quisieras...


----------



## elradista (Oct 16, 2011)

mira estuve en un sitio web en el cual explicaban algo pero no me satisface, te dejo en link para que chequees la información.....
http://www.iearobotics.com/proyectos/cuadernos/ct1/ct1.html


----------



## DATAGENIUS (Oct 16, 2011)

elradista dijo:


> mira estuve en un sitio web en el cual explicaban algo pero no me satisface, te dejo en link para que chequees la información.....
> http://www.iearobotics.com/proyectos/cuadernos/ct1/ct1.html



 Pues, no sé que es lo que no entendiste... pues está re-clarito... te recomiendo que sigas investigando y también usa el buscador del foro...

 Otra cosa, para poder estudiarlo, debes sacarte de la mente ideas pre concebidas del chip, este hace aquello para lo cual fue creado...

 Debes definir bien lo que quieres y plantearlo lo más claro posible, pero no te sorprenda que para hallarlo debas estudiar mucho... a todos nos ha tocado hacerlo así...

Que estés bien


----------



## cesar Alvarez (Oct 17, 2011)

Bueno Datagenius.
Lo que dices ers cierto.
Pero de acuerdo al programa del Microcontrolador,  "" despues de marcar el numerop telefonico asignado, inmediatamente el micro entrara a preguntar como esta el pin al que llega la salida del LM386 ( via condensador).BTFSS PN XX .  De acuerdo a la  Respuesta Lo enviara a realizar el trabajo de Enviar un mensaje via telefonica , o una senal de alarma.
Si la respuesta es negativa , quiere decir que la linea esta ocupada  o nadie contesto. En cuyo caso debera ir a buscar otro numrero telefonico para hacer la marcacion.
Ahora bien  Durante la generacion de DTMF No presenta ningun incoveniente. NI con la voz al contestar.
En cuanto a la tesistencia. Tienes  razon.  Lo que sucede es que como decia con los condensadores "" Arme el circuito con lo que tenia a manao.".
Para El ensamble en el impreso  buscare otros elementos.

Gracias

Cesar


----------



## retrofit (Oct 17, 2011)

Buenas tardes. Hace unos días que vengo siguiendo este hilo, os quería comentar algo que seguramente os resoverá algún problema.
Primero os comento que por necesidades  y petición de amistades y en colaboración con una asociación de barrio de ayuda a la Tercera Edad, hemos hecho unos equipos de tele asistencia que se reparten entre los más necesitados.
Al principio se nos presentó el problema de que después de la llamada, teníamos que detectar que alguien descolgaba para empezar a mandar el mensaje de ayuda.
Pero esto lo resolvimos de la forma siguiente...
El equipo, al activarse la emergencia secuencialmente se producen los siguientes sucesos...
1º El equipo pormedio de un relé activa la línea telefónica.
2º Espera 10 segundos.
3º Marca el primer número de la tabla, puede tener hasta 8 números programados.
4º Espera 10 segundos
5º Empieza a enviar el mensaje previamente grabado..... "Soy don Manuel blablabla, y necesito ayuda"
    el mensaje termina diciendo "Por favor marque varias veces el 9 y cuelgue"
6º Si el equipo recibe un 9 interpreta que el mensaje ha sido recibido y cuelga.
    En caso de que no reciba un 9, y a los treinta segundos de haber realizado la llamada el equipo
    cuelga y llama al segundo número de la lista.

Esto es básicamente el protocolo de funcionamiento.
Parece que el procediniento es algo simplista pero os aseguro que en la práctica funciona muy bien, puede pasar que al descolgar el teléfono el interlocutor empieze a oir el mensaje por la mitad, pero enseguida lo oirá entero ya que el mismo se está repitiendo constantemente hasta que el equipo corte la llamada o se marque el 9. tambien hay que tener en cuenta que a donde se llama suele ser un familiar o conocido y ya conoce el protocolo.
La misma idea se puede utilizar para mandar datos DTMF, no hay que esperar para asegurarnos que se responde a la llamada, basta con enviar los datos seguidos separados por un pequeño intervalo hasta que el el otro equipo nos conteste con algun datos establecido y entonces sabremos que ya hay enlace.
Espero que este claro y pude servir de ayuda.

Saludos.


----------



## DATAGENIUS (Oct 17, 2011)

cesar Alvarez dijo:


> Bueno Datagenius.
> Lo que dices ers cierto.
> 
> Ahora bien  Durante la generacion de DTMF No presenta ningun incoveniente. NI con la voz al contestar.
> ...



 Gracias Cesar, aumentas mis opciones   Que bueno que superaste el tema de la inmunidad al DTMF y a la voz... pero recuerda que esa parte pudo haber sido un tema de decibeles correctos...

Estamos al tanto, felicidades 



 Muchas, muchas gracias EB4GBF por compartir con nosotros tu proyecto tan interesante 

 No es ni tan simplista, tiene su ciencia y lo mejor... es que funciona 

Da por hecho que tu proyecto nos dará ideas para incorporar o mejorar nuestros propios proyectos, del mismo modo que lo nuestro espero en algo te beneficie 

Bien venido al hilo y a seguir participando


----------



## elradista (Oct 30, 2011)

Hola DATAGENIUS 
gracias por el croquis del filtro....me sirve para montar algo que quiero hacer...gracias y un saludo


----------



## victor330 (Ene 30, 2012)

hola nombre es victor gonzalez estudiant de ing telecom soy nuevo en el foro me encuentro haciendo pasantias en una empresa telefonica el proyecto de pasantia consiste en un sistema de alarma para la interrupcion del servicio a mi sistema queria agregarle de que pudiera realizar una llamada telefonica el diagrama que mostraste en tu diseño es el mismo que consegui por internet no lo he probado la programacion esta en basic dime algo es posible realizar ese montaje y mediante comando DTMFOUT mandar los digitos de marcacion para que por la linea se pueda hacer llamada todo esto sale explicado pero como ya tienen experiencia quieria preguntar eso si este es el link de la pagina:http://es.scribd.com/doc/63742141/51/UNA-SIRENA-POLICIAL



por favor el que pudiera ayudarme en esto estaria agradecido


----------



## DATAGENIUS (Feb 1, 2012)

Víctor, estoy seguro de que te podrán ayudar mejor si tu utilizas los signos de puntuación adecuadamente... se leen muchas cosas juntas y cuesta un poco entenderlas...


----------



## victor330 (Feb 1, 2012)

ok datagenius, el problema es el siguiente: estoy diseñando un sistema de alarma para la proteccion de las redes de CANTV específicamente en el cableado (cable multipar usado para prestar el servicio telefonico de la empresa debido al hurto) por ese lado no tengo ningun problema estoy usando un pic16f877. lo que quiero es que mi sistema pueda realizar una llamada al momento que exista un imprevisto. la programacion la estoy trabajando en basic, para eso quería saber si mediante el comando DTMFOUT en la programacion para marcar los numeros y con la resistencia de 800ohmio a 1W para simular la carga del telefono y el condensador de 1uF a 100v puedo realizar la llamada y enviar el tono de sirena? es decir lo antes mostrado en la diapositiva en la figura 5.4.6.2 he leido sobre el tema y muchos sugieren usar un discador para la parte de marcar los numero eso es porque? los intentos son fallidos sin un ht9200 o similares a estos?


----------



## dragon33 (Nov 13, 2012)

Imaginemos que dentro de un microcontrolador tenemos un tono musical que ha de salir una vez descolgado el telefono en el otro lado de la línea. ¿Como meteríamos ese sonido en la línea, que circuito sería necesario para "inyectar" sonido en la línea?.


----------



## DATAGENIUS (Nov 13, 2012)

Yo me imagino que si tu te refieres con "al otro lado de la línea" te estás refiriendo al lado de tu interlocutor, es decir, el otro abonado, con quien tu quieres hablar... en ese caso no te debes preocupar, pues la compañía lo proporciona, tu solo te debes preocupar por enviar señal audible, entre los 300Hz y los 3KHz.

Por otro lado, si te refieres al otro extremo de una línea paralela que nace del circuito de tu micro-controlador, entonces la interfaz es paralela... te explico, tu señal la acoplas hasta hacerla llegar a la base de un transistor de poca ganancia 1:2 aproximadamente. Este transistor queda colector-emisor de cara a la línea de salida... puedes usar un opto transistor...

He visto que en algunos casos le agregan un resistencia de unos 100 ohms en serie al transistor.

Espero haberte ayudado en algo


----------



## dragon33 (Nov 14, 2012)

Gracias DATAGENIUS.


----------



## LaElectronicaMeOdia (Nov 14, 2012)

> ¿Como meteríamos ese sonido en la línea, que circuito sería necesario para "inyectar" sonido en la línea?.



DIM YO as  LaElectronicaMeOdia

If yo= entender tu pregunta then

  lo que te suguiero es que busques "Hibrido telefonico o phone patch" en el google.

else

 haz caso omiso de mi comentario.

endif


----------



## dragon33 (Nov 14, 2012)

Voy a aportar mi pequeño granito de arena a este hilo, se trata de un simulador por PROTEUS de los tonos que se pueden escuchar por el auricular del teléfono.


----------



## manuel1tecnico (May 4, 2014)

Hola felicitaciones por su entereza en ayudar voy a probar ya comentaré gracias


----------



## nelsonr (May 29, 2014)

Hola a todos tengo una pregunta estoy trabajando con el generador de tonos DTMF HT9200B
Y tengo un pequeño pero molestoso problema que es que no es efectivo la llamada, el me genera los tonos siempre pero la llamada a veces sale y a veces no (sale con tono de ocupado cuando no saca la llamada).
No se si es el tiempo, ya lo modifique mil veces 
Los pines del IC los tengo conectados de la siguiente manera 
CE a la pata del micro para cuando lo coloco en bajo deje sonar el tono
El cristal tal cual como dice la hoja de datos 
S/P lo tengo en alto (paralela)
El data y clk no conectados
DTMF a un amplificador 
Y la codificación 
https://www.forosdeelectronica.com/attachment.php?attachmentid=111181&d=1401337611
Ln_resultados es el numero a marcar , me activa los D0-D3 y luego dejo suena el tono con el CE en bajo
Les agradesco sus aportes 
if(Ln_resultado == 9)
{
output_high (PIN_C4);//D0 1 
output_low (PIN_C5);//D1 0
output_low (PIN_E1);//D2 0 
output_High (PIN_E0);//D3 1
}
if(Ln_resultado == 0)
{
output_Low (PIN_C4);//D0 0 
output_High (PIN_C5);//D1 1
output_low (PIN_E1);//D2 0 
output_High (PIN_E0);//D3 1
}

delay_ms(100);
output_low (PIN_E2);//H
delay_ms(250);
output_High (PIN_E2);//H
//delay_ms(300); ...


----------



## DATAGENIUS (Jun 2, 2014)

Hola... muchas veces en proyectos similares el unico problema es el no respetar las reglas de telecomunicaiones... estas establecen que esta homologada la marcacion DTMF siguiendo el siguiente patron:

DTMF / INTER DIGITO / DTMF / INTER DIGITO / (etc)

DTMF es digito en multifrecuencia con una duracion de 70 a 100 ms.
INTER DIGITO es la pausa entre un digito y otro y debe durar 70 ms minimo.

Por tanto a tu rutina de discado debes agregar pausas de 70 ms entre digito y digito.

Algunas centrales telefonicas son mas estrictas que otras al respecto.

Me avisas como te fue por favor


----------



## nelsonr (Abr 8, 2015)

disculpen mi ausencia, pero la misma se dio por fuerza ajena a mi persona.

Hola DATAGENIUS  gracias por el dato me ayudo ya pude solucionar el tema de que no llamaba, le puse unos daley  de tiempo entre dígitos y deje un tiempo entre el dtmf y el CE 80 y 150 ms .
Pero tengo una pregunta mas si bien es cierto el circuito  hace el llamado el mismo, descuelga el teléfono,
realiza la marcacion y llama.
Pero ahí un factor interesante entre la linea  y el amplificado que me aumenta la señal del HT9200b, le tengo un transformador que en la practica es 1:1 digo que en la practica porque como en mi país no lo consigo con ese nombre y no  se como mas se pueda llamar (nombre popular) para preguntar por el de otra forma para ver si asi lo consigo.
Para solucionar  saque uno que se parecía de un televisor viejo de la etapa de audio.

El detalle esta en que el secundario del transformador lo tengo conectada a una bocina  y de el mismo punto sale los  cables para la linea telefónica (Ting), por ende cuando el Pic marca por medio del HT9200b
yo escucho los tonos  y el circuito llama  sin problema pero cuando le quito la bocina no realiza la llamda y si levanto un teléfono que este conectado a la linea se escucha la marcacion.

y por eso me gustaría saber si con lo que he explicado aquí a alguien le paso algo similar, tiene indicio o sabe del porque se da este fenómeno .


----------



## DATAGENIUS (Abr 9, 2015)

me alegro que te funcionara el discado 

 pos me cuesta un poco entender sin un diagrama... a mi no me ha pasado y tendría que revisar tu trabajo en particular.

Me gustaria ayudarte si tu quieres, pero tendras que publicar con un diagrama lo que tienes, asi me evito ir a tu casa a revisarlo


----------



## nelsonr (Abr 12, 2015)

Hola DATAGENIUS adjunto un dibujo del circuito que estoy utilizando, dicho dibujo está confeccionado a mano por ende te pido disculpa.  Lo dibuje  tal cual como está el prototipo.
Mi pregunta es porque tengo que usar una bocina para que el circuito se comunique con la operadora.
Y porque ahí veces que el circuito se comunica muy bien con la telefónica, y ahí veces que no.
En ambas ocasiones se escucha el marcado completo.
Realice unas pruebas grabando el sonido del numero marcado, y cuando las pruebas  fueron satisfactorias (que salía la llamada) tome esa grabación y la reproduje en un teléfono normal y de igual forma la llamada salía, o en otras palabra la operadora entendía el juego de tonos.
Repetí esto mismo cuando la prueba no salía  satisfactoria y no logro comunicarse el teléfono con la operadora.
Todo esto me da a entender que el problema está en la  generación del dtmf, pero si la programación es la misma,  los componentes también. No sé porque hay veces que si y o  otras que no se comunica.

Un dato importante  es que cuando no se comunica, ajusto un par de componentes,  cables  o incluso  descontento todo y lo conectó nuevamente  y hay veces que con esto la llamada sale  un par de veces y luego ya no. Y  repito nuevamente el proceso.
Te agradezco cualquier ayuda que me puedas regalar


----------



## Gudino Roberto duberlin (Abr 13, 2015)

Hola amigo, bueno hay varios factores por el cual el discado por tonos no es reconocido por el sistema operador telefónico. 1ro. Al descolgar la línea la impedancia de la misma tiene que caer a un valor tal que la central detecte ese cambio y desaparezca el tono. 
2do. La intensidad de los tonos de discado, no tienen la amplitud suficiente o están distorsionados.
3ro. El par de fcia. de los mismos no es del valor correcto.


----------



## nelsonr (Abr 13, 2015)

Hola Gudino Roberto gracias por los  datos suministrado. La verdad no tengo como certificar que la distorcion es mi problema, pero estoy casi seguro que eso es y me  gustaría comenzar a descartar por este punto. 
A mi me da la impresión que se distorsiona en la etapa de amplificación.
Que me recomiendas para obtener una  amplificación adecuada, un amplificador mejor que el JRC que estoy usando en la etapa de amplificación, o algún pasa bajo o pasa alto que deba instalar no se.

Con que aparato puedo medir la distorsion del tono ?


----------



## Gudino Roberto duberlin (Abr 13, 2015)

Amigo, yo empezaría a corroborar desde el punto más fácil.
Cerciorate que la línea telefónica detecte, que ha sido "descolgada" para marcar. Pues si dices que estando conectada la bocina puedes lograr la marcación, entonces es una cuestión de impedancia. Mide la resistencia del bobinado del transformador que está del lado de la línea telefónica. Prueba reducir el valor de la resistencia de 270ohms a un valor más bajo sino utilizas la bocina.


----------



## nelsonr (Abr 13, 2015)

Tiene mucha razón compañero voy a comenzar por esa parte y te  comento como me fue.
Aunque  como comente en lineas pasadas, aun así con todo esto ahí veces que no logra sacar la llamada .
Pero voy a comenzar por lo que me sugeriste.
Cualquier otra cosa que se te venga a la mente con referente al tema  me dices para probarlo para ver como me  va.
Gracias  por tu tiempo


----------



## nelsonr (Abr 14, 2015)

Hola Roberto y amigos todos,  estuve realizando lo recomendado de sumar las impedancias  y no me funciono.
Ahora me enfocare en el área de amplificación, si tienen un modelo de amplificador de tonos y me pueden facilitarme el diagrama, o donde puedo conseguirlo  se los agradezco.
También cualquiera idea que se les ocurra con referente al tema me dicen para probar y ver que pasa


----------



## Gudino Roberto duberlin (Abr 14, 2015)

Hola, cómo es eso de sumar impedancias? Puedes describir que has hecho?
Que valor resistivo tiene el bobinado del lado de la línea telefónica?
Mide la tensión de línea, cuando la misma está "descolgada".


----------



## nelsonr (Abr 14, 2015)

Hola jejeje  creo que me  confundí, lo que realice fue medir el bobinado 50 Oh mas o menos 45 para se exacto, la bocina es de 8 ohmios y se  lo reste a 270.
digo que se le sume porque  fue lo primero que realice dándome cuenta que el voltaje de la linea se elevaba.
luego se lo reste y le puse una resistencia de  220 porque 212 no encontré y  el resultado fue el mismo.


Realice una prueba descolgando 2 teléfonos diferentes en casa y uno  bajo el voltaje a 12.5 y el otro a 8.5, mi circuito lo baja a 9.5 antes de la modificación y después a 8.35.

Esa fue la prueba que realice para  saber que mi circuito esta dejando el voltaje creo que en un punto razonable a mi entender, pero sin duda que si tiene algo que sugerirme con gusto lo pondré en prueba
de ante mano  muchas gracias  por interes


----------



## Gudino Roberto duberlin (Abr 14, 2015)

Bueno amigo! Esa prueba es determinante, para saber si la línea cae al valor razonable. El sig. punto a verificar es, que la amplitud del par de tonos sea correcta.
El cristal que usa el generador de DTMF, es el correcto?


----------



## nelsonr (Abr 15, 2015)

Hola el cristal que estoy usando es jh3.579  y la hoja de datos  dice 3.579545.
Tan exacto no e podido conseguir.


----------



## Daniel Lopes (Abr 16, 2015)

Hola a todos , mi sugerencia es  agregar un potenciometro de unos 10KOhmios entre lo generador de DTMF y lo amplificador (LM386),donde lo terminal central (ayustable ) es conectado a lo pino 3 del LM386 , un terminal estremo conecta a la tierra y lo tercero terminal es conectado  a lo capacitor de 4,7nF y  con auxilio de un osciloscopio (ese es indispensable) ayustaria ese potenciometro de modo obtenir en la salida del LM386 un sinal libre de distorciones o mejor aun conpare lo nivel DTMF fornido por un telefono convencional y ayuste lo potenciometro para un nivel equivalente. Puede sener tanbien que lo transformador 1:1 enpleado no responda linealmente a toda la banda de frequencias enpleadas en lo DTMF ,por questiones de seguridad  las centrales telefonicas son mui exigentes quanto a la qualidad de los sinales DTMF para reconocer  los digitos como validos de modo no incorrer en equivocos asi la amplidute de todos los tonos enpleados deven sener iguais y de buena qualidad o sea no distorcionados.
!Fuerte abrazo y buena suerte!
Att.
Daniel Lopes.


----------



## nelsonr (Abr 17, 2015)

Listo  Gracias  actual mente estoy realizando las pruebas sugeridas, cuando termino le comunico dios primero como  resulto.


----------



## DATAGENIUS (Abr 19, 2015)

nelsonr,  perdona mi ausencia y tardanza, me esguince la rodilla y estuve en terapia.

Ahora, me gustaría darte mi opinión:

1º.- analizando tu esquema y la información que entregas, estimo que la impedancia de salida del transformador en paralelo a la bocina es de alrededor de 6,8Ω lo que implica que la señal DTMF sea muy baja, al límite de su detección por parte de la central telefónica. Por tando no creo que funcione siendo de relación 1:1... deberia ser 1:2 para amplificar. Lo otro es conectar en serie a la bocina un electrolítico de unos 47uF o menos (experimental) para probar.

2º.- No veo el micrófono 

3º.- Yo probé esta interfaz: http://www.holtek.com.tw/English/tech/faq/telecom_faq.htm

Donde dice DTMF conectar directamente la salida DTMF del HT9200.
Donde dice TIP RING es la línea telefónica.
Los transistores de al medio son para aislar frente al RING de llamada, puede usarce un bit del PIC o algún otro método.

Eso por ahora


----------



## nelsonr (Abr 20, 2015)

Hola  a todos y gracias por su tiempo, datagenius espero que te recuperes pronto de tu dolencia,  y es bueno para esos casos darle seguimiento para  saber que el detalla no se  acrescente mas.
Al circuito le realice ciertas modificaciones.
* Le cambio el JRC por el LM386 dado que en la hoja de dato el Lm decía que era de baja distorsiona.
* Le cambie el capacitor de la entrada de la pata 3 del LM que era de 4.7 nanos a 10 nanos.
Le coloque una resistencia de 82k en la entrada de la señal de dtmf y antes del capacitor de 103.
*Le quiete el capacitor de 470uf de la pata 2 del LM osea que lo puse directo a tierra
*cambien la resistencia de 10k a 12 k. Estas es la que se encuentra en la pata 5 antes del capacitor de 473
* Elimine todo los capacitares de la pata 7 osea que quedo flotante.
*cambie la bocina por una resistencia de 10 ohmios y la puse en serie con la bobina 
*El transformador que tiene a hora su primario es de .08 ohmios y el secundario de 5.7.
Ajustes un par de cables para el tema del contacto y ahora  esta  llamado, voy a  subir cuando llegue a casa un diagrama de como quedo.
El detalle es que me suena un gron en la salida, me doy cuenta cuando pongo una bocina de prueba.
Como puedo suprimir el mismo?.
Otra pregunta el microfono  para que es?
Cualquiera sugerencia para mejorar el circuito me la comunican para probar.


----------



## DATAGENIUS (Abr 20, 2015)

gracias por el concejo.

Lo del micrófono, lo siento, me equivoqué hno:, pensaba que tu hablarías por la línea telefónica.

Lo del ruido, no me lo imágino , esperaré a ver tu nuevo diagrama y veremos.

Saludos y buen trabajo


----------



## nelsonr (Abr 20, 2015)

Hola  de acuerdo a la sugerencias de todos el circuito quedo así. Si tiene alguna otra para mejorarlo  me dices.
Ahora el detalle es que me suena un gron en la salida, me doy cuenta cuando pongo una bocina de prueba.
Como puedo suprimir el mismo sin dañar los tonos?.


----------



## DATAGENIUS (Abr 21, 2015)

nelsonr, una línea telefónica que enfrenta una resistencia de carga alta (de algunos KΩ en adelante) se considera como si no hubiera un aparato telefónico puesto en la línea o como si el mismo estubiera en modo colgado. A ese caso le diremos Alta Impedancia. La central deja a la línea con mas de 35Vdc, sin tono presente y con la posibilidad de enviar el RING o corriente de llamado por la línea.

Por otro lado si disminuye a 1K o menos, se considera (desde el punto de vista de la central telefónica) como un aparato telefónico presente y descolgado. La tensión baja hasta unos 6 a 12Vdc, emite uno tono llamado TIM (Tono Invitación a Marcar) de unos 400Hz app hasta que no se escuche algún DTMF o un corte de cancho (uno o varios pulsos en la línea), no puede enviar un RING en esta condición y podría invertir la actual polaridad si habiéndose generado una llamada ésta es contestada.

Hay inconvenientes en el sonido (TIM) en situaciones como estas:
1º.- que una de las 2 hebras de la línea telefónica tope tierra electrica.
2º.- que la impedancia que enfrenta la línea baje mucho y la tensión presente sea muy baja y se activen protecciones en la central (menos de 3V dependiendo de la central)

 Creeme, es tan difícil saber que pasa si uno no está ahí.

No sé si puedas crear un video y subirlo a algún servidor para examinarlo de forma visual y auditiva, porque tambien me interesaría oir el ruido que intentas describir.

Saludos


----------



## nelsonr (May 12, 2015)

Hola que tal amigos, yo de nuevo con una pregunta. Si  yo tengo un generador de tomo dtmf "pongo de ejemplo el ht9200b" dado que es el que estoy aprendiendo a usar . 
Y tengo un  generador de sonido para este caso el APR9600 que es un integrado que graba sonido y reproduce lo grabado. Ambos están funcionando bien y por la salida de cada uno
la señal sale sin problema.
Si yo quiero  amplificar  la señal de cada uno por medio de un solo amplificador operacional por ejemplo el lm386.  pudo conectar directamente la salida del ht9200b y el apr9600  a la entrada del Lm386 sin ningún tipo de acoplador o algo similar?
Que debería  tomar en cuenta?.


----------



## miguelus (May 12, 2015)

Buenos días.

Ten en cuenta que el APR9600 tiene su salida amplificada, Pines 14 y 15, tendrías que hacer un pequeño atenuador para igualarla a la salida del HT9200B.

La salida del APR9600 es balanceada, para lo que pretendes solo necesitas sacar la señal de uno de los Pines, el 14 o el 15, no olvides poner una Resistencia de 16Ω entre los Pines 14 y 15

Para adaptar los dos audios a la entrada del LM386 lo puedes hacer por medio de dos Resistencias, tendrás que probar experimentalmente los valores de ambas para que los niveles de audio sean iguales.

Sal U2


----------



## DATAGENIUS (May 22, 2015)

Hola, sorry por llegar tarde.

El forista anterior tiene razón en pedir atenuar tu amplificador y puedes usar un potenciómetro como control de volumen.. sin embargo las 2 salidas pueden llegar al LM386 si lo configuras como sumador.

Ejempo: http://www.hispavila.com/3ds/tutores/opamlm386.htm

Busca el tema "*El Sumador Inversor.*"

A la entrada R1 y R2 pueden ser de 1K cada una, y Ro puedes usar un potenciómetro en modo reóstato de 10K o más. Mientras mayor es el valor mayor la amplificación hasta saturar la salida, cuando amplifique hasta Vcc.

Saludos


----------



## nelsonr (May 16, 2016)

Hola amigos yo de nuevo con estos temas de marcaciones de números telefónicos.
Yo sé que con el IC LM567 uno puede saber si el numero de teléfono marcado esta en estado ocupado, sonando, o en estado de fax (esto de fax no lo he probado).
Pero mi pregunta es.Ahí alguna pieza como un integrado o algo similar que realce estos análisis sin hacer la configuración que lleva el 567 ?. Y luego que se pueda comunicar con el pic.
Saludos y le agradezco su tiempo.


----------



## manuelsegundo (Dic 17, 2016)

Parece que la solución definitivamente es el circuito de acople ya indicado con la r de 680 Oh, el puente de diodos y el relé. Esto para llamadas a lineas teléfonicas, pero para llamar a través de un celular cual es el acople?; he trasteado todo el foro y no he encontrado la respuesta para eso. Pero tampoco nadie dice que no se puede hacer la llamada por un celular. Les agradezco enormemente quien me responda si se puede o nó se puede llamar mediante un celular y si es sí como es el acople.


----------



## nelsonr (Dic 19, 2016)

Hola,  para celular yo he visto una par de videos en YouTube donde acoplan un pic con una celular, pero por lo que comprendo para cada modelo de celular tiene su propia forma, y para evitar eso tome la decisión de usar un modulo con el moden Sim900 que es como especie de un celular de cuatro bandas ,envía sms, llama. Tengo entendido que hasta puedes pegarlo a la internet (eso no lo he probado) .
Pero si busca en internet  la banda de tu país de repente te sirve el SIM900A que son solo de dos banda y son mas baratos. 
Ese es mi experiencia vivida en ese caso.


----------



## manuelsegundo (Dic 19, 2016)

Gracias nelsonr. Lo del Sim900 es una opción una vez descarte lo del celular. Mientras debo seguir insistiendo por cuanto lo demás ya está montado. Explícame como funcionaría lo del sim900. Cualquier otra sugerencia es bienvenida.


----------



## Gudino Roberto duberlin (Dic 19, 2016)

Hola, los equipos celulares NO utilizan el sistema DTMF, más allá de que escuchemos ese tono característico, es a modo amigable de marcación. Pues una vez que presionamos las teclas de llamada, se convierten en código que sólo interpreta la red celular.
Si quieres llamar de un móvil deberás interceptar las teclas, porque si es táctil...
Y si deseas recibir el código DTMF, debes conectar un dispositivo 
detector, en el camino hacia la salida de auricular del móvil.


----------



## manuelsegundo (Dic 21, 2016)

Gracias por el interés. La tengo funcionando interceptando las teclas del tel., lo que pasa es que pretendía mejorarla con lo de los dtmf. Ya vi que no se puede e intentaré con la sim900. Sobre este módulo quisiera saber si puedo reprogramar los números telefonicos sin alterar el programa del pic, o sea sacar sincard cambiar los números y colocarla de nuevo.
Mil gracias a todos.


----------

