Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

18/12/2010 #21

Avatar de ByAxel

¿Por qué no debería?

¿Qué es lo que te preocupa?

¿Quieres decir que al pulsar el botón RB7 debe ponerse a 1?
Me faltó completar la oración , me refiero a que una vez activado ese bit no puede volver a cero por si solo pero mágicamente luego de manipular un poco los pulsadores, el bit PEIE es cero..., sin el bit PEIE a '1' las interrupciones del TMR0 y externo no funcionan.
Creo que el problema está en las rutinas que son invocadas desde la interrupción y algo afecta al registro INTCON en todo ese proceso.

PD: Has usado el NotePad++?, te lo recomiendo... me facilita el trabajo de búsqueda en un texto extenso...
18/12/2010 #22

Avatar de Meta

Hola de nuevo campeón:

Si cualquier bit se pone a uno y hay que ponerlo a 0, lo pondré cuando acabe una acción. Espero que funcione así.

Esto de pasar cosas de un PIC a otro no sabía que era tan complicado. ¿Le pongo todas las interrupciones a 0 después de una acción por si acaso?

Mira esta parte del código, más bien al final que sólo dos se ponen a 0. ¿Los pongo todos?
Código:
ServicioInterrupcion
    btfsc    INTCON,TMR0IF
    call    Temporizador
    btfss    INTCON,RBIF                    ; Si es una interrupción RBI lee los pulsadores.
    goto    FinInterrupcion
    btfss    AjustePulsador                ; ¿Está presionado el pulsador de "AJUSTE"?.
    call    CambiarModo                    ; Sí, pues salta a la subrutina correspondiente.
    btfsc    IncrementarPulsador            ; ¿Pulsado "ON/INCREM"?.
    goto    FinInterrupcion                ; No, pues salta al final y sale.
;
    call    Retardo_20ms                ; Espera que se estabilice el nivel de tensión.
    btfsc    IncrementarPulsador            ; Si es un rebote del pulsador "ON/INCREM" sale fuera.
    goto    FinInterrupcion
    btfsc    F_Temporizador_OFF            ; ¿Estaba en reposo cuando pulsó "ON/INCREM"?
    call    ModoTemporizador_ON            ; Sí, pues comienza la temporización.
    btfsc    F_Temporizador_Ajuste        ; ¿Estaba ajustando tiempo?
    call    IncrementarTiempoDeseado    ; Sí, pues pasa a incrementar el tiempo deseado.
FinInterrupcion
    bcf        INTCON,RBIF                    ; Limpia los flags de reconocimiento.
    bcf        INTCON,TMR0IF
    retfie
El original para el 16F84A lo descarga por aquí.

Saludo.

PD: Lo del notepad++ no se si te refieres a este, ahora estoy usando todo el rato el MPLAB v8.60. El MPLAB X beta 4.1 está aún verde.






Edito:
Le he cambiado el código final que pouedes ver aquí y he logrado que el tiempo cuente. Ocurre una cosa, cada vez que inicias el PIC, debe soar un pitido en el zumbador cosa que no hace, lo mismo al finalizar el tiempo y cada vez que pulces un botón, como si fuera un reloj CASIO.

Al contar el temporizador no lo hace en cada segundo, por casa segundo que pasa cada vez es más tiempo y parece que no acaba, pero acaba y no suena el pito. Algo le pasa.

Código:
FinInterrupcion
    bcf        INTCON,RBIF                    ; Limpia los flags de reconocimiento.
    bcf        INTCON,TMR0IF
    movlw    b'11111010'                    ; Activa interrupciones RBI.
    movwf    INTCON
    retfie
Saludo.






Edito 2:

He probado el PIC16F88 en la protoboard, se cuelga y tiene comportamientos raros. En cuanto al simulador, ya activé bien el pito. En el Proteus no se cuelga, si comportamiento raro. No es la protoboard que lo he probado con el 16F84A y funciona de maravilla.

Temporizador Insoladora 16F88_v6.zip

Puedes mirar un vídeo de la protoboard con el PIC16F88 en acción y su comportamiento.
Temporizador_16f88.part1.rar
Temporizador_16f88.part2.rar

20/12/2010 #23

Avatar de Meta

Hola:

He estado comprobando en pareja con el 16F88 y 16F84A. Tienes razón en una cosa, tiene que ver mucho con las interrupciones.

Capturas:

  • Ver paso 1 - Enciende los PIC.
  • Ver paso 2 - Pulsa el botón RB7. Por ahora las intrrupciones son iguales.
  • Ver paso 3 - Pulsa el botón RB6. Sigue con los mismos bits.
  • Ver paso 4 - Pulsa RB7. El bits RBIE del 16F88 está en 0 y del 16F84A en 1.
  • Ver paso 5 - Con RB7 para el 16F84A cuenta atrás bien, el 16F88 no puede contar.

Eso es todo lo que he descubierto. Voy a investigar si es posible arreglar estas cosas. Cualquier auyda es bien recibida.

Saludo.

Hola:

¿Hay alguna esperanza?

Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.