Programación Específica > Microcontroladores

 Despertar el micro por RX

<< < (2/5) > >>

Pegasux:
Muy buenas. Pues parece que no funciona bien la cosa. Tambien he probado a colocar un diodo en ambos sentidos (por si acaso). El tema es que si habilito la interrupcion del bit 0 del puerto B se despierta siempre, aunque no  haya señal de recepcion (quito el cable). Igual pruebo con resistencias pull-up y pull-down... Si alguien tiene alguna idea se agradece toda la ayuda posible.

Saludos.

Toph:

--- Cita de: "Pegasux" ---Muy buenas. Pues parece que no funciona bien la cosa. Tambien he probado a colocar un diodo en ambos sentidos (por si acaso). El tema es que si habilito la interrupcion del bit 0 del puerto B se despierta siempre, aunque no  haya señal de recepcion (quito el cable). Igual pruebo con resistencias pull-up y pull-down... Si alguien tiene alguna idea se agradece toda la ayuda posible.

Saludos.
--- Fin de la cita ---

la interrupcion en el puerto B ¿las has puesto que se active con bajo?, ya que debe ser asi, porque sino mal recuerdo cuando no ha recibido dato esta en alto hasta que recibe cambia a cero momentaneamente.

Pegasux:
Hola de nuevo. No se como se hace exactamente lo que dices, pero si que puede ser... tengo un libro de este pic y aqui no pone nada de que se activen a nivel bajo. Pongo debajo el codigo de lo que hago, se que no esta completo, pero es por abreviar... La idea es que mientras duerme, le llega el primer byte y antes de que salte la interrupcion por recepcion (la recepcion es mucho mas lenta que el micro) el micro se despierta y al retornar de la Interrupcion hace el retardo de 1 segundo durante el cual le llega todo el paquete de datos, despues se habilita el LCD y saca algo por pantalla.

Un saludo y muchas gracias!!!

.....
   bcf      STATUS,RP0      ; banco 0
   bcf      PORTA,2         ; deshabilitamos LCD para evitar problemas (señal E)

   bsf      STATUS,RP0      ; banco 1
   bsf      TRISB,0         ; PortB,0 como entrada para INT0
   bcf      STATUS,RP0      ; banco 0

   bsf      INTCON,4      ; INT0IE habilitado

;   call   RX            ; nos preparamos para recibir datos por interrupciones

   sleep   ; AQUI SE SUPONE QUE SALTA LA INTERRUPCION

   call Retardo_1s      ; para que le de tiempo al paquete a llegar entero

   bsf      STATUS,RP0      ; banco 1
   bcf      TRISB,0         ; PortB,0 como salida para LCD
   bcf      STATUS,RP0      ; banco 0

   bsf      PORTA,2         ; habilitamos LCD
....
ServicioInterrupcion

      MOVWF   GUARDA_W
      SWAPF   STATUS,W
      MOVWF   GUARDA_S   

   bcf      INTCON,4      ; quitamos interrupciones por INT0
   bcf      INTCON,1      ; borramos flag INT0

      SWAPF GUARDA_S,W
      MOVWF STATUS
      SWAPF   GUARDA_W,W

   retfie

....

Toph:

--- Cita de: "Pegasux" ---Hola de nuevo. No se como se hace exactamente lo que dices, pero si que puede ser... tengo un libro de este pic y aqui no pone nada de que se activen a nivel bajo.
--- Fin de la cita ---
pegasux a parte de los libros debes revisar el datasheet, en el registro OPTION_REG REGISTER (ADDRESS 81h, 181h) esta el bit 6 INTEDG para colocar lo que te digo
--- Citar ---bit 6 INTEDG: Interrupt Edge Select bit
1 = Interrupt on rising edge of RB0/INT pin
0 = Interrupt on falling edge of RB0/INT pin
--- Fin de la cita ---
ahi debes colocar que sea 0 (cuando haya un flanco negativo, pase de uno a cero),otra cosa en cuanto se de la interrupcion la desactivas porque despues van a llegar mas flancos.

como veo que no estabas usando este registro, si ves en el datasheet ese bit estaba a uno o sea que detectaba flanco positivo

Pegasux:
Hola de nuevo. Muchas gracias por tu ayuda, pero me temo que sigue sin funcionar. Sin conectar a ningun sitio salta la interrupcion, ya sea con el bit ese a 0 o a 1, y con resistencias pull up o pull down tambien salta. He comprobado con un led la polaridad de la linea RX y he comprobado que en ausencia de datos esta a ' 1', luego es correcto que la irq se produzca por flanco de bajada, aunque mientras se estan recibiendo los datos del primer byte habra varios flancos de subida y bajada, por lo que deberia saltar de todas formas... Tambien he probado habilitando y deshabilitando las resistencias de pull up del puerto B, pero nada...
Efectivamente lo primero que hago al entrar en la interrupcion es desactivarlas, ya que como se ha despertado el micro ya no me sirve para nada.

Un saludo.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa