Autor Tema: 12509 IR !!!ALGUNA IDEA¡¡¡  (Leído 3171 veces)

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

Desconectado litris

  • PIC16
  • ***
  • Mensajes: 226
12509 IR !!!ALGUNA IDEA¡¡¡
« en: 02 de Mayo de 2004, 07:40:00 »
Con este 12509 lo que hace es que si detecta un ostaculo por el lado izquierdo activa una salida por ese lado, y si lo hace por el derecho activa esa salida.

En los Microbots que he realizado funciona perfectamente, pero el problema esta para usarlo con un automata ya que ha esas salidas le he intercalado un ULN2003 y dos reles de 5VDC, ¿que ocurre?, pues que cuado te acercas funciona bien pero al acercarte o alejarte como es instantaneo la entrada y salida verian(chisporrotea el rele) y tengo una salida inestable.

Como puedo hacer en este codigo para que una vez a detectado la izquierda o derecha lo deje activado por lo menos 1 s o un poco menos y luego vuelva a leer, y lo mismo si vuelve a activar que se pause un segundo.

Y asi evito ese chisporroteo de reles.

Codigo:
;
   TITLE "Infra Red Proximity Detector - uses Sharp GP1U581Y"
;
; Copyright (c) 1998 Jeff Koenig
; Licensed under the GNU GPL Version 2 or later
;
   LIST P = 12C509, F = INHX8M
; P12C509.INC  Standard Header File, Version 1.02    Microchip Technology, Inc.
   NOLIST
;==========================================================================
;       Verify Processor
;==========================================================================
        IFNDEF __12C509
           MESSG "Processor-header file mismatch.  Verify selected processor."
        ENDIF
;==========================================================================
;       Register Definitions
;==========================================================================
W                            EQU     H"0000"
F                            EQU     H"0001"
;----- Register Files -----------------------------------------------------
INDF                         EQU     H"0000"   ; Uses FSR to address data mem.
TMR0                         EQU     H"0001"   ; 8 bit real time clock/counter
PCL                          EQU     H"0002"   ; Low order 8 bits of PC
STATUS                       EQU     H"0003"   ; STATUS
FSR                          EQU     H"0004"   ; Indirect data memory addr pointer
OSCCAL                       EQU     H"0005"   ; Calibration data for osc.
GPIO                         EQU     H"0006"   ; General Purpose I/O
;----- STATUS Bits -----------Page 14--------------------------------------
GPWUF                        EQU     H"0007"   ; GPIO reset bit
PA0                          EQU     H"0005"   ; Program Page preselect
NOT_TO                       EQU     H"0004"   ; Time Out bit
NOT_PD                       EQU     H"0003"   ; Power Down bit
ZERO                         EQU     H"0002"   ; Zero bit
DC                           EQU     H"0001"   ; Digit carry/*borrow bit
CARRY                        EQU     H"0000"   ; carry/*borrow bit
;----- OPTION Bits -----------Page 15--------------------------------------
NOT_GPWU                     EQU     H"0007"   ; Enable wake-up on pin change
NOT_GPPU                     EQU     H"0006"   ; Enable weak pull-ups
T0CS                         EQU     H"0005"   ; Timer0 clock source select
T0SE                         EQU     H"0004"   ; Timer0 sources edge select
PSA                          EQU     H"0003"   ; Prescalar assignment bit
PS2                          EQU     H"0002"   ;
PS1                          EQU     H"0001"   ; > Prescalar rate select bits
PS0                          EQU     H"0000"   ;/
;==========================================================================
;       RAM Definition
;==========================================================================
        __MAXRAM H"3F"
;==========================================================================
;       Configuration Bits
;==========================================================================
_MCLRE_ON                    EQU     H"0FFF"      
_MCLRE_OFF                   EQU     H"0FEF"   
_CP_ON                       EQU     H"0FF7"   
_CP_OFF                      EQU     H"0FFF"   
_WDT_ON                      EQU     H"0FFF"   
_WDT_OFF                     EQU     H"0FFB"   
_LP_OSC                      EQU     H"0FFC"   
_XT_OSC                      EQU     H"0FFD"   
_IntRC_OSC                   EQU     H"0FFE"   
_ExtRC_OSC                   EQU     H"0FFF"   
   __CONFIG   ( _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC )
;==========================================================================
;       Program Variables
;==========================================================================

   CONSTANT   DELAYTIME=D"150"   ; Timer value

#define LEFTDETECT    GPIO,5   ; Pin 2 = GP5 = Bit 5
#define   RIGHTDETECT   GPIO,4   ; Pin 3 = GP4 = Bit 4
#define INHIBIT      GPIO,3  ; Pin 4 = GP3 = Bit 3  NOTE:  INPUT ONLY!
#define RIGHTLED   GPIO,2   ; Pin 5 = GP2 = Bit 2
#define IRDETECT   GPIO,1   ; Pin 6 = GP1 = Bit 1
#define LEFTLED      GPIO,0   ; Pin 7 = GP0 = Bit 0

      LIST
WAIT      EQU   9    ;  Location for counter for time delay loop

;==========================================================================

;       Code Begins
;==========================================================================

start
   ORG   H"00"
;   MOVLW   H"7F"      ; -- USED FOR OFFSET IN ERASABLE PARTS ---
   MOVWF    OSCCAL      ; Store the factory osc. calibration value
   MOVLW   B"00001010"   ; Set pins 4 as inputs, 2,3,5,6,7 as outputs
   TRIS   GPIO      ; Configure pins as either I or O
   MOVLW   B"00000000"   ; Set OPTION bits
   OPTION         ; Implement OPTION bits

   BCF   LEFTLED
   BCF    LEFTDETECT
   BCF    RIGHTLED
   BCF   RIGHTDETECT

main

noflash
   BTFSC   INHIBIT      ; Don"t flash the IR Leds if the INHIBIT pin is low
   GOTO    do_left      ;
   BTFSC   IRDETECT   ; Check the IR detector
   GOTO   NF1
   GOTO    NF2

NF1   BCF   LEFTDETECT   ; No 38 KHz IR detected
   BCF   RIGHTDETECT   ; So turn on off right and left LED

NF2   BSF   LEFTDETECT   ; 38 KHz IR detected
   BSF    RIGHTDETECT   ; So turn on right and left LED

   GOTO    noflash      ;


do_left   
   CALL   pulseleft   ; Pulse the left IR LED at 38 KHz for 600 microseconds
   BTFSC   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO    no_left      ; IR detector didn"t sense reflection with Left LED on
            
   CALL   delayloop   ; Wait 600 microseconds
   BTFSS   IRDETECT   ; Read the Sharp Module. Skip next inst. if no detection (0=detect)
   GOTO    no_left      ; Now check for an obstacle on the right side

   CALL   pulseleft   ; Pulse the left IR LED at 38 KHz for 600 microseconds
   BTFSC   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO   no_left      ; IR detector didn"t sense reflection with Left LED on

   CALL   delayloop   ; Wait 600 microseconds
   BTFSS   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO    no_left      ; Now check for an obstacle on the right side

   CALL   pulseleft   ; Pulse the left IR LED at 38 KHz for 600 microseconds
   BTFSC   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO   no_left      ; IR detector didn"t sense reflection with Left LED on
   BSF   LEFTDETECT   ; Turn on the left Visible LED
   GOTO    do_right   ;

no_left            ; No obstacle to the left, so
   BCF   LEFTDETECT   ; Turn off the left visible LED


do_right   
   CALL   pulseright   ; Pulse the right IR LED at 38 KHz for 600 microseconds
   BTFSC   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO    no_right   ; IR detector didn"t sense reflection with Right LED on
   
   CALL   delayloop   ; Wait 600 microseconds
   BTFSS   IRDETECT   ; Read the Sharp Module. Skip next inst. if no detection (0=detect)
   GOTO    no_right   ; Now check for an obstacle on the left side

   CALL   pulseright   ; Pulse the right IR LED at 38 KHz for 600 microseconds
   BTFSC   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO   no_right   ; IR detector didn"t sense reflection with Right LED on

   CALL   delayloop   ; Wait 600 microseconds
   BTFSS   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO    no_right   ; Now check for an obstacle on the left side

   CALL   pulseright   ; Pulse the right IR LED at 38 KHz for 600 microseconds
   BTFSC   IRDETECT   ; Read the Sharp Module. Skip next inst. if detection (0=detect)
   GOTO   no_right   ; IR detector didn"t sense reflection with Right LED on
   BSF   RIGHTDETECT   ; Turn on the left Visible LED

   GOTO    main
   
no_right         ; No obstacle to the right, so
   BCF   RIGHTDETECT   ; Turn off the right visible LED
   GOTO    main


delayloop         ;------------------------
   MOVLW   D"195"      ;
   MOVWF   WAIT      ;  This creates a 600 microsecond delay
loop            ;
   NOP         ;
   DECFSZ   WAIT,F      ;
   goto   loop      ;
   RETLW   0      ;------------------------


pulseleft         ;------------------------
   MOVLW   D"24"      ;
   MOVWF   WAIT      ;  Pulses the left IR led at 38 KHz
leloop   BSF   LEFTLED      ;  for 600 microseconds
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   BCF   LEFTLED      ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   DECFSZ   WAIT,F      ;
   GOTO    leloop      ;
   RETLW   0      ;------------------------
   
pulseright         ;------------------------
   MOVLW   D"24"       ;
   MOVWF   WAIT      ;  Pulses the right IR led
riloop   BSF   RIGHTLED    ;  for 600 microseconds
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;   
   NOP         ;
   NOP         ;
   NOP         ;
   BCF   RIGHTLED   ;
   NOP         ;
   NOP         ;   
   NOP         ;
   NOP         ;   
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   NOP         ;
   DECFSZ   WAIT,F      ;
   GOTO    riloop      ;
   RETLW   0      ;------------------------

   end
   






Saludos.

Desconectado litris

  • PIC16
  • ***
  • Mensajes: 226
RE: 12509 IR !!!ALGUNA IDEA¡¡¡
« Respuesta #1 en: 04 de Mayo de 2004, 16:23:00 »
¿No podeis darme alguna pista? le he añadido varios

Codigo:
delayloop         ;------------------------
   MOVLW   D"195"      ;
   MOVWF   WAIT      ;  This creates a 600 microsecond delay
loop            ;
   NOP         ;
   DECFSZ   WAIT,F      ;
   goto   loop      ;
   RETLW   0      ;------------------------



Antes de cambiar a la lectura del siguiente sensor y sigue haciendo lo mismo, y como no funciona en el proteus, estoy usando el 12c509A y ya son tres pruebas y no quiro cargarme mas 12c509

Saludos.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: 12509 IR !!!ALGUNA IDEA¡¡¡
« Respuesta #2 en: 04 de Mayo de 2004, 21:55:00 »
Hola  Litris... tendria que leer mas detenidamente tu programa, empaparme bien como trabaja... pero a golpe rapido de vista, tiene las demoras.... yo creo que el problema es de fuente de alimentacion... al conectar los reles a la carga alli hace cosas raras el pic....  prueba sin las cargas de los reles...
tienen los diodos en paralelo a las bobinas?...



Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado litris

  • PIC16
  • ***
  • Mensajes: 226
RE: 12509 IR !!!ALGUNA IDEA¡¡¡
« Respuesta #3 en: 05 de Mayo de 2004, 02:29:00 »
Los reles estan conectados a un ULN 2003 que trae diodos, y este al 12C509A pero ademas los reles son los pequeños de omron que creo que trae los diodos ya.

El circuito tinen dos led para representar las salidas, que hacen lo mismo, o sea se enciende al poner la mano y se apaga al acercarla pero si te acercas despacio cuando llega el umbral de detencion el led y los reles parpadean muy rapido, y el resulatado es el chiporroteo del led y rele.

Entonces yo creo que si cuando a detectado en un lado u otro y enciende el rele que ya no haga caso asta pasado un segundo y vuelta a empeza y a si se evitaria el chiporroteo, ¿no?

El circuito detector es de aqui http://www.dprg.org/projects/1998-08a/

Y la etapa de potencia para atacar el automata es mia echa en una placa pretaladrada, y es esta.




Saludos.

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 307
RE: 12509 IR !!!ALGUNA IDEA¡¡¡
« Respuesta #4 en: 05 de Mayo de 2004, 22:18:00 »
hola litris
pienso que puede ser que al pic te falle por ruido ya que veo en la foto que el pic esta muy lejo del uln2003 y los cables que usas pueden generar ruido electrico.
en tu caso yo juntaria el pic y el uln2003 en el mismo circuito y las salidas del uln2003 las mandaria por los cables y arimentaria los relay  ya que los cables pueden generar mucho ruido y los pines del pic pueden ser muy sencitivos a los ruidos electricos.
esa es mi idea. porque tuve muchos problemas con esos ruidos en muchos projectos con pic.
saludos a todos    miltonmc

Desconectado litris

  • PIC16
  • ***
  • Mensajes: 226
RE: 12509 IR !!!ALGUNA IDEA¡¡¡
« Respuesta #5 en: 06 de Mayo de 2004, 02:35:00 »
Lo he pensado, pero lo que ocurre es que el circuito donde esta el pic tiene dos diodos que simulan la salida y realice la prueba usando solamente el circuito del pic sin la etapa de potencia, y hacia lo mismo el led enciende si pones la mano de golpe delante del sensor pero si la acercas lentamente el led parpadea hasta quedarse encendido es todo muy rapido pero hay esta el dichoso parpadeo, y yo habia pensado que, imaginate que existe el comando pause, pues cuando detecte el sensor a continuacion pause 1 segundo y luego sigue con el otro lado y lo mismo.

Yo creo que asi, cuando detecte presencia se quedaria fijo hasta que despues de un segundo siguiera el programa.

¿No?

Pues lo he intentado haciendo que pasara el ciclo con NOP y tampoco.

Saludos.

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 307
RE: 12509 IR !!!ALGUNA IDEA¡¡¡
« Respuesta #6 en: 06 de Mayo de 2004, 23:02:00 »
hola a todos
litris en ese caso yo pienso que puedes poner en palarelo con las bobinas de los relay un capacitor polarizado y dependiendo del valor en MF es el tiempo que permanece cerrado el relay y asi te evitas esa molestia puede ser de 4.7uF , 10uF  ,22uF, 47 ect.
pruebas con diferentes valores creo que puedes resorverlo asi.
saludos a todos
                                   miltonmc


 

anything