Autor Tema: Interrupciones para el 12F629  (Leído 8805 veces)

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

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Interrupciones para el 12F629
« Respuesta #15 en: 01 de Julio de 2004, 00:45:00 »
Vaya algoridmos mas refrecantes que estais preparando , me gusta , lo bueno que tiene es que acabareis todos hablando el mismo idioma de programacion , entendiendoos perfectamente .....

Que rabia que tu local esté tan lejos de mi casa

Bueno Elena he visto que este sistema que usas para atender la interrupción , PBP escribe un codigo nada ortodoxo , es decir que por ejemplo si usas un "pause 1000" no saltara a ella hasta que termine con el pause , esto se comentó en un post por aquí cerca , Abago saves donde está ??.


Por ejemplo y como el tiempo no es importante que sea preciso para los pauses lo haces así y como maximo atendreá la interrupcion pasado un milisegundo .

Segundos = 1000 : gosub pausa

pausa:
for Segundos = Segundos to 0 step-1
     for ms=0 to 1000  "* 1 segundo*
          pause 1
          if mode=1 then return
next ms

next Segundos


Como tu aplicacion es muy simple , lo puedes hacer todo sin usar interrupciones ó tambien usando Define  INTHAND que es mas correcto .


Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Interrupciones para el 12F629
« Respuesta #16 en: 01 de Julio de 2004, 02:25:00 »
Hola chicos,



No funciona nada. Ayer probé el código con las modificaciones que me comentásteis, y nada. No hace nada el maldito pic. No entran las interrupciones, y no se por qué...


No me da guerra el pause, todavía... , lo que ocurre es que sencillamente el pic no se entera de la interrupción. Capullo.

En fin, como muy bien dice Sispic, es una chorrada de programa, y la verdad es que ya lo tengo hecho en ensamblador para el 16f84. Voy a intentar adaptar el codigo asm para el 12f, y espero que logre algo.
De todas formas, me da rabia...... porque es una chorrada y no entiendo porqué en basic no me sale esta idiotez. Voy a probar lo que me dices, Sisco, y también voy a rehacer el programa pero sin utilizar interrupciones, a ver qué tal se comporta la activación/desactivación.

Ya os contaré.
Millones de gracias, resalaos.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Interrupciones para el 12F629
« Respuesta #17 en: 01 de Julio de 2004, 08:53:00 »
Sisco, no se si te refieres al link en el que tratamos las mil posibilidades y fallos que me dieron a mi las interrupciones...
está en el subforo de pbp...
y se titulaba Manejo de interrupciones HELP!!!....

http://miarroba.com/foros/ver.php?temaid=1079915&foroid=8826

La verdad, es que hay se puede aprender algo...

ELENA!!! no te desesperes....
Una cosita... porque no manejas las interrupciones en ASM dentro del programa PBP ????.... Yo lo hago así, y funciona muy bien...

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Interrupciones para el 12F629
« Respuesta #18 en: 02 de Julio de 2004, 02:41:00 »
SOCORROOOOOOOOOOOOOOOOOOOOOOOOOOOOOO!!!!!!!!!!!!


Verás Sisco, es que no es muy correcto hacer el código con whiles y bucles for, porque tengo que meter chequeos a las entradas cada dos por tres, me tengo que asegurar que mientras la lámpara está en una secuencia de parpadeo, si entra un flanco en las entradas, va a salir INMEDIATAMENTE de la secuencia, sabes? y no va a tener que esperar a terminar el ciclo para comprobar la entrada... Además, los flancos de la entrada duran muy poquito, igual cuando vaya a comprobar la entrada, ya ha pasado el flanco... Es una lata.

Es que no lo consigo.... el pic no se entera, el capullo...
Bueno, no me desespero, vale. Abago, voy a hacer un tiento a eso que me dices, vale. ¿Me ayudás, bonito? voy a modificar el programa y te lo pongo aquí, a ver qué opináis, vale?

Gracias nenes. seguiré sonriendo...



Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Interrupciones para el 12F629
« Respuesta #19 en: 03 de Julio de 2004, 00:32:00 »
Si seguramente no se activa la interrupción. (ni idea)

una forma sin usarlas puede ser asi
Codigo:

    @ DEVICE pic12F629, 0x1FC4 "palabra de configuración: PWRT y BOREN enables
    @ ID 0x0012
    OPTION_REG = %01111111 "resistencias de pullup
    WPU = %00110011 "despertar resistencias
    TRISIO=%001100 "entradas: GP4 y GP5. Salida: GP2
    CMCON=%00000111 " Deshabilitar Comparatores. No lo uso para nada.


     Activa  con 2 : Desactiva con 1 : NoPulsados con 3

     Ms var word
     Pulsadores var byte  : pulsadores = NoPulsados
     rele VAR GPIO.2      : low rele
     Mode var bit         : Mode = 0
     I var byte

Main:

        if Pulsadores = Activa then
           mode = 1
           gosub activaRele
        endif else
        if Pulsadores = Desactiva then
           LOW rele
        endif


    "rutina principal
MImain:

    IF mode = 1 THEN   " ************
        mode = 0
        " Primer parpadeo
        HIGH rele                " mas rapido rele = 1
        Ms = 10000 : gosub Pausa
        LOW rele                 " mas rapido rele = 0
        " Segundo parpadeo
        FOR i = 1 TO 30
            HIGH rele
            Ms = 100 : gosub Pausa
            LOW rele
            Ms = 100 : gosub Pausa
        NEXT i
        " Tercer parpadeo
    loop:
        HIGH rele
        Ms = 100 : gosub Pausa
        LOW rele
        Ms = 1100 : gosub Pausa
    ENDIF
   
GOTO MAIN

activaRele:
   HIGH rele
return
   
pausa:
for Ms=Ms to 0 step-1
      Pulsadores = (GPIO  >> 4 )& %00000011
      if Pulsadores <> Nopulsados then Main    " si se ha pulsado alguno ,,, regresa al main
      pause 1                                  " hacemos pausas de 1 ms para ir verificando los pulsadores
next ms
return

End





Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Interrupciones para el 12F629
« Respuesta #20 en: 03 de Julio de 2004, 00:47:00 »
por cierto el TRISIO no tendria que estar así ?

TRISIO=%111011 "entradas: GP4 y GP5. Salida: GP2

suerte .

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Interrupciones para el 12F629
« Respuesta #21 en: 03 de Julio de 2004, 23:28:00 »
Escrito originalmente por Sispic
PBP escribe un codigo nada ortodoxo , es decir que por ejemplo si usas un "pause 1000" no saltara a ella hasta que termine con el pause


sisco... a que te refieres con lo anterior??
a que el pause bloquea la recepción de la interrupción?
o a que si se utiliza la interrupción del modo que la codifica PBP, ocurre esa desgracia....
La verdad es que yo las interrupciones las manejo en asm, dentro del programa PBP...
y en principio parece que funciona bien!!! pero ya me has dejado con la duda..

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Interrupciones para el 12F629
« Respuesta #22 en: 03 de Julio de 2004, 23:59:00 »
Si es así pero solo con el metodo "ON INTERRUPT GOTO MyInter"

No se bloquea la interrupción , digamos que pbp guarda los parametros cuando se produce y hasta que el pause no termina no saltara a tu rutina Myinter . (tambien con serin.... etc.)

Otra cosa es Define  INTHAND MyInter que atendera de manera normal .

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Interrupciones para el 12F629
« Respuesta #23 en: 04 de Julio de 2004, 09:10:00 »
AH!!! OK, vamos que solo pasa eso usando el ON INTERRUPT...
por suerte, he utilizado el DEFINE INTHAND myint

Tnks

Desconectado Elena2000

  • PIC24F
  • *****
  • Mensajes: 722
RE: Interrupciones para el 12F629
« Respuesta #24 en: 05 de Julio de 2004, 02:38:00 »
Hola chicos!

Qué trabajosos habéis estado el finde,

Os pongo a continuación mi versión del programita sin interrupciones, y funciona bien. Lo único que he visto al probarlo con el hadrware, es que se cuelan ruidos y activan el relé cuando no debe, así que voy a meter una validación de las entradas por software. Y otra cosa, a veces no se activan las resistencias de pull-up. ??

Bueno, este es el código:
Codigo:

    @ DEVICE pic12F629, 0x1FC4 "palabra de configuración PWRT y BOREN enables
     asm
     ID 0x0012
     endasm
     TRISIO = %00111011
     OPTION_REG = %01111111 "resistencias de pullup
     WPU = %00110011

    rele VAR GPIO.2           "pin 5 del micro
    activar VAR GPIO.4      "pin 3 del micro
    desactivar VAR GPIO.5   "pin 2 del micro
    i VAR WORD  " para los bucles

    PAUSE 200
   
" el circuito está vivo?
    high rele
    pause 1000
       
" Esperamos a que entre un cero en activar
main:
    while activar
    low rele
    WEND
       
" parpadeo
    " Iniciamos la secuencia de parpadeo con un encendido prolongado de 3 segundos
   
        for i=1 to 30
            HIGH rele
            if !desactivar then
                goto main
            ENDIF
            PAUSE 100
            next i
    " Iniciamos una secuencia de parpadeos rápidos durante 2 segundos
        FOR i = 1 TO 20
            HIGH rele
            pause 50
            LOW rele
            PAUSE 50
            if !desactivar then
                goto main
            ENDIF
        NEXT i
    " Iniciamos una secuencia de parpadeos a modo de baliza
loop:
        HIGH rele
        PAUSE 100
        LOW rele
        FOR i = 1 to 90
        PAUSE 10  
        if !desactivar then
              goto main
        ENDIF
        NEXT i
        if desactivar then    
            Goto loop
            else
            goto main
        ENDIF
   
END



Voy a probar el tuyo, Sisco, graciassssssss!
 Si me animo a intentar las interrupciones, ya os diré, pero de momento voy aver si termino la dichosa lamparita, que me llegan las vacaciones y tengo todo manga por hombro y sin terminar.


 

anything