19 julio, 2015

Alarma GSM con USB programable (5a)




Búsqueda personalizada

 Como siempre: No es tan difícil como parece.

Alarma GSM con USB programable (5a)

Arrancar el Terminal GSM

     Para conectarnos al móvil, y ya que tiene un montón de problemas la conexión serie que comenté en un post anterior, realizamos una ampliación del circuito que ya se presentó en la Alarma Gsm. Consta de un terminal para la conexión estandar de módulos gsm y otro que se abilitó en la última versión para poder encender el móvil. Podría usarse el RA4 que es una salida a colector abierto. Cuando se descargan las baterias el móvil no arrancaba solo.
     En esta versión se sustituyen las dos resistencias que se calcularon en el apartado 5 por una resistencia de 1k y un diodo zener. La función es la misma: que no sature la entrada de datos del terminal.

Como bien digo siempre: "No es tan difícil como parece... pero se las trae"

Módulo GSM mt 55

     El primer contacto fue hace muchos años con un teléfono Nokia. Después con los módulos Telit y ahora ha caído un siemens mt55.
     El primer problema es conectarlo a una placa para prototipos. Veamos las características físicas del módulo y del conector.
     ¿Eso tan pequeño en una placa de prototipos? ¿Esa que está toda taladrada?
     ¡¡Difícil!!. Dando vueltas lo mejor es hacer una placa para ese conector. La solución ha sido (a parte de romperse la impresora láser y no poder imprimir el Circuito para realizar la placa) desmontar el conector y colocarle unos cables.
     Con los medios técnicos tan precarios que tengo (Esto no me da para más) no he consigo más detalle. El conector no está soldado. Se desmontan los pines que lleva el conector para soldar (salen sin mucha dificultad) Con los alambres de cable flexible (el que lleva muchos hilitos) se van pasando por el orificio que queda. se dobla hacia el exterior se fija y se corta. Cuidado con ese corte. Si te resbala la cuchilla puedes cortar el cable por abajo.
     Es algo de tiempo (bastante) Claro que realizar la placa para el conector. Soldarla (Sin cortocircuitos ni cortes) lleva también su tiempo.
El resultado final con el esquema
     Es este. Ya lo tenemos funcionando (El conector ha ido "de cine")

Puesta en marcha del MT 55 de SIEMENS

     Una vez conectado el módulo a los terminales del puerto serie, hay que conectar un montón más. De momento no se conectan los de voz ni sonido. Los terminales son: (sacados del datasheet de siemens)
     Como siempre hay que leerse el manual antes de empezar a manipular ni conectar. Te llevas gratas sorpresas si no se hace. En algún sitio ley:
" El 50% de las personas leen el manual de instrucciones una vez han roto el aparato. El otro 50% ni aun así lo lee"
     Prestar atención a los dos arranques del módulo mt55 que son el /EMERGOFF Y /IGT. El resultado, una vez arrancado y enviado el primer comando AT es:
     El envío al LCD lo realizo en decimal así que revisando la tabla ascii nos ha respondido: AT.  (65 = A, 84 = T). 
     No ha sido sencillo. La conversión de tensiones se descuidó un poco.

La comunicación del 18F4xxx con MT55

     Una vez leído el datasheet (el del hardware) En la página 30 empieza a explicar el protocolo de arranque del módulo. Antes de enviar ningún comando AT hay que inicializar el GSM (igual que se hace con el I2C, el LCD...). Este es el procedimiento:
por tanto, como de momento no se identifica si está el cargador enchufado o no le daremos un segundo (o más).
     No cabe recordar que el arranque, según tenemos en el esquema, se encuentra en el RC0 y por tanto hay que definirlo para poder usarlo.
     Ahora queda activar la interrupción de recepción del puerto serie
     enviar los datos conforme van llegando al LCD con la interrupción
     Nótese que a la hora de enviar el dato al LCD coloco "%U" y por eso envía los datos en Decimal. El motivo es que hay datos que envía el módulo y no son visibles en el LCD. Unos de ellos son el retorno de carro y nueva línea.
Y enviamos un comando AT y esperamos la respuesta.
     El resultado no era el esperado. El módulo gsm devovía un cero (0). Analizando el circuito y las tensiónes del puerto serie del mt55 algo no cuadra. Es necesario subir la tensión de salida. En la foto del circuito montado se ven tres transistores 2N2222 uno (el de la derecha es para el arranque /IGT. Los otros hacen de amplificador.
Con un transistor 2N2222 invierte la señal y con otro se restablece. Como los transistores son molestos de montar y vamos camino de usar más (falta el encendido de emergencia que sepamos ahora mismo) se implementa con un circuito integrado. El ULN2803 puede servir. Queda así por ahora.
      La señal se recibe del módulo mt55 por la resistencia 19 y sale por la patilla 13 del ulm2803.
     De momento ya tenemos bastante. Se ha comunicado con el módulo GSM y en una placa de pruebas. Eso sí tiene mérito (Es lo que tiene la falta de medios. Los pobres jamás saldremos de pobres pero agudiza el ingenio)



 Como siempre: No es tan difícil como parece.

          Gracias por visitar mi blog personal. Si te ha gustado: haz el favor de hacer clic en los anuncios de google que aparecen al principio de cada entrada y date una vuelta por por ellos. Son céntimos lo que aporta pero me ayudas a seguir subiendo cosas. Gracias.

15 julio, 2015

Alarma GSM con USB programable (5)




Búsqueda personalizada

 Como siempre: No es tan difícil como parece.

Alarma GSM con USB programable (5)

Identificar los Timers del microcontrolador.

     Comenzamos con las interrupciones. Lo primero es identificarlas para los microcontroladores pic18Fxxxx. Lo mejor para ello es ir (como estamos programando usando Ccs) al datasheet del Ccs y ver cuantos timer se pueden programar.
     Como el manual del Ccs es genérico hay que ver uno por uno para comprobar que nuestro 18F4455 los soporta. Para ir al grano vamos al timer3 directamente ya que los tres anteriores los soportan incluso los 16Fxxx. Para ello la activamos con estas lineas de código.
     Se genera la interrupción, colocamos un breakpoint, se compila y ejecutamos. El resultado es:


     Lo soporta perfectamente. Por ello probamos los demás realizando la misma prueba a ver lo que sucede. Al compilar da fallo y vemos donde lo indica.

hacemos doble clic sobre la primera línea del error y nos lleva al la interrupción del timer 4.
     Esto indica que no lo soporta. También se puede ir al datasheet del 18Fxxxx y, una vez leído, ver que el microcontrolador no lo lleva implementado. Esta es otra forma de comprobar las cosas. 
     De momento, ya se ajustará cuando se necesiten, los dejamos así, bien identificados:
     Los he colocado después de la inicialización del USB y del LCD. De esta forma no molestaran los timers en el proceso de arranque de los periféricos.
     La configuración con las interrupciones queda así.
     Con esto queda terminado el proceso de identificación de los timers. Ahora queda ajustarlos conforme se vayan precisando. Cada uno cumplirá una o varias funciones y tiempos dependiendo el cometido que esté realizando en cada momento.


 Como siempre: No es tan difícil como parece.

          Gracias por visitar mi blog personal. Si te ha gustado: haz el favor de hacer clic en los anuncios de google que aparecen al principio de cada entrada y date una vuelta por por ellos. Son céntimos lo que aporta pero me ayudas a seguir subiendo cosas. Gracias.

Alarma GSM con USB programable (4a)




Búsqueda personalizada

 Como siempre: No es tan difícil como parece.

     Alarma GSM con USB programable (4a)

      Puerto Serie 232. Conexión con terminal GSM

      A estas alturas ya está casi todo. Hay lcd para poder visualizar datos. Hay un teclado para poder introducir los datos. Hay comunicación con periféricos por I2C para ampliaciones. Hay un puerto para USB para conectarnos con un Ordenador. Ahora queda la comunicación con los gsm. Por lo general, sin entrar en detalles de momento, la comunicación se realiza via  Serie. Para poder simular con el PC colocamos un puerto serie virtual COMPIM. 
y se configura para trabajar como sigue. Seguramente, si no se dispone de puertos virtuales, habrá que descargar algún programa que lo realice. El que usé es Eltima Software Elegir el que más conviene y a trabajar. Es gratis por 14 días.
      El COMPIM se configura así:
      La velocidad de transmisión no es crítica por el momento. De momento lo dejamos así. Para el programa con el MPLAB necesitamos implementar el puerto serie. En esta ocasión se usan los pines que vienen por defecto en el hadware del microcontrolador 18F4455.
      Con esta línea que incorporamos después del I2C ya podemos usar el puerto serie 232 para comunicar con cualquier módulo GSM, incluso con los móviles. Para enviar código (comandos AT en este caso) usaremos la llamada a printf(dato a enviar)
      En este caso enviamos ATD6 seguido del típico salto de línea y retroceso de carro. El resultado con el Hiperterminal es:
      El dato ha sido enviado correctamente.
      El problema aparece con las tensiones. Los GSM suelen trabajar a 3,3V. Aunque el rango de trabajo de estos microcontroladores de 2.0V a 5.5V se va a realizar todo el circuito en base a los 5V. Así que usando la ley de Ohm se calculan las resistencias para el ajuste de tensiones para la transmisión. Para evitar molestias e interferencias se calcula para una intensidad que ronde 1mA. De momento nos valdrá. El ajuste final queda para... el final. Se parte de una R a GND en la que tienen que caer 4V aprox y se le da un valor de 4k7 (a ojo y se calcula a ver si es buena, si se sale de rango se pilla otra y se calcula. Además son de las que más tengo). Calculando la intensidad que pasará por ella cuando pasen los 4 V se calcula la otra resistencia.
      Casi un miliamperio. La aproximación ha sido buena. Ahora con esta intensidad se calcula la resistencia en la que debe caer 1V.
      Ahora solo queda coger un valor estandarizado de la resistencia y calculamos a ver que pasa. El valor más idóneo es de 1k2 (1200 ohmios) Si se elige el valor inferior la caída de tensión será menor y cuanto mas caiga mejor.
      Tres coma noventa y ocho voltios. La aproximación ha salido perfecta. Ahora la hora de la verdad. ¿Se equivocará la calculadora o yo?
      Pues ya tenemos bien calculada la caída de tensión. El módulo GSM o lo que coloquemos en el puerto de comunicaciones serie 232 nos entenderá perfectamente.


 Como siempre: No es tan difícil como parece.

          Gracias por visitar mi blog personal. Si te ha gustado: haz el favor de hacer clic en los anuncios de google que aparecen al principio de cada entrada y date una vuelta por por ellos. Son céntimos lo que aporta pero me ayudas a seguir subiendo cosas. Gracias.

14 julio, 2015

Alarma GSM con USB programable (3d)





Búsqueda personalizada

 Como siempre: No es tan difícil como parece.

Alarma GSM con USB programable (3d)

Ampliación a través de I2C de la alarma

     En ocasiones hay que tener una memoria que se pueda sustituir, ampliar, modificar, etc. Es posible la necesidad de más entradas o salida. Colocar un reloj independiente al microcontrolador. El puerto I2C no está de más implementarlo en el circuito. 
     En la búsqueda por el famoso Internet no he podido localizar como conectar dos memoria 24LC256 al mismo controlador usando la librería estándar de Ccs. Veamos que hay que hacer para poder conectar dos o más memorias (sirve para saber que hay que modificar en otras estándar de otros modelos de I2C).
     Por lo general los pic tiene el hadware del I2C en el puerto N. Como está ocupado por el teclado, lo primero es cambiarlo a otro puerto. Como en el esquema se puede apreciar se ha colocado en el puerto E. Para poder trabajar por el hay que hacer una pequeña modificación en la librería estándar 24256.C del Ccs.
modificamos la original cambiando las patillas del SDA y SCL. por el puerto E según la conexión que se realice de las EEprom. El archivo quedaría así:
     El protocolo de escritura dice que hay que enviar el primero el número de dispositivo. El número se programa con la conexión de las patillas del 24LC256 A0, A1 Y A2. Colocando todas a GND sería el dispositivo 0 y en forma binaria si colocamos A0 a Vdd sería el dispositivo 1, y así progresivamente.
     El envío del número de dispositivo se envía en la línea 42  de la escritura y en la línea 58 que es de la lectura.
     El dato en hexadecimal empieza por 'a' lo que indica que es una memoria... (Ver datasheet del dispositivo) que no se ha de modificar. De esa forma el dispositivo sabe que se le está ablando a el. Como hay un cero no se puede enviar datos a otro dispositivo. Lo mismo ocurre con la lectura de un dato. Para poder manejar más dispositivos hay que realizar unas modificaciones. 
     Lo primero es poder enviar un dato más. Para ello modificamos las dos funciones (subrutinas, para mi).Como es un número lo que enviamos le asignamos a cada subrutina una variable más a la que llamaremos 'dispositivo'. (Aunque aparecela  variable como int hay que poner byte).
     Ahora manipulamos el dato para adaptarlo. Se enviará el número de dispositivo (del 0 al 7). Según el protocolo I2C el bit de menos peso representa la lectura o escritura.
     Corremos a la izquierda el número que enviamos y se le suma el tipo de dispositivo (recordar que la EEprom es el 0xA0). Con eso ya podemos escribir en la EEporm.
     Realizar lo mismo en la lectura de la EEprom. Y modificar la línea en la que pide la lectura (las primeras son para identificar el dispositivo).
     Ahora solo queda realizar la llamada al dispositivo cero (0) que funcionaba correctamente y llamar al dispositivo uno (1) que no funcionaba. Llamamos a la escritura y a la lectura del dato que escribimos
     Indica la escritura en el registro 21 el dato a guardar es 0xD1 en el dispositivo 1. La lectura es del registro 21 del dispositivo 1. Se pasa al LCD 
     Y el resultado una vez ejecutado el programa es:
     El dato enviado se visualiza en el LCD sin errores.


 Como siempre: No es tan difícil como parece.

          Gracias por visitar mi blog personal. Si te ha gustado: haz el favor de hacer clic en los anuncios de google que aparecen al principio de cada entrada y date una vuelta por por ellos. Son céntimos lo que aporta pero me ayudas a seguir subiendo cosas. Gracias.