Autor Tema: limpiaparabrisas automovil  (Leído 2434 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado bcty236

  • PIC10
  • *
  • Mensajes: 6
limpiaparabrisas automovil
« en: 27 de Octubre de 2008, 15:09:45 »
Hola soy nuevo en esto y m han encomendado realizar un programa de control de un limpiaparabrisas de un automovil con dos posiciones: una en la que espera 3seg antes de repetir el ciclo y otra que lo hace de seguido.Hice un programa pero no me lo simula bien en proteus a pesar de q al ensamblarlo con mplab esta todo ok y por mas que lo reviso no encuentro fallos.Quería asegurarme q está bien y que el problema lo tengo al simular con proteus.El programa que hice es el siguiente:

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: limpiaparabrisas automovil
« Respuesta #1 en: 29 de Octubre de 2008, 00:01:55 »
Hola. La próxima podrías adjuntar el archivo de simulación para ahorrar trabajo y explicar un poco más qué hace cada pin del PIC.

Dos problemas:

1ero: Faltó configurar las entradas analógicas de este uC como digitales(por eso la simulación no funcionaba bien(ni lo hubiese hecho en la realidad));
2do:  MARCHA1 tenía errores de programación. No es lo mísmo hacer

   bsf PORTB,1

 que hacer

   movlw 2
   movwf PORTB

En el primer caso estas poniendo a 1 el bit1 del puertob, indiferentemente del estado que tengan los otros 7 bits. En el segundo caso no sólo estás poniendo a 1 el bit1 del puertob sino que además estás poniendo a 0 los 7 bits restantes(hablando de que todo el puertob este configurado como salida, eh!).

Retoqué un poco tu programa y debería funcionar como creo que querés...

P.D: Te voy a felicitar por la prolijidad del programa: bastante comentado y bien tabulado.

Saludos.

Código: ASM
  1. ;---------------Encabezado-------------
  2.  
  3.     LIST p=16f876A
  4.         include "p16F876A.inc"
  5.     radix hex
  6.  
  7.         __config _XT_OSC & _WDT_OFF & _LVP_OFF & _BODEN_OFF & _CP_OFF
  8.  
  9. ;------------Configuración de registros de uso General---------
  10.  
  11. PDel0   equ 0x21   ;registros para los
  12. PDel1   equ 0x22   ; retardos
  13. PDel2   equ 0x23
  14.  
  15.  
  16. ;------------Definiciones---------
  17. #DEFINE  DESACTIVADO  PORTA,0
  18. #DEFINE  VELOCIDAD    PORTA,1
  19. #DEFINE  F1           PORTA,3
  20. #DEFINE  F2           PORTA,4
  21. ;------------------Configuración de puertos-----------------
  22.  
  23.                   ERRORLEVEL -302
  24.  
  25. reset     org 0x00    ; origen del programa, aquí comenzará
  26.                       ; siempre que ocurra un reset
  27.           goto inicio ; salta a "inicio"
  28.  
  29. inicio    bsf   STATUS,RP0 ; pone rp0 a 1 y pasa al banco1
  30.                   movlw 0x06
  31.               movwf     ADCON1   ;todas entradas digitales!
  32.           movlw b'011111'
  33.           movwf TRISA    ; Ra0-Ra4=entradas
  34.           clrf  TRISB     ; el puerto B y C los pongo
  35.           clrf  TRISC     ; como salidas aunque C no se usa
  36.           bcf   STATUS,RP0  ; pone rp0 a 0 y regresa al banco0
  37.  
  38.  
  39. ;---------------------Lectura de entradas------------------------
  40.  
  41. bucle
  42.     clrf  PORTB            ;salidas a cero
  43.     btfsc DESACTIVADO      ;salta la sig instrucción si RA0=0
  44.     goto  bucle            ;si el conmutador está en paro no hace nada
  45.  
  46.     btfss F1              ;si está pulsado F1 salto la siguiente
  47.     call  ERRORPOSICION
  48.  
  49.     btfsc VELOCIDAD     ;salta la sig instrucción si RA1=0
  50.     goto  MARCHA1       ;el conmutador está en 1
  51.  
  52.     goto  MARCHA2       ;el conmutador está en 2
  53.  
  54.  
  55. ;-----------------Marcha 1 seleccionada--------------------
  56.  
  57. MARCHA1
  58.         movlw   0x01
  59.         movwf   PORTB
  60. espera
  61.     btfss F2       ;no hago nada hasta que se
  62.     goto  espera    ;activa el F2
  63.  
  64.     clrf  PORTB     ;paro el motor
  65.     call  TRESEG    ;espero 3 seg antes de invertir
  66.     movlw 0x02      ;activo el giro a izqdas
  67.     movwf PORTB
  68. esperar
  69.     btfss F1       ;no hago nada hasta que se
  70.     goto  esperar   ;activa de nuevo F1
  71.  
  72.     goto  bucle     ;vuelvo a leer las entradas
  73. ;----------------------------------------------------------
  74.  
  75.  
  76. ;-------------------Marcha 2 seleccionada------------------
  77.  
  78. MARCHA2
  79.         movlw 0x01      ;activo el giro a derechas
  80.     movwf PORTB
  81. espera1
  82.     btfss F2       ;no hago nada hasta que se
  83.     goto  espera1   ;activa el F2
  84.     clrf  PORTB     ;paro el motor antes de invertir
  85.     call  RETARDOi  ;espero 1/2 seg antes de invertir
  86.     movlw 0x02      ;activo el giro a izqdas
  87.     movwf PORTB
  88. espera2
  89.     btfss F1       ;no hago nada hasta que se
  90.     goto  espera2   ;activa de nuevo F1
  91.     goto  bucle     ;vuelvo a leer las entradas
  92. ;------------------------------------------------------------
  93.  
  94.  
  95. ;----------------Espera de 3seg para marcha 1-----------------
  96.  
  97. TRESEG  movlw     .67       ; 1 set numero de repeticion  (C)
  98.         movwf     PDel0     ; 1 |
  99. PLoop0  movlw     .91       ; 1 set numero de repeticion  (B)
  100.         movwf     PDel1      ; 1 |
  101. PLoop1  movlw     .122      ; 1 set numero de repeticion  (A)
  102.         movwf     PDel2     ; 1 |
  103. PLoop2  clrwdt              ; 1 clear watchdog
  104.         decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
  105.         goto      PLoop2    ; 2 no, loop
  106.         decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
  107.         goto      PLoop1    ; 2 no, loop
  108.         decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
  109.         goto      PLoop0    ; 2 no, loop
  110. PDlL1   goto PDlL2         ; 2 ciclos delay
  111. PDlL2   clrwdt              ; 1 ciclo delay
  112.         return              ; 2+2 Fin.
  113. ;------------------------------------------------------------
  114.  
  115.  
  116. ;--------------Espera de 1/2 seg antes de invertir-------------
  117.  
  118. RETARDOi  movlw     .239      ; 1 set numero de repeticion  (B)
  119.           movwf     PDel0     ; 1 |
  120. PLoop11   movlw     .232      ; 1 set numero de repeticion  (A)
  121.           movwf     PDel1     ; 1 |
  122. PLoop22   clrwdt              ; 1 clear watchdog
  123. PDelL1    goto PDelL2         ; 2 ciclos delay
  124. PDelL2    goto PDelL3         ; 2 ciclos delay
  125. PDelL3    clrwdt              ; 1 ciclo delay
  126.           decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
  127.           goto      PLoop22   ; 2 no, loop
  128.           decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
  129.           goto      PLoop11   ; 2 no, loop
  130. PDelL4    goto PDelL5         ; 2 ciclos delay
  131. PDelL5    goto PDelL6         ; 2 ciclos delay
  132. PDelL6    goto PDelL7         ; 2 ciclos delay
  133. PDelL7    clrwdt              ; 1 ciclo delay
  134.           return              ; 2+2 Fin.
  135. ;-----------------------------------------------------------
  136.  
  137.  
  138. ;---------------------Error de posición---------------------
  139.  
  140. ERRORPOSICION
  141.     movlw 0x02
  142.     movwf PORTB     ;activo giro a izqdas
  143. espera3
  144.     btfss F1     ;no hago nada hasta que se
  145.     goto  espera3   ;activa de nuevo F1
  146.     clrf  PORTB     ;entonces paro el motor y regreso
  147.     return
  148. ;-----------------------------------------------------------
  149.  
  150.  
  151. ;------------------------------------------
  152.     end ; se acabó
  153. ;------------------------------------------
"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.

Desconectado bcty236

  • PIC10
  • *
  • Mensajes: 6
Re: limpiaparabrisas automovil
« Respuesta #2 en: 29 de Octubre de 2008, 15:32:26 »
Fantástico!!!!!muchisimas gracias por las molestias.Ahora va de maravilla.Lo simula perfectamente.una duda que tengo es: la linea
__config _XT_OSC & _WDT_OFF & _LVP_OFF & _BODEN_OFF & _CP_OFF

en la supongo que configuras los fuses de programación ¿es necesaria? ¿da problemas si no se pone?


Por cierto: la primera vez que oigo la palabra prolijidad......No dejo de aprender cosas en este foro :)
« Última modificación: 29 de Octubre de 2008, 15:37:39 por bcty236 »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: limpiaparabrisas automovil
« Respuesta #3 en: 29 de Octubre de 2008, 21:02:09 »
Hola,

 No es estrictamente necesaria. Si eliges los fuses desde el software programador u otro tampoco hay problema. Si tenés configurado tu soft grabador para leer la configuración desde el fichero .hex, lo más prolijo es poner esta línea. Igualmente, corroborá que corresponda a la configuración que necesitás.

Por cierto: la primera vez que oigo la palabra prolijidad......No dejo de aprender cosas en este foro :)

No te preocupes...que todos estamos en contínuo aprendizaje :)

Saludos.
"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