# Conexión MODEM a PIC



## joscar66 (Feb 12, 2006)

HOLA!

He pensado la posibilidad de conectar un modem de PC (ya sea EXTERNO, PCI ó AMR) a un microcontrolador PIC.

Seria para transmitir datos remotamente por una linea telefónica y sin necesidad de PC. El problema es que he notado que los modems interno PCI tienen unos 82 pines! eso lo haria muy complejo para manejar con PIC, no se si los AMR, que tienen varios pines también puedan servir.

Los modem al instalarse en los PC abren un puerto serie de comunicaciones (casi siempre com3) y pienso que se pueden transmitir datos desde el pic al modem por ese protocolo.

Ojo ! la idea es que el pic controle directamente el modem, es decir que no necesitemos PC para nada.

Alguno tiene alguna idea o comentario?

Un saludo


----------



## Piries (Feb 17, 2006)

Creo que lo que mejor te vendria es conseguir un modem externo que puedas controlar por RS-232, una vez conocidos los comandos con los que funciona el modem ya solo seria mandar los datos.

Otra opcion que se me ocurre es mandar la información por la linea telefonica usando tonos  DTMF. Concreta mas el proyecto a ver si logramos dar con una buena solucion.

Salu2


----------



## maunix (Feb 18, 2006)

Tengo varios comentarios.

1) Si el modem es externo, ya es un modem completamente hecho y con interfaz RS232 , sería simplicimo conectarlo a tu pic

2) Eso que dices que un modem a instalarse 'abre un puerto de comunicaciones' casi siempre com3. dejame decirte que lo que dices es técnicamente erróneo y te paso a explicar las razones
.  Un modem se instala con un driver y en la instalación se agrega un puerto de conexión COM (puede ser 3,  4, 2,  5, etc).  Abrir un puerto COM es otra cosa diferente, abrir un puerto es cuando uno le dice al sistema operativo que se queire comunicar a traves de un puerto COM determinado, reservando los derechos sobre el mismo.  Si un puerto está abierto solo lo puede utilizar la aplicacion que lo abrió y no otra.


Ahora bien, siguiendo con esto de los modems PCI o AMR, estos en su gran mayoría no cuentan con un integrado de usart como tenian antes, sino que son un complejo chip que cumplen todas las funciones y 'emulan' ser un puerto COM.  Todo esto a traves de sus drivers, por lo general componentes V.  Son estos drivers los que gestionan toda la compleja tarea de decirle a windows que hay un puerto com.

Si uds tienen un modem de estos les aseguro que estaran haciendo una enorme pérdida de tiempo tratando de comunicarse con el mismo, porque precisamente la parte del driver V no se documenta en ningun lado más que en las oficinas de desarrollo del fabricante 

He hecho esto varias veces con modems externos del tipo us robotics y han funcionado bien, con una interfaz que no requiere mas que un max232.

Saludos


----------



## breogan (Mar 19, 2006)

Hola,
Yo estoy trabajando en un proyecto similar, aunque lleva otras interfaces y apliaciones, una de ellas es conectar el PIC a un PC remoto. Para eso tengo que hacer que el PIC (16F877) hable con el modem.

Para que el PIC puede hablar con el modem me parece que debemos utilizar un UART (el UART que trae el PIC16F877, por ejemplo, solo tiene RC6/TX, RC7/RX), uno como el 16550A que tiene las lineas de control CTS, RTS, RI, DSR, DCD, DTR, Tx y Rx. Hay que convertir esas lineas en estandar RS232 y conectarlas al modem (e.j. un US Robotics) con el conector DB-25.

¿ que opinais ?

Hechadle un ojo a esta web: http://www.arcelect.com/rs232.htm

A ver si damos con el tema...

saludos.


----------



## Y° (Mar 29, 2006)

Hola,

Yo estoy en lo mismo que ustedes, la diferencia es  que deseo utilizar un 16f84.
Este pic no cuenta con usart pero puedo configurar una transmision serial  por software. Yo programo con pic basic.

Mi idea es poner sensores en un lugar X y cuando se active alguno de ellos enviar el estado de los sensores a traves de la linea telefonica a un segundo lugar Y.

En el lugar X tengo un pic que se encarga de los sensores y de la Tx
En el lugar Y tengo otro pic que se encarga de recibir los datos y desplegarlos en un display (en principio utilizo leds, pero podria ser un LCD).

Tengo todo el sistema montado y probado, los pic se comunican serialmente sin problemas, lo unico que me falta es saber como configurar y hacer funcionar un modem externo para que se  establezca la comunicacion entre ellos.

Andaré por estos lados en caso de cualquier consulta o  ayuda sobre esto.

Y°


----------



## breogan (Mar 30, 2006)

Hola,
Estoy buscando este modem: CH2056 de la empresa Cermetek (www.cermetek.com), mirad en embedded modems de alta velocidad. Ahi tienen modelos de 14.6K, 33K y 56K se conectan directamente a la linea telefonica

Lo malo es que no los consiguo aqui en Madrid !

Link directo: http://www.cermetek.com/hsmodem.htm

Bueno si alguien los conoce que nos deje un mensaje.

saludos.


----------



## alepic (Oct 17, 2007)

les tiro un dato para que vayan investigando y les va a ser muy util, vean que modem usan y bajen los comandos AT y con esos comandos AT van a poder controlar el modem.

suerte

Alepic


----------



## tiopepe123 (Oct 17, 2007)

Es casi obligatorio utilizar un modem externo por canal serie.

Los internos suelen ser winmodems o sea una especie de targeta de sonido que el ordenador hace toda la faena de decodificar la señal.

Para controlar el moden es tan simple como enviar comandos AT
http://www.eveliux.com/mx/index.php?option=content&task=view&id=150

simplemente debes enviar en ASCII o caracteres el comando.

Para saber si el modem esta activo envias AT y el modem devuelve OK
Asi de facil.


Para las pruebas preleminares se puede utilizar el hiperterminal de windows o el TeraTerm Pro.
Cuando domineis pues os pasais al pic con un max232 o algun adaptador,


Aunque el pic16f84 no tiene UART se puede emular facilmente, busca un poco por internet.

Hay varias formas de conectar el modem, con o sin pines de control, no se como arranca por defecto el modem se debe tener en cuenta.


----------



## mcrven (Oct 17, 2007)

Hola amigos todos de este hilo, les comento que en los posts de Mabauti y topepe123, están las claves de todo el asunto, así que no es menester repetir.

Mabauti nos aclaró la diferencia entre MODEMs: modems reales con USART o UART y toda su circuitería asociada, que son los que funcionan en cualquier equipo, con cualquier sistema operativo y con cualquier terminal RTTY también.
Cómo indicó acertadamente tipopepe, también funcionan con emuladores de terminal. Ej.: HiperTerminal de WIN.
De la red se puede descargar la lista de AT Commands. Preferiblemente bájenla desde el site específico del modem que tienen. Si quieren saber, si su modem es MODEM o WinModem, coloquen en google: "modem+linux" ya qué ningún winmodem funciona con linux. Hay unas tablas que indican cuales funcionan y cuales no.

También hay MODEMs reales internos para PC, sobre arquitecturas ISA y PCI, pero se alimentan directamente del BUS de la PC, así que, olvidenlos.

No es necesario que sea un modem específico (marca, modelo, etc.), sólo debe ser un MODEM, de verdad, verdad.

En ningún PIC he visto la capacidad suficiente de EEprom, para poder alojar, tan sólo el programa necesario para emular un puerto serial y mucho menos el driver para emular un modem.

saludos: mcrven


----------



## victor andres (Jun 17, 2008)

yo quiero conectar un pic 16f877a a un modem us robotics por favor quieo que me digan como meter los comandos at  al pic y ademas si lo puedo hacer utilizando lenguaje de ensamblador.


----------



## zoomg80 (Sep 11, 2008)

Mi estimado Victor andres

veo complicada con ensamblador el envio de comandos porque se generan cadaenas verticales. mas o menos asi:

movlw 0x41
movwf TXREG
call retardo
movlw 0x54
movwf TXREG
call retardo
movlw 0x2B
movwf TXREG
call retardo
movlw 0x43
movwf TXREG
call retardo
movlw 0x4D
movwf TXREG
call retardo
movlw 0x53
movwf TXREG
call retardo
movlw 0x53
movwf TXREG
call retardo
movlw 0x3D
movwf TXREG
call retardo
movlw 0x31
movwf TXREG
call retardo

Es un codigo para enviar el comando AT+CMSS=1 y falto el enter que seria el 0x13 creo.

te recomiendo lo apliques en Lenguaje C y se me ocurre que se puede reducir a:
Serout = "AT+CMSS=1" & Chr(13)

Saludos desde Mexico.


----------



## jomainbe (Sep 15, 2008)

Tal y como dice zoomg80 lo más sencillo para mandar un comando AT sería desde un lenguaje de alto nivel, como el C. Aunque estoy empezando con los PIC mi experiencia en programación me dice que tambien se debe poder hacer en ensamblador de PIC de forma menos tediosa que el listado propuesto. Sería algo como almacenar los comandos en memoria y llamar a una subrutina a la que se le pasa como parámetro la dirección de memoria del comando AT. Esta rutina debe ir leyendo los caracteres del mismo hasta que se lea el último o hasta llegar a un carácter de control que indique el fin del comando. Si el PIC no tiene suficiente memoria se podría hechar mano de una memoria auxiliar para almacenar los comandos AT.


----------



## sistemasorp (Ago 16, 2010)

Hola

Aunque un poco tarde desde que se inició el tema, os paso un artículo que he escrito sobre la conexión de un pic a un modem

http://www.sistemasorp.es/2010/08/1...s275-sensor-de-movimiento-y-un-modem-antiguo/


----------



## alexloel (Oct 18, 2011)

hola amigos estoy tratando de hacer funcionar un modem con un pic 16f84 configurandolo para que envie comandos at el problema que tengo es mi pic escribe perfectamente en el hyperterminal pero cuando conecto en el modem no pasa nada el baud  esta a 9600 bps Y LO MAS EXTRAÑO ES QUE CUANDO conecto el hyper al modem y funciona perfectamente


----------



## ricbevi (Oct 20, 2011)

alexloel dijo:


> hola amigos estoy tratando de hacer funcionar un modem con un pic 16f84 configurandolo para que envie comandos at el problema que tengo es mi pic escribe perfectamente en el hyperterminal pero cuando conecto en el modem no pasa nada el baud  esta a 9600 bps Y LO MAS EXTRAÑO ES QUE CUANDO conecto el hyper al modem y funciona perfectamente




Prueba invertir el modo de emisión en el pic(en el software) o las salidas/entradas del pic al módem pasalas por un dispositivo tipo MAX232  que compatibilizan los niveles e invierten la señal. Por un lado conecta los pines 1,4,6 del Com que va a el módem en corto entre si y por otro 7,8 también entre si pero separados de los anteriores.

Ric.


----------

