Autor Tema: Ayuda para una persona mayor que vive sola  (Leído 18834 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Mako22

  • PIC12
  • **
  • Mensajes: 77
Ayuda para una persona mayor que vive sola
« en: 12 de Septiembre de 2007, 09:12:08 »
Un saludo a todos después de mucho tiempo en dique seco.

Tengo un gran problema al que espero me podáis ayudar.

Mi padre tiene 72 años y vive solo. Hace un año sufrió una enfermedad que se llama “Síndrome de Guillem Barré”, es decir se quedo total mente paralizado en menos de 24 horas, dejando de respirar y todo. Suerte que un tío mío llego a tiempo y le pudieron salvar.

A estado ingresado en un centro de rehabilitación 7 meses y el resto viviendo conmigo en casa, donde ha tenido que aprender nuevamente a respirar, a caminar, a comer, etc. etc.

Ahora vuelve a estar en su casa, con toda la preocupación que a mí eso me reporta, ya que no está bien del todo, y no sabemos si volverá a estar al 100%.

He mirado para contratar un servicio de tele asistencia, pero son bastante caros y mi sueldo y su pensión no son para tirar cohetes.

He pensado usar un Pic ( He encontrado una alarma para un estanco en este foro que me podría servir pero no me deja descargar los ficheros, no sé porque ), Alguien me puede facilitar un esquema y un pequeño programa que me sirviera??, la idea es la siguiente:

Dejarle a él un pequeño mando a distancia que una vez pulsado, ( solo mientras está en casa ), marcara en el teléfono normal el número de mi móvil. Con eso ya me conformaría, pero si además pudiera llevar un pequeño micro pre amplificado, que me permitiera escucharle, ya sería el no va más.

 He encontrado esto, que ya me podría servir:

http://users.tpg.com.au/users/talking/TaxiPhonePage1.html

pero alguien me podría modificar el esquema y el asm para usarlo con un pic que permitiera  reprogramarse (PICF84)??

Lo digo porque mis conocimientos tanto en diseño como en programación son bastante limitados  y aunque en la página explica ambas cosas no lo tengo muy claro y me urge poder montarlo lo antes posible.

Saludos a Todos

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Ayuda para una persona mayor que vive sola
« Respuesta #1 en: 13 de Septiembre de 2007, 05:53:02 »
Hola Mako

Yo también tengo conocimientos muy limitados y poca experiencia, pero intentaré echarte una mano en lo que pueda.

De momento ando buscando por la Web a ver si encuentro algo.

El proyecto que pones del teléfono TAXI parece bastante aproximado a lo que necesitas. Quizás podrías intentar montarlo sobre un protoboard a ver si funciona tal y como está.

De momento he encontrado un documento en el que la interfaz con la línea telefónica se realiza de un modo más seguro:

http://paper.ijcsns.org/07_book/200705/20070526.pdf

Aquí tienes otro proyecto parecido a lo que necesitas:

http://www.elektronika.ba/projekti/?akc=daj_projekt&idprojekt=7

Si yo fuera tú empezaría por montar este último proyecto que te adjunto para comprobar si funciona el marcado telefónico, y después implementaría la parte de radio-frecuencia (esto sería bastante fácil).

Saludos

Desconectado Mako22

  • PIC12
  • **
  • Mensajes: 77
Re: Ayuda para una persona mayor que vive sola
« Respuesta #2 en: 13 de Septiembre de 2007, 07:23:09 »
Hola jfmateos2. Gracias por tu rápida respuesta.
Estos dos montajes estan muy bien, lo unico que me parecen un poco más complejos que el vinculo que yo tengo.
Ayer se me ocurrio ponerme en contacto con el creador del circuito del cual pongo el link, y me ha contestado esto a mis preguntas:
   
¿El circuito electrónico es el mismo para el F84 que para el 508?
¿Que patillas del 508 son equivalentes al F84?

Contestación:

Use the pins on the F84 that are equal to the function of the pins for the '508
 
See Talking Electronics website   See "Start here with '508" article.


Here is the comparison of the location of the files in the '508 and other chips.   You will have to change the program so that the files can be accessed.   Some of the files in the '508 program cannot be accessed when using a '84 as the files are used by the micro itself. You have to add the value of "TWO OH"     "20H"   to all the files to shift them down the file memory so you can use them when running a PIC'84.

Pero como mis conocimientos de inglés y de PICs son muy pocos, me quedo a dos velas.

¿Sabes algún link donde ponga como cambiar el circuito de un 508 por un 16F84?

Saludos

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Ayuda para una persona mayor que vive sola
« Respuesta #3 en: 13 de Septiembre de 2007, 08:16:44 »
Hola Mako, al principio de la página 2 (http://users.tpg.com.au/users/talking/TaxiPhonePage2.html) de su proyecto tiene puesta la equivalencia de pines entre ambos microcontroladores. Yo tampoco entiendo la modificación que te propone que hagas en el código (lo siento). Lo que menos me gusta de este proyecto es que no veo claro cómo conectarlo a la línea telefónica.

Por eso te recomendaba el proyecto bosnio (http://www.elektronika.ba/projekti/?akc=daj_projekt&idprojekt=7); en éste está claro cómo se conecta, no hay que realizar ninguna modificación en el programa y, sí es más complicado, pero esa complicación viene del hecho de que las entradas y salidas están convenientemente aisladas (mediante el transformador). Además, en este proyecto tienes hasta la plantilla del PCB. En esta página http://hackedgadgets.com/2007/03/27/alarm-phone-dialer/ tienes algunos comentarios sobre este proyecto en inglés. Lo más complicado puede ser encontrar el MT8880.

Saludos

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Ayuda para una persona mayor que vive sola
« Respuesta #4 en: 13 de Septiembre de 2007, 12:17:47 »
Hola Mako , te comento que me pidieron que desarrolle un circuito similar al que tu quieres, lamentablemente no puedo pasarte lo que hice. Pero si podria ayudarte para que termines mas rapidamente.

El ckto que pones es similar al que  use como base para el sistema que me pidieron

http://users.tpg.com.au/users/talking/DialAlarm-1-Page1.html

En este ckto para realizar la llamada utiliza el descolgado de la linea lo hace con el 4N25 el BD679 y la resistencia de 470 ohms poniendo un cero a la entrada del optoacoplador se realiza el descolgado. y la marcacion se la hace mediante las lineas GP1 y GP0 del PIC estos dos pines generan señales cuadradas con las frecuencias para la marcacion por DTMF estas dos señales se filtran mediante los filtros de 100 omhs y 1 uF  y luego  se suman mediante el transistor BC547.

Entonces para adaptar el ckto tienes que conectar a un pin del 16F84A la entrada del 4N25 para poder descolgar el telefono y luego rehusar la rutina que genera un digito DTMF , para esto ultimo tienes que ver un poco el programa.

Espero que esto te sirva de ayuda.

La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda para una persona mayor que vive sola
« Respuesta #5 en: 13 de Septiembre de 2007, 16:03:10 »
Hola Mako22, el circuito del link que propones es muy sencillo, el unico error que le encuentro es que la conexión a la linea telefónica no se hace en serie como lo propone, si no que va en paralelo como cualquier teléfono.

Si tienes dudas sobre ese circuito solo consúltalas y trataré de respondertelas.

Con respecto al PIC también puedes usar por ejemplo el 12F625 que es muy similar al 12C508 propuesto, pero con memoria flash.

Con respecto al programa como está en .asm si deseas puedo reformarlo para que lo puedas aplicar el 16F628A (recomiendo este por ser mejor y más varato que el 16F84A)

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Mako22

  • PIC12
  • **
  • Mensajes: 77
Re: Ayuda para una persona mayor que vive sola
« Respuesta #6 en: 14 de Septiembre de 2007, 02:31:38 »
En primer lugar mi más sincero agradecimiento por vuestra ayuda a los tres.

Una cosa Chaly29, aparte de poderme modificar el ASM para el 16F628A, me podrías decir de un modo grafico que modificaciones tengo que hacer en el circuito para que funcione con este PIC y no con el 508?.

Si me pudieras solventar estas dos cuestiones empezaría por montar este circuito, creo que por cantidad de componentes y por no tener ninguna pieza rara sería el más fácil de hacer, sino tendría que intentar hacer uno de los que proponen nuestros amigos, aunque me dan un poco de miedo el no poder encontrar quizás algún componente.

Saludos

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda para una persona mayor que vive sola
« Respuesta #7 en: 14 de Septiembre de 2007, 10:04:54 »
Hola Mako22, al circuito lo reformaremos en 2 etapas, en la primera lo referente a los componentes pasivos, y en la segunda cambiaremos el PIC



* Puedes ver que solo dejé un pulsador, esto con la idea de simplificar el circuito
* El led que originalmente era de color verde lo cambie por uno rojo, con esto disminuimos la tensión de alimentación del PIC de 5.4Vcc a 5.1Vcc
* Y grafique de manera correcta la conexión a la linea telefónica

Probablemente también halla que cambiar la disposición del transistor con sus componentes asociados, pero eso lo veremos más adelante.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Mako22

  • PIC12
  • **
  • Mensajes: 77
Re: Ayuda para una persona mayor que vive sola
« Respuesta #8 en: 14 de Septiembre de 2007, 11:35:48 »
Ok! Carlos vamos allá.

Quedo impaciente esperando tu próximo mensaje.

Un Saludo
« Última modificación: 14 de Septiembre de 2007, 11:38:04 por Mako22 »

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda para una persona mayor que vive sola
« Respuesta #9 en: 14 de Septiembre de 2007, 14:43:57 »
Hola Mako22, este es el programa para el PIC anterior, le e realizado algunas mejoras y correjido algunos errores, también traté de traducirlo al castellano:

Código: ASM
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;       TAXI PHONE for 12c508A CHIP
  4. ;
  5. ;       Nota: El numero marcado por este programa no está aprobado
  6. ;       Coloque el numero telefónico a ser marcado en la tabla 1
  7. ;
  8. ;       Frecuencia del cristal del PIC de 4MHz
  9. ;
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11.  
  12.         LIST            P = 12C508A
  13.         INCLUDE         <P12C508A.INC>
  14.         ERRORLEVEL      -302
  15.  
  16.         __CONFIG        _MCLRE_OFF&_CP_ON&_WDT_ON&_XT_OSC
  17.  
  18. ;.......................................................................
  19. ;Definicion de pines
  20. #DEFINE         OUT_TONO_H      GPIO,0          ;Pin de salida del tono alto
  21. #DEFINE         OUT_TONO_L      GPIO,1          ;Pin de salida del tono bajo
  22. #DEFINE         PULSADOR        GPIO,3          ;Pin de entrada del pulsador
  23.  
  24. ;Definicion de la RAM
  25. NUM_DISCA       EQU             .7              ;07h Numero que se está discando
  26. TEMP            EQU             .8              ;08h Reguistro temporal
  27. CARRIER         EQU             .9              ;09h Carrier DTMF
  28. TONO_LOW        EQU             .10             ;0Ah Tono bajo
  29. DEC_TONO_L      EQU             .11             ;0Bh Decrementar tono bajo
  30. TONO_HIGH       EQU             .12             ;0Ch Tono alto
  31. DEC_TONO_H      EQU             .13             ;0Dh Decrementar tono alto
  32. CONT_1          EQU             .14             ;0Eh Rutina de retardo
  33. CONT_2          EQU             .15             ;0Fh Rutina de retardo
  34. CONT_3          EQU             .16             ;10h Rutina de retardo
  35.  
  36. ;.......................................................................
  37.         ORG     .0
  38.         goto    INICIO
  39.  
  40. ;.......................................................................
  41. ;Table 1 Tabla que almacena el numero a discar
  42. ;0A = 0
  43. ;01 = 1
  44. ;02 = 2
  45. ;03 = 3
  46. ;04 = 4
  47. ;05 = 5
  48. ;06 = 6
  49. ;07 = 7
  50. ;08 = 8
  51. ;09 = 9
  52.  
  53. ;Colocar tantos RETLW como dígitos tenga el numero que se desea discar
  54. ;Para finalizar colocar el valor RETLW 0Eh para indicar que ya no hay numeros a discar
  55. ;En el ejemplo el numero discado es: 0112329255
  56.  
  57. Table1
  58.         addwf   PCL,F
  59.         retlw   0Ah             ;0
  60.         retlw   01h             ;1
  61.         retlw   01h             ;1
  62.         retlw   02h             ;2
  63.         retlw   03h             ;3
  64.         retlw   02h             ;2
  65.         retlw   09h             ;9
  66.         retlw   02h             ;2
  67.         retlw   05h             ;5
  68.         retlw   05h             ;5
  69.         retlw   0Eh             ;E = fin del numero
  70.  
  71. ;.......................................................................
  72. ;Table2 tonos bajos del DTMF
  73. Table2
  74.         addwf   PCL,F
  75.         nop
  76.         retlw   75h             ;1
  77.         retlw   75h             ;2
  78.         retlw   75h             ;3
  79.         retlw   6Bh             ;4
  80.         retlw   6Bh             ;5
  81.         retlw   6Bh             ;6
  82.         retlw   60h             ;7
  83.         retlw   60h             ;8
  84.         retlw   60h             ;9
  85.         retlw   57h             ;0
  86.  
  87. ;.......................................................................
  88. ;Table3 tonos altos del DTMF
  89. Table3
  90.         addwf   PCL,F
  91.         nop
  92.         retlw   44h             ;1
  93.         retlw   3Dh             ;2
  94.         retlw   37h             ;3
  95.         retlw   44h             ;4
  96.         retlw   3Dh             ;5
  97.         retlw   37h             ;6
  98.         retlw   44h             ;7
  99.         retlw   3Dh             ;8
  100.         retlw   38h             ;9
  101.         retlw   3Dh             ;0
  102.  
  103. ;.......................................................................
  104. ;Short delay between tone approx 50mS
  105. Del1
  106.         clrwdt                  ;Reseteo el WDT
  107.         movlw   .80
  108.         movwf   CONT_2
  109. Del1A
  110.         decfsz  CONT_1,F
  111.         goto    Del1A
  112.         decfsz  CONT_2,F
  113.         goto    Del1A
  114.         retlw   .0
  115.  
  116. ;.......................................................................
  117. ;Retardo de 0.7sec
  118. Del2
  119.         clrwdt                  ;Reseteo el WDT
  120.         nop
  121.         nop
  122.         nop
  123.         nop
  124.         nop
  125.         nop
  126.         nop
  127.         decfsz  CONT_1,F
  128.         goto    Del2
  129.         decfsz  CONT_2,F
  130.         goto    Del2
  131.         retlw   .0
  132.  
  133. ;.......................................................................
  134. ;Retardo de 0.1sec
  135. Del3
  136.         movlw   .110
  137.         movwf   CONT_1
  138. PLoop1
  139.         movlw   .181
  140.         movwf   CONT_2
  141. PLoop2
  142.         clrwdt                  ;Reseteo el WDT
  143.         clrwdt                  ;Reseteo el WDT
  144.         decfsz  CONT_2,F
  145.         goto    PLoop2
  146.         decfsz  CONT_1,F
  147.         goto    PLoop1
  148.         retlw   .0
  149.  
  150. ;.......................................................................
  151. ;Discado del numero por medio de DTMF
  152. Dial1
  153.         movf    NUM_DISCA,W     ;Cargo el dígito a discar en W
  154.         call    Table1
  155.         movwf   CARRIER         ;Cargo en CARRIER el numero a discar
  156.         movlw   0Eh             ;Verifico que el valor anterior no sea 0Eh
  157.         xorwf   CARRIER,W
  158.         btfsc   STATUS,Z
  159.         goto    Main5           ;Si es 0Eh salgo de la rutina de discado
  160.         movf    CARRIER,W
  161.         call    Table2
  162.         movwf   TONO_LOW        ;Cargo el reguistro con el valor para el tono bajo
  163.         movwf   DEC_TONO_L      ;Cargo el reguistro con el valor para el tono bajo
  164.         movf    CARRIER,W
  165.         call    Table3
  166.         movwf   TONO_HIGH       ;Cargo el reguistro con el valor para el tono alto
  167.         movwf   DEC_TONO_H      ;Cargo el reguistro con el valor para el tono alto
  168.         goto    DTMF1
  169. Dial2
  170.         call    Del1            ;Llamada a retardo antes de discarl el proximo dígito
  171.         call    Del1            ;Llamada a retardo antes de discarl el proximo dígito
  172.         incf    NUM_DISCA,F     ;Incremento el dígito a discar
  173.         goto    Dial1
  174.  
  175. ;.......................................................................
  176. ;Rutina que genera el DTMF
  177. DTMF1
  178.         movlw   .160            ;Cantidad de ciclos del tono de discado
  179.         movwf   TEMP
  180. DTMF2
  181.         decfsz  DEC_TONO_H,F    ;Decremento el reguistro del tono alto
  182.         goto    DTMF3
  183.         movlw   .1
  184.         xorwf   OUT_TONO_H      ;Seteo la salida adecuada
  185.         movf    TONO_HIGH,W     ;Cargo W con el valor para el tono alto
  186.         movwf   DEC_TONO_H      ;Re-Cargo el reguistro de decremento de tono alto con el valor inicial
  187. DTMF3
  188.         decfsz  DEC_TONO_L,F    ;Decremento el reguistro del tono bajo
  189.         goto    DTMF2
  190.         movlw   .2
  191.         xorwf   OUT_TONO_L      ;Seteo la salida adecuada
  192.         movf    TONO_LOW,W      ;To re-load low-tone file
  193.         movwf   DEC_TONO_L      ;Re-load low-tone file
  194.         decfsz  TEMP,F          ;Decrement loops file
  195.         goto    DTMF2
  196.         goto    Dial2
  197.  
  198. ;.......................................................................
  199. INICIO
  200.         movlw   B'00111100'     ;GP0 y GP1 como salidas el resto entradas
  201.         tris    GPIO            ;Cargo el reguistro TRIS
  202.         clrf    GPIO            ;Borro el reguistro GPIO
  203.         clrwdt                  ;Reseteo el WDT
  204.         movlw   B'00001111'     ;Prescaler en 128 asignado al WDT
  205.         option                  ;Cargo el reguistro OPTION
  206. Main1
  207.         call    Del2            ;Llamada a retardo
  208.         call    Del2            ;Llamada a retardo
  209.  
  210.         clrf    NUM_DISCA       ;Borro todos los reguistros a usar
  211.         clrf    TEMP
  212.         clrf    CARRIER
  213.         clrf    TONO_LOW
  214.         clrf    DEC_TONO_L
  215.         clrf    TONO_HIGH
  216.         clrf    DEC_TONO_H
  217.         clrf    CONT_1
  218.         clrf    CONT_2
  219.         clrf    CONT_3
  220.  
  221. Main2
  222.         movf    NUM_DISCA,W
  223.         call    Table1
  224.         xorlw   .0
  225.         btfss   STATUS,Z
  226.         goto    Main3
  227.         incf    NUM_DISCA,F
  228.         goto    Main2
  229. Main3
  230.         btfss   PULSADOR        ;Verifico el pulsador, si esta en alto salto
  231.         goto    Main4           ;si está en bajo salto a la rutina Main4
  232. Sw
  233.         clrwdt                  ;Reseteo el WDT
  234.         btfsc   PULSADOR        ;Verifico el pulsador, si esta en bajo salto
  235.         goto    Sw              ;Si es alto salto a Sw
  236.         call    Del3            ;Llamada a retardo
  237.         btfsc   PULSADOR        ;Verifico el pulsador, si esta en bajo salto
  238.         goto    Sw              ;Si es alto salto a Sw
  239. Main4
  240.         clrwdt                  ;Reseteo el WDT
  241.         goto    Dial1           ;Salto a la rutina de discado
  242. Main5
  243.         movlw   .166            ;Rutina de retardo de 2min para luego de discar
  244.         movwf   CONT_3
  245. RET
  246.         call    Del2            ;Llamada a retardo
  247.         decfsz  CONT_3,F
  248.         goto    RET
  249.         goto    Main1           ;Reinicio todo el proceso desde la posición Main1
  250.  
  251. ;.......................................................................
  252.         end

Espero que valla siendo de ayuda.

Un salud.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda para una persona mayor que vive sola
« Respuesta #10 en: 14 de Septiembre de 2007, 15:05:54 »
Hola Mako22, esta es la reforma y cambio de PIC que te propongo:



En este PIC ya usamos el oscilador interno y conectamos el pin MCLR. Por lo demas se mantiene igual que el circuito anterior.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda para una persona mayor que vive sola
« Respuesta #11 en: 14 de Septiembre de 2007, 15:51:35 »
Y este es el programa para el 16F628A:

Código: ASM
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;       TAXI PHONE con microcontrolador 16F628A
  4. ;
  5. ;       Nota: El numero marcado por este programa no está aprobado
  6. ;       Coloque el numero telefónico a ser marcado en la tabla 1
  7. ;
  8. ;       Frecuencia de funcionamiento 4MHz
  9. ;
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11.  
  12.         LIST            P = 16F628A
  13.         INCLUDE         <P16F628A.INC>
  14.         ERRORLEVEL      -302
  15.  
  16.         __CONFIG        _BODEN_OFF&_BOREN_ON&_CP_ON&_DATA_CP_ON&_PWRTE_ON&_WDT_ON&_LVP_OFF&_MCLRE_ON&_INTOSC_OSC_NOCLKOUT
  17.  
  18. ;.................................................................
  19. ;Definición de pines
  20. #DEFINE         PULSADOR        PORTB,3         ;Pin de entrada del pulsador
  21.  
  22. ;Definición de la RAM
  23. NUM_DISCA       EQU             .32             ;20h Numero que se está discando
  24. TEMP            EQU             .33             ;21h Reguistro temporal
  25. CARRIER         EQU             .34             ;22h Carrier DTMF
  26. TONO_LOW        EQU             .35             ;23h Tono bajo
  27. DEC_TONO_L      EQU             .36             ;24h Decrementar tono bajo
  28. TONO_HIGH       EQU             .37             ;25h Tono alto
  29. DEC_TONO_H      EQU             .38             ;26h Decrementar tono alto
  30. CONT_1          EQU             .39             ;27h Rutina de retardo
  31. CONT_2          EQU             .40             ;28h Rutina de retardo
  32. CONT_3          EQU             .41             ;29h Rutina de retardo
  33.  
  34. ;.................................................................
  35.         ORG     .0
  36.         bcf     STATUS,RP0      ;Selecciono el banco de memoria 0
  37.         bcf     STATUS,RP1
  38.         goto    INICIO
  39.  
  40.         ORG     .4
  41.         bcf     INTCON,GIE      ;Desactivo todas las intrerrupciones
  42.         return
  43.  
  44. ;.................................................................
  45. ;Table 1 Tabla que almacena el numero a discar
  46. ;0A = 0
  47. ;01 = 1
  48. ;02 = 2
  49. ;03 = 3
  50. ;04 = 4
  51. ;05 = 5
  52. ;06 = 6
  53. ;07 = 7
  54. ;08 = 8
  55. ;09 = 9
  56.  
  57. ;Colocar tantos RETLW como dígitos tenga el numero que se desea discar
  58. ;Para finalizar colocar el valor RETLW 0Eh para indicar que ya no hay numeros a discar
  59. ;En el ejemplo el numero discado es: 0112329255
  60.  
  61. Table1
  62.         addwf   PCL,F
  63.         retlw   0Ah             ;0
  64.         retlw   01h             ;1
  65.         retlw   01h             ;1
  66.         retlw   02h             ;2
  67.         retlw   03h             ;3
  68.         retlw   02h             ;2
  69.         retlw   09h             ;9
  70.         retlw   02h             ;2
  71.         retlw   05h             ;5
  72.         retlw   05h             ;5
  73.         retlw   0Eh             ;E = fin del numero
  74.  
  75. ;.................................................................
  76. ;Table2 tonos bajos del DTMF
  77. Table2
  78.         addwf   PCL,F
  79.         nop
  80.         retlw   75h             ;1
  81.         retlw   75h             ;2
  82.         retlw   75h             ;3
  83.         retlw   6Bh             ;4
  84.         retlw   6Bh             ;5
  85.         retlw   6Bh             ;6
  86.         retlw   60h             ;7
  87.         retlw   60h             ;8
  88.         retlw   60h             ;9
  89.         retlw   57h             ;0
  90.  
  91. ;.................................................................
  92. ;Table3 tonos altos del DTMF
  93. Table3
  94.         addwf   PCL,F
  95.         nop
  96.         retlw   44h             ;1
  97.         retlw   3Dh             ;2
  98.         retlw   37h             ;3
  99.         retlw   44h             ;4
  100.         retlw   3Dh             ;5
  101.         retlw   37h             ;6
  102.         retlw   44h             ;7
  103.         retlw   3Dh             ;8
  104.         retlw   38h             ;9
  105.         retlw   3Dh             ;0
  106.  
  107. ;.................................................................
  108. ;Short delay between tone approx 50mS
  109. Del1
  110.         clrwdt                  ;Reseteo el WDT
  111.         movlw   .80
  112.         movwf   CONT_2
  113. Del1A
  114.         decfsz  CONT_1,F
  115.         goto    Del1A
  116.         decfsz  CONT_2,F
  117.         goto    Del1A
  118.         retlw   .0
  119.  
  120. ;.................................................................
  121. ;Retardo de 0.7sec
  122. Del2
  123.         clrwdt                  ;Reseteo el WDT
  124.         nop
  125.         nop
  126.         nop
  127.         nop
  128.         nop
  129.         nop
  130.         nop
  131.         decfsz  CONT_1,F
  132.         goto    Del2
  133.         decfsz  CONT_2,F
  134.         goto    Del2
  135.         retlw   .0
  136.  
  137. ;.................................................................
  138. ;Retardo de 0.1sec
  139. Del3
  140.         movlw   .110
  141.         movwf   CONT_1
  142. PLoop1
  143.         movlw   .181
  144.         movwf   CONT_2
  145. PLoop2
  146.         clrwdt                  ;Reseteo el WDT
  147.         clrwdt                  ;Reseteo el WDT
  148.         decfsz  CONT_2,F
  149.         goto    PLoop2
  150.         decfsz  CONT_1,F
  151.         goto    PLoop1
  152.         retlw   .0
  153.  
  154. ;.................................................................
  155. ;Discado del numero por medio de DTMF
  156. Dial1
  157.         movf    NUM_DISCA,W     ;Cargo el dígito a discar en W
  158.         call    Table1
  159.         movwf   CARRIER         ;Cargo en CARRIER el numero a discar
  160.         movlw   0Eh             ;Verifico que el valor anterior no sea 0Eh
  161.         xorwf   CARRIER,W
  162.         btfsc   STATUS,Z
  163.         goto    Main5           ;Si es 0Eh salgo de la rutina de discado
  164.         movf    CARRIER,W
  165.         call    Table2
  166.         movwf   TONO_LOW        ;Cargo el reguistro con el valor para el tono bajo
  167.         movwf   DEC_TONO_L      ;Cargo el reguistro con el valor para el tono bajo
  168.         movf    CARRIER,W
  169.         call    Table3
  170.         movwf   TONO_HIGH       ;Cargo el reguistro con el valor para el tono alto
  171.         movwf   DEC_TONO_H      ;Cargo el reguistro con el valor para el tono alto
  172.         goto    DTMF1
  173. Dial2
  174.         call    Del1            ;Llamada a retardo antes de discarl el proximo dígito
  175.         call    Del1            ;Llamada a retardo antes de discarl el proximo dígito
  176.         incf    NUM_DISCA,F     ;Incremento el dígito a discar
  177.         goto    Dial1
  178.  
  179. ;.................................................................
  180. ;Rutina que genera el DTMF
  181. DTMF1
  182.         movlw   .160            ;Cantidad de ciclos del tono de discado
  183.         movwf   TEMP
  184. DTMF2
  185.         decfsz  DEC_TONO_H,F    ;Decremento el reguistro del tono alto
  186.         goto    DTMF3
  187.         movlw   .16
  188.         xorwf   PORTB,F         ;Seteo la salida adecuada
  189.         movf    TONO_HIGH,W     ;Cargo W con el valor para el tono alto
  190.         movwf   DEC_TONO_H      ;Re-Cargo el reguistro de decremento de tono alto con el valor inicial
  191. DTMF3
  192.         decfsz  DEC_TONO_L,F    ;Decremento el reguistro del tono bajo
  193.         goto    DTMF2
  194.         movlw   .32
  195.         xorwf   PORTB,F         ;Seteo la salida adecuada
  196.         movf    TONO_LOW,W      ;To re-load low-tone file
  197.         movwf   DEC_TONO_L      ;Re-load low-tone file
  198.         decfsz  TEMP,F          ;Decrement loops file
  199.         goto    DTMF2
  200.         goto    Dial2
  201.  
  202. ;.................................................................
  203. INICIO
  204.         clrwdt                  ;Reseteo el WDT
  205.         movlw   .7              ;Desactivo los comparadores
  206.         movwf   CMCON
  207.         clrf    PORTA           ;Borro el puerto A
  208.         clrf    PORTB           ;Borro el puerto B
  209.         bsf     STATUS,RP0      ;Cambio al banco de memoria 1
  210.         movlw   B'01111111'     ;Todo el puerto A como entrada
  211.         movwf   TRISA
  212.         movlw   B'11001111'     ;RB4 y RB5 como salidas y el resto entradas
  213.         movwf   TRISB
  214.         movlw   B'10001111'     ;Prescaler en 128 asignado al WDT
  215.         movwf   OPTION_REG      ;Cargo el reguistro OPTION
  216.         bcf     STATUS,RP0      ;Cambio al banco de memoria 0
  217.  
  218. Main1
  219.         call    Del2            ;Llamada a retardo
  220.         call    Del2            ;Llamada a retardo
  221.  
  222.         clrf    NUM_DISCA       ;Borro todos los reguistros a usar
  223.         clrf    TEMP
  224.         clrf    CARRIER
  225.         clrf    TONO_LOW
  226.         clrf    DEC_TONO_L
  227.         clrf    TONO_HIGH
  228.         clrf    DEC_TONO_H
  229.         clrf    CONT_1
  230.         clrf    CONT_2
  231.         clrf    CONT_3
  232.  
  233. Main2
  234.         movf    NUM_DISCA,W
  235.         call    Table1
  236.         xorlw   .0
  237.         btfss   STATUS,Z
  238.         goto    Main3
  239.         incf    NUM_DISCA,F
  240.         goto    Main2
  241. Main3
  242.         btfss   PULSADOR        ;Verifico el pulsador, si esta en alto salto
  243.         goto    Main4           ;si está en bajo salto a la rutina Main4
  244. Sw
  245.         clrwdt                  ;Reseteo el WDT
  246.         btfsc   PULSADOR        ;Verifico el pulsador, si esta en bajo salto
  247.         goto    Sw              ;Si es alto salto a Sw
  248.         call    Del3            ;Llamada a retardo
  249.         btfsc   PULSADOR        ;Verifico el pulsador, si esta en bajo salto
  250.         goto    Sw              ;Si es alto salto a Sw
  251. Main4
  252.         clrwdt                  ;Reseteo el WDT
  253.         goto    Dial1           ;Salto a la rutina de discado
  254. Main5
  255.         movlw   .166            ;Rutina de retardo de 2min para luego de discar
  256.         movwf   CONT_3
  257. RET
  258.         call    Del2            ;Llamada a retardo
  259.         decfsz  CONT_3,F
  260.         goto    RET
  261.         goto    Main1           ;Reinicio todo el proceso desde la posición Main1
  262.  
  263. ;.................................................................
  264.         end

Espero que funcione y me comentes que tal anduvo.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Mako22

  • PIC12
  • **
  • Mensajes: 77
Re: Ayuda para una persona mayor que vive sola
« Respuesta #12 en: 14 de Septiembre de 2007, 17:24:27 »
Bueno Carlos, que puedo decir, ¡ ESTO ES RAPIDEZ, LO DEMAS SON TONTERIAS !

Lástima que mañana tengo cerrada la tienda de componentes. Pero el lunes sin falta los compro y me pongo a montarlo. Cuanto lo pruebe te digo algo, espero tenerlo funcionando para el martes.

Usare para grabar el PIC el programa "Icprog".

¿Es necesario que haga algo en especial, o que active alguna opción es especial?

Que tengas un buen fin de semana.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda para una persona mayor que vive sola
« Respuesta #13 en: 14 de Septiembre de 2007, 19:40:25 »
Hola Mako22, no es necesario que hagas nada especial, solo compila el programa, habrelo con el IC-PROG y programa el PIC, tal cual está "creo" debería funcionar, ahora si tú deseas experimentar un poco eso es otro tema :mrgreen:

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ayuda para una persona mayor que vive sola
« Respuesta #14 en: 15 de Septiembre de 2007, 02:15:40 »
Offtopic

Chaly, ¿cuál es el software que utilizas para esos esquemas?


 

anything