Autor Tema: Control de carga via DTMF con pic 16F628A, no se que estoy haciendo mal!!!!  (Leído 4116 veces)

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

Desconectado rnelson

  • PIC12
  • **
  • Mensajes: 53
ante todo un cordial saludo.
Les escribo en esta oportunidad para perdirles de su valiosa colaboracion, en meses atras estaba tratando de elaborar un codigo que hiciera lo siguiente:
El PIC de trabajo es el 16f628A y el asm consiste en recibir un codigo proveniente de un codificador DTMF por el puerto A de 4bit una y de acuerdo a este codigo habilitar o deshabilitar los rele ubicados en el puerto B, el programa cuando lo compilo no me da errores, pero cuando lo quiero grabar en el pic me da un error que desconozco, lo he intentado probar en el proteus pero no lo se usar y no encuentro los componentes en la libreria del mismo.

Les estoy pasando el codigo para ver si me pueden hacer el favor de probarlo en sus pic o simuladores porque yo realmente no lo he podido hacer.

Código: ASM
  1. LIST    P=16F628A
  2.                 #INCLUDE<P16F628A.INC>
  3.  
  4.                 ERRORLEVEL      -302
  5.  
  6. TMP             equ     0x20
  7.  
  8. Digit1y2code    equ     0x22            ;estos 4 registros DEBEN ubicarse de manera
  9. Digit3y4code    equ     0x23            ;consecutiva en la memoria GPR del PIC.
  10. Digit5y6code    equ     0x24
  11. Digit7y8code    equ     0x25
  12.  
  13. DIGITOSREST     equ     0x26
  14. AUX             equ     0x27
  15. METHOD          equ     0x28
  16. IGUALES         equ     0x29
  17. CONTA           equ     0x2A
  18. NumRele         equ     0x2B
  19.  
  20. DATEEPROM       equ     0x2C
  21. DIREEPROM       equ     0x2D
  22.  
  23.                 ORG     0x2100          ;inicio DATA EEPROM.
  24.                 DE      0x00            ;iniciar por unica vez todos los reles apagados
  25.  
  26. ;*********************************************************
  27.  
  28.                 ORG     00H
  29.                 GOTO    INICIO
  30.                 ORG     04H
  31.  
  32. ;*********************************************************
  33. ;*      RUTINA DE SERVICIO PARA EL TIMER0                *
  34. ;*********************************************************
  35.  
  36.                 BTFSS   INTCON,2
  37.                 GOTO    SALE
  38.                 INCF    CONTA
  39.                 MOVF    CONTA,W
  40.                 XORLW   1EH
  41.                 BTFSS   STATUS,Z
  42.                 GOTO    SALE
  43.  
  44.                 CLRF    CONTA
  45.                 CALL    RESETALL
  46.  
  47. Sale            BCF     INTCON,2
  48.                 RETFIE
  49.  
  50. ;*********************************************************
  51.  
  52.  
  53.                 ORG     10H
  54.  
  55. INICIO          MOVLW   .7
  56.                 MOVWF   CMCON
  57.                 BSF     STATUS,5
  58.                 CLRF    TRISB
  59.                 MOVLW   b'00011111'
  60.                 MOVWF   TRISA
  61.                 MOVLW   B'11010111'
  62.                 MOVWF   OPTION_REG
  63.  
  64.                 BCF     STATUS,5
  65.  
  66.                 CLRF    DIREEPROM       ;Pedir Leer direccion 0x00 EEPROM
  67.                 CALL    LEER            ;LEER
  68.                 MOVWF   PORTB           ;Recuperar valor leido en puertoB
  69.  
  70.                 CLRF    PORTA
  71.                 CLRF    CONTA
  72.  
  73.                 MOVlW   b'10100000'
  74.                 MOVWF   INTCON
  75.  
  76.                 CALL    GETCODE
  77.                 CALL    RESETALL
  78.  
  79.  
  80. WAITNEXT        BTFSS   PORTA,4
  81.                 GOTO    $-1
  82.  
  83.                 CLRF    CONTA           ;limpiar contador auxiliar Timer0
  84.                 CLRF    TMR0            ;limpiar prescaler
  85.  
  86.                 MOVF    PORTA,W
  87.                 ANDLW   0X0F
  88.                 DECFSZ  DIGITOSREST,F
  89.                 GOTO    FALTAN
  90.  
  91.                 INCF    METHOD,F
  92.  
  93. FALTAN          CALL    COMPARA
  94.  
  95.                 BTFSC   PORTA,4
  96.                 GOTO    $-1
  97.                 GOTO    WAITNEXT
  98.  
  99. COMPARA         MOVWF   AUX
  100.                 MOVF    METHOD,W
  101.                 ADDWF   PCL,F
  102.                 GOTO    NIBBLEALTO
  103.                 GOTO    NIBBLEBAJO
  104.  
  105. RELE            MOVF    IGUALES,F
  106.                 BTFSS   STATUS,Z
  107.                 GOTO    SALIDA
  108.  
  109.                 MOVF    NumRele,W       ;leer numero de rele
  110.                 CALL    TABLA           ;y obtener tabla
  111.  
  112.                 BTFSS   AUX,0           ;encender?
  113.                 goto    Apagar          ;no. entonces apagar
  114.  
  115. Encender        IORWF   PORTB,F         ;Incluir numero de Rele en PUERTOB(encender Rele)
  116.                 CLRF    DIREEPROM       ;grabar en posicion EEPROM 0x00
  117.                 MOVF    PORTB,W
  118.                 MOVWF   DATEEPROM       ;ALMACENAR VALOR DEL PUERTOB EN DATOEEPROM
  119.                 CALL    ESCRIBIR
  120.                 goto    SALIDA          ;salir
  121.  
  122. Apagar          MOVWF   TMP             ;mover valor de tabla a variable temporal
  123.                 COMF    TMP,W           ;invertir el valor de los bits(Complementar)(Seria la funcion NOT)
  124.                 ANDWF   PORTB,F         ;al hacer una AND, se pone a cero el rele seleccionado.
  125.                 CLRF    DIREEPROM       ;grabar en posicion EEPROM 0x00
  126.                 MOVF    PORTB,W
  127.                 MOVWF   DATEEPROM       ;ALMACENAR VALOR DEL PUERTOB EN DATOEEPROM
  128.                 CALL    ESCRIBIR
  129.  
  130. SALIDA          CALL    RESETALL
  131.                 RETURN
  132.  
  133. NIBBLEBAJO      MOVLW   0X0F
  134.                 ANDWF   INDF,W
  135.                 XORWF   AUX,W
  136.                 IORWF   IGUALES,F
  137.                 INCF    FSR,F
  138.                 CLRF    METHOD
  139.                 RETURN
  140.  
  141. NIBBLEALTO      decf    DIGITOSREST,W
  142.                 btfsc   STATUS,Z
  143.                 goto    PenultimoDetectado
  144.  
  145.                 SWAPF   INDF,W          ;DAR VUELTA LOS NIBBLES( NIBBLE = GRUPO DE 4 BITS = MEDIO BYTE)
  146.                 ANDLW   0X0F
  147.                 XORWF   AUX,W
  148.                 IORWF   IGUALES,F
  149.                 INCF    METHOD,F
  150.                 RETURN
  151.  
  152. PenultimoDetectado
  153.                 movf    AUX,W
  154.                 movwf   NumRele
  155.                 return
  156.  
  157. GETCODE         MOVLW   0X12
  158.                 MOVWF   Digit1y2code
  159.                 MOVLW   0X34
  160.                 MOVWF   Digit3y4code
  161.                 MOVLW   0X56
  162.                 MOVWF   Digit5y6code
  163.                 MOVLW   0X78
  164.                 MOVWF   Digit7y8code
  165.                 RETURN
  166.  
  167. RESETALL        CLRF    IGUALES
  168.                 CLRF    METHOD
  169.                 MOVLW   0X22            ;debe ser siempre igual a la posicion de memoria de
  170.                                         ;Digit1y2code
  171.                 MOVWF   FSR
  172.                 MOVLW   0X0A
  173.                 MOVWF   DIGITOSREST
  174.                 RETURN
  175.  
  176. TABLA           ADDWF   PCL,1
  177.                 RETLW   .0
  178.                 RETLW   .1
  179.                 RETLW   .2
  180.                 RETLW   .4
  181.                 RETLW   .8
  182.                 RETLW   .16
  183.                 RETLW   .32
  184.                 RETLW   .64
  185.                 RETLW   .128
  186. ;               RETLW   .X
  187. ;               RETLW   .X
  188. ;               RETLW   .X
  189. ;               RETLW   .X
  190. ;               RETLW   .X
  191. ;               RETLW   .X
  192. ;               RETLW   .X
  193.  
  194.  
  195. LEER            MOVF    DIREEPROM,W     ;no entiendo esto
  196.                 BSF     STATUS, RP0
  197.                 MOVWF   EEADR
  198.                 BSF     EECON1, RD
  199.                 MOVF    EEDATA, W
  200.                 BCF     STATUS, RP0
  201.                 RETURN
  202.                
  203.  
  204. ESCRIBIR        MOVF    DIREEPROM,W
  205.                 BSF     STATUS,RP0
  206.                 MOVWF   EEADR
  207.                 BCF     STATUS,RP0
  208.                 MOVF    DATEEPROM,W     ;no entiendo esto
  209.                 BSF     STATUS,RP0
  210.                 MOVWF   EEDATA
  211.  
  212.                 BSF     EECON1, WREN
  213.                 BCF     INTCON, GIE
  214.                 BTFSC   INTCON,GIE
  215.                 GOTO    $-2
  216.  
  217.                 MOVLW   0x55
  218.                 MOVWF   EECON2
  219.                 MOVLW   0xAA
  220.                 MOVWF   EECON2
  221.                 BSF     EECON1,WR
  222.                 BCF     STATUS,RP0
  223.                 BSF     INTCON, GIE
  224.                 RETURN
  225.  
  226.                 END


Mucho les agradezco su colaboracion.

Atte. nelson rincon
« Última modificación: 13 de Julio de 2007, 11:50:20 por rnelson »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Control de carga via DTMF con pic 16F628A, no se que estoy haciendo mal!!!!
« Respuesta #1 en: 13 de Julio de 2007, 15:27:57 »
primero explica bien ese error para determinar por donde pueda estar el fallo
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Control de carga via DTMF con pic 16F628A, no se que estoy haciendo mal!!!!
« Respuesta #2 en: 13 de Julio de 2007, 15:45:41 »
Hola Nelson, yo he trabajado con integraditos dtmf, y tienen ademas una entrada de validacion, es decir que el codigo recibido se encuentra estable para leer...

quise ensayar tu codigo, pero tendria que ordenar y borrar uno por uno los numeros de linea que aparecen....

pasamelo por privado ok?

Suerte y nos comentas

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado rnelson

  • PIC12
  • **
  • Mensajes: 53
Re: Control de carga via DTMF con pic 16F628A, no se que estoy haciendo mal!!!!
« Respuesta #3 en: 13 de Julio de 2007, 17:32:14 »
No puedo visualizar sus email para pasarles tanto el error como el ASM, me los pueden indicar por favor?

Saludos y gracias.

Atte. Nelson

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Control de carga via DTMF con pic 16F628A, no se que estoy haciendo mal!!!!
« Respuesta #4 en: 14 de Julio de 2007, 08:55:57 »
Hola Nelson.

Creo que Norberto se refiere a que le pases un mensaje por privado pero no a su email, sino dentro del foro:

debes hacer click en el nombre de usuario, en este caso todopic para ver su perfil, fíjate que en "información adicional" (en la parte inferior de la pantalla que se abre) la primera opción es: Enviar a este usuario un mensaje personal.

Respecto a tu problema no soy de utilidad, me he olvidado del asm y me cuesta bastante y nunca usé un dtmf. Espero que encuentres la ayuda necesaria y lo soluciones. Saludos
     

Desconectado rnelson

  • PIC12
  • **
  • Mensajes: 53
Re: Control de carga via DTMF con pic 16F628A, no se que estoy haciendo mal!!!!
« Respuesta #5 en: 16 de Julio de 2007, 13:05:41 »
Gracias menta..

Ya les envie el correo en privado..

Saludos y gracias por lo que puedan hacer.

Atte. Nelson

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Control de carga via DTMF con pic 16F628A, no se que estoy haciendo mal!!!!
« Respuesta #6 en: 16 de Julio de 2007, 13:19:07 »
Dump!!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything