Autor Tema: Intermitentes moto.  (Leído 13111 veces)

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

Desconectado ohsielos

  • PIC10
  • *
  • Mensajes: 21
Re: Intermitentes moto.
« Respuesta #30 en: 22 de Diciembre de 2010, 10:38:23 »
Jejeje, rápido yo?  :D  en general nos gusta el sosiego y la tranquilidad. Pero como va tan bien no quiero de momento tocar nada hasta que lo instale y pruebe 'in situ'.
Efectivamente lo que puse en el primer post era eso porque es lo que recuerdo. Gracias a Dios las luces de emergencia las habré puesto desde que tengo la moto: por necesidad 0 veces, y por tonterías de salir en manada y hacer los burros por ahí unas 10 o 12 veces, la última hará 2 o 3 años. Es por lo que no recuerdo bien. Se que pulso los dos y -creo- que hay que tenerlos un momento pulsados.

Las motos que saca HD últimamente ya vienen muchos modelos con leds. En los intermitentes tienen las luces freno y posición incorporadas. Y las que no los traen ahí (la gama touring, como los policías americanos) traen mucha mas electrónica por el tema de la inyección. Esto que me quiero hacer yo servirá para las de 6 o 7 años para atrás. Que por cierto hay muchas y además muy bien cotizadas por tener carburador.

Desde luego, cuando haga el tuto, si algún compañero se anima estaré encantado de ayudarlo en lo que yo pueda. Me parece una mejora importante en el aspecto de consumo, fiabilidad y seguridad. Y quiero que se quede bien de forma que pueda pasar la ITV sin que se den cuenta, porque si lo hacen me obligan a desmontar y poner lo de siempre.

Bueno, yo también te deseo que lo pases muy bien con los tuyos, y que sigamos en contacto. Y a todos los compañeros de este foro que nos leen, también les felicito la Navidad.
Un abrazo.

Asencio

Desconectado ohsielos

  • PIC10
  • *
  • Mensajes: 21
Re: Intermitentes moto.
« Respuesta #31 en: 30 de Diciembre de 2010, 20:58:18 »
Bueno, primero de todo felicitaros la Navidad a todos.

Ya he recibido los pics 12F629, he modificado (como Dios me dió a entender) el programa ultimo que me funcionaba prefecto al 100% sobre el 16F84A y no furula nada. En esencia he cambiado las los puertos de entrada y salida de acuerdo al nuevo patillaje. Tengo mis dudas sobre como adaptar lo de PortA y PortB al este pic, porque no es lo mismo borrar portA que borrar las entradas de este pic.

Bueno, no me enrrollo mas, te dejo lo que yo he hecho a ver si ves alguna burrada y por eso no tira.
Por cierto, lo he grabado con el TE20. Le he soldado a las patillas 1, 4, 6, 7 y 8 unos hilos con el extremo limpio de una patilla de led y los he pinchado en su equivalente del zócalo del TE20. Lo detecta, borra y programa OK. Gracias por el enlace.

Yo sigo investigando, el problema es que cada vez que programo y pruebo me pego 10 minutos colocando las patillas. No es como con el 16F84A que era pinchar y despinchar en 0.5 segundos.

Ahí va:

Código: ASM
  1. __CONFIG        _CP_OFF& _WDT_ON&_PWRTE_OFF&_BODEN_OFF&_INTRC_OSC_NOCLKOUT&_MCLRE_OFF  
  2.                
  3.         LIST    P=12F629
  4.         #INCLUDE        <P12F629.INC>                                  
  5.        
  6.         ERRORLEVEL      -302
  7.  
  8.         CBLOCK 0x20                     ; ponemos 0x20 para que valga para todos
  9.                                         ; incluido 12f629
  10.         CONTADOR
  11.         CONTADOR_1
  12.         REG_1  
  13.         PDel0
  14.         PDel1
  15.         PDel2
  16.         PDel3
  17.         ENDC
  18.  
  19.  
  20.         #DEFINE LED_I GPIO,1
  21.         #DEFINE LED_D GPIO,0
  22.         #DEFINE PUL_I GPIO,4
  23.         #DEFINE PUL_D GPIO,5
  24.  
  25.  
  26.         ORG     h'0000'                 ; VECTOR DE RESET
  27.         goto    INICIO                  ; va a inicio
  28.         ORG     h'0004'                 ; VECTOR DE INTERRUPCIONES
  29.        
  30.        
  31.        
  32.  
  33. INICIO
  34.         clrf    GPIO
  35.         movlw   07h
  36.         movwf   CMCON                   ; todos los pines en modo digital.
  37.         bsf     STATUS,5                ; activa la página 1
  38.         movlw   b'111100'               ; GP0 y 1 salidas 2, 3, 4 y 5 entradas.
  39.         movwf   TRISIO                 
  40.         call    CALIBRAOSC
  41.         movwf   OSCCAL
  42.         clrf    INTCON                  ; deshabilitar interrupciones.
  43.         movlw   0X07                    ; TIMER con prescaler de 256, para 50ms
  44.         movwf   OPTION_REG
  45.         movlw   0X20                    ; habilitamos desborde de TIMER pero sin interrupción
  46.         movwf   INTCON                  ; cada 50ms nos seteara el flag TOIF de INTCON
  47.         bcf     STATUS,5                ; volvemos a la página 0
  48.         clrf    GP0                     ; apagamos led D
  49.         clrf    GP1                     ; y el led I           
  50.                        
  51.  
  52.         clrf    CONTADOR
  53.         clrf    CONTADOR_1
  54.         clrf    REG_1
  55.        
  56.  
  57. ESPERA
  58.         btfss   PUL_I  
  59.         goto    $+3                     ; va tres posiciones para adelante
  60.         call    ANTIRREBOTES
  61.         goto    MAIN
  62.         btfss   PUL_D
  63.         goto    ESPERA
  64.         call    ANTIRREBOTES
  65.         goto    MAIN
  66.  
  67. TABLA                                   ; esta tabla nos dirá que hay que hacer
  68.         addwf   PCL,1
  69.         goto    ESPERA                  ; aquí nunca vendrá, pero por si acaso....
  70.         goto    DERECHA
  71.         goto    IZQUIERDA
  72.         goto    LOS_DOS
  73.  
  74. MAIN
  75.         btfss   PUL_D                   ; miramos si en PUL_D hay un 1 o un 0
  76.         bcf     REG_1,0                 ; y escribimos en un registro lo que haya
  77.         btfsc   PUL_D                   ; en el bit 0
  78.         bsf     REG_1,0
  79.         btfss   PUL_I                   ; hacemos lo mismo con el otro pulsador
  80.         bcf     REG_1,1                 ; éste lo escribimos en el bit 1
  81.         btfsc   PUL_I
  82.         bsf     REG_1,1                 ; aquí ya tenemos los dos pulsadores leidos y anotados en un registro
  83.         movf    REG_1,0                 ; lo movemos a W
  84.         call    TABLA
  85.         goto    ESPERA
  86.  
  87. CAMBIA_I                                ; esta rutina se ejecutará solo cuando cambie de un intermitente al otro
  88.                                         ; y hará un antirrebotes de 20ms para asegurarse de que no fue un rebote
  89.         bcf     LED_D                                  
  90.         call    ANTIRREBOTES_1
  91.         btfss   PUL_I                   ; comprueba que realmente se pulsó
  92.         goto    ENCIENDE_D              ; falsa alarma va a donde estaba
  93.         btfsc   PUL_I                   ; se espera hasta que se suelte
  94.         goto    $-1
  95.         call    ANTIRREBOTES_1          ; llama antirrebotes para confirmar
  96.         btfsc   PUL_I                   ; se mira si de verdad se soltó
  97.         return                          ; pasó algo raro vuelve a MAIN
  98.         btfsc   PUL_D                   ; y que el otro botón esta desactivado
  99.         return                          ; se pulsaron los dos va a main a iniciar secuencia
  100.         bcf     INTCON,2
  101.         clrf    CONTADOR
  102.         clrf    CONTADOR_1
  103.         goto    ENCIENDE_I
  104.  
  105.  
  106. IZQUIERDA
  107.         btfsc   PUL_I                   ; Aquí espera hasta que se suelte pulsador
  108.         goto    $-1                     ; va una posición para atrás
  109.         call    ANTIRREBOTES_1          ; para comprobar si hay rebotes al soltar
  110.         btfsc   PUL_I                   ; se confirma que se soltó pulsador
  111.         return                          ; falsa alarma va a MAIN
  112.         bcf     INTCON,2                ; se soltó y no hay rebotes
  113.         clrf    CONTADOR                ; pone contadores a 0 e inicia secuencia
  114.         clrf    CONTADOR_1
  115.         goto    ENCIENDE_I
  116.        
  117.  
  118. DESACTIVAR_I
  119.         bcf     LED_I
  120.         clrf    CONTADOR
  121.         clrf    CONTADOR_1
  122.         btfsc   PUL_I                   ; espera hasta que se suelte pulsador
  123.         goto    $-1                     ; porque si retornara sin esperar volvería a secuencia
  124.         call    ANTIRREBOTES_1
  125.         btfsc   PUL_I                   ; después de antirrebotes confirma se soltó
  126.         goto    $-4                     ; fueron rebotes va a primer chequeo
  127.         return                          ; apaga flag e intermitente y vuelve a MAIN, FLAG estaba a 1
  128.  
  129. ENCIENDE_I
  130.         bsf     LED_I                   ; enciende intermitente izquierda
  131.         movlw   .61                     ; cargamos TIMER0 con 61 para que nos cuente 50ms
  132.         movwf   TMR0                    ; porque si empezara de 0 contaría 65536
  133.        
  134.         btfsc   PUL_D
  135.         goto    CAMBIA_D                ; si mientras esta ejecutando una secuencia
  136.                                         ; se pulsa un botón empieza de nuevo
  137.         btfsc   PUL_I
  138.         goto    DESACTIVAR_I
  139.         btfss   INTCON,2                ; pasaron 50ms? se desbordó TIMER?
  140.         goto    $-5                     ; no seguimos esperando y chequeando pulsadores
  141.         bcf     INTCON,2                ; se desbordó, borramos flag para la próxima vez
  142.         incf    CONTADOR_1,1
  143.         movlw   .1                      ; número de veces que se repite el retardo de 50ms
  144.         subwf   CONTADOR_1,0            ; modificando este número aumentará o reducirá en 50ms el tiempo
  145.         btfss   STATUS,Z
  146.         goto    ENCIENDE_I
  147.         clrf    CONTADOR_1              ; ponemos a 0 contador
  148.  
  149. APAGA_I
  150.         bcf     LED_I                   ; apaga
  151.         movlw   .61                     ; cargamos TIMER0 con 61 para que nos cuente 50ms
  152.         movwf   TMR0                    ; porque si empezara de 0 contaría 65536
  153.         btfsc   PUL_D
  154.         goto    CAMBIA_D                ; si mientras esta ejecutando una secuencia
  155.                                         ; se pulsa un botón empieza de nuevo
  156.         btfsc   PUL_I
  157.         goto    DESACTIVAR_I
  158.         btfss   INTCON,2                ; pasaron 50ms? se desbordó TIMER?
  159.         goto    $-5                     ; no seguimos esperando y chequeando pulsadores
  160.         bcf     INTCON,2                ; se desbordó, borramos flag para la próxima vez
  161.         incf    CONTADOR_1,1
  162.         movlw   .20                     ; número de veces que se repite el retardo de 50ms
  163.         subwf   CONTADOR_1,0            ; modificando este número aumentará o reducirá en 50ms el tiempo
  164.         btfss   STATUS,Z
  165.         goto    APAGA_I
  166.         clrf    CONTADOR_1              ; ponemos a 0 contador
  167.         incf    CONTADOR,1              ; para número de veces que encenderá
  168.         movlw   .10                     ; le pongo 10 pero pueden ser las que tu quieras
  169.         subwf   CONTADOR,0
  170.         btfss   STATUS,Z                ; van 10 veces?
  171.         goto    ENCIENDE_I              ; no, vuelve a repetir secuencia
  172.         clrf    CONTADOR
  173.         goto    DESACTIVAR_I
  174.  
  175. CAMBIA_D                                ; esta rutina se ejecutará solo cuando cambie de un intermitente al otro
  176.                                         ; y hará un antirrebotes de 20ms para asegurarse de que no fue un rebote
  177.         bcf     LED_I                   ;
  178.         call    ANTIRREBOTES_1
  179.         btfss   PUL_D                   ; comprueba que realmente se pulsó
  180.         goto    ENCIENDE_I              ; falsa alarma va a donde estaba
  181.         btfsc   PUL_D                   ; se espera hasta que se suelte
  182.         goto    $-1
  183.         call    ANTIRREBOTES_1          ; llama antirrebotes para confirmar
  184.         btfsc   PUL_D                   ; se mira si de verdad se soltó
  185.         return                          ; pasó algo raro vuelve a MAIN
  186.         btfsc   PUL_I                   ; y que el otro botón esta desactivado
  187.         return                          ; se pulsaron los dos va a main a iniciar secuencia
  188.         bcf     INTCON,2
  189.         clrf    CONTADOR
  190.         clrf    CONTADOR_1
  191.         goto    ENCIENDE_D
  192.  
  193. DERECHA
  194.         btfsc   PUL_D                   ; Aquí espera hasta que se suelte pulsador
  195.         goto    $-1                     ; va una posición para atrás
  196.         call    ANTIRREBOTES_1          ; para comprobar si hay rebotes al soltar
  197.         btfsc   PUL_D                   ; se confirma que se soltó pulsador
  198.         return                          ; falsa alarma va a MAIN
  199.         bcf     INTCON,2
  200.         clrf    CONTADOR
  201.         clrf    CONTADOR_1
  202.         goto    ENCIENDE_D
  203.        
  204. DESACTIVAR_D
  205.         bcf     LED_D
  206.         clrf    CONTADOR
  207.         clrf    CONTADOR_1
  208.         btfsc   PUL_D                   ; espera hasta que se suelte pulsador
  209.         goto    $-1                     ; porque si retornara sin esperar volvería a secuencia
  210.         call    ANTIRREBOTES_1
  211.         btfsc   PUL_D                   ; después de antirrebotes confirma se soltó
  212.         goto    $-4                     ; fueron rebotes va a primer chequeo
  213.         return                          ; apaga intermitente y vuelve a MAIN
  214.  
  215. ENCIENDE_D
  216.         bsf     LED_D                   ; enciende intermitente
  217.         movlw   .61                     ; cargamos TIMER0 con 61 para que nos cuente 50ms
  218.         movwf   TMR0                    ; porque si empezara de 0 contaría 65536
  219.         btfsc   PUL_D
  220.         goto    DESACTIVAR_D            ; si mientras esta ejecutando una secuencia
  221.                                         ; se pulsa un botón empieza de nuevo
  222.         btfsc   PUL_I
  223.         goto    CAMBIA_I
  224.         btfss   INTCON,2                ; pasaron 50ms? se desbordó TIMER?
  225.         goto    $-5                     ; no seguimos esperando y chequeando pulsadores
  226.         bcf     INTCON,2                ; se desbordó, borramos flag para la próxima vez
  227.         incf    CONTADOR_1,1
  228.         movlw   .1                      ; número de veces que se repite el retardo de 50ms
  229.         subwf   CONTADOR_1,0            ; modificando este número aumentará o reducirá en 50ms el tiempo
  230.         btfss   STATUS,Z
  231.         goto    ENCIENDE_D
  232.         clrf    CONTADOR_1              ; ponemos a 0 contador
  233.  
  234. APAGA_D
  235.         bcf     LED_D                   ; apaga
  236.         movlw   .61                     ; cargamos TIMER0 con 61 para que nos cuente 50ms
  237.         movwf   TMR0                    ; porque si empezara de 0 contaría 65536
  238.         btfsc   PUL_D
  239.         goto    DESACTIVAR_D            ; si mientras esta ejecutando una secuencia
  240.                                         ; se pulsa un botón empieza de nuevo
  241.         btfsc   PUL_I
  242.         goto    CAMBIA_I
  243.         btfss   INTCON,2                ; pasaron 50ms? se desbordó TIMER?
  244.         goto    $-5                     ; no seguimos esperando y chequeando pulsadores
  245.         bcf     INTCON,2                ; se desbordó, borramos flag para la próxima vez
  246.         incf    CONTADOR_1,1
  247.         movlw   .20                     ; número de veces que se repite el retardo de 50ms
  248.         subwf   CONTADOR_1,0            ; modificando este numero aumentará o reducirá en 50ms el tiempo
  249.         btfss   STATUS,Z
  250.         goto    APAGA_D
  251.         clrf    CONTADOR_1              ; ponemos a 0 contador
  252.         incf    CONTADOR,1              ; para número de veces que encenderá
  253.         movlw   .10                     ; le pongo 10 pero pueden ser las que tu quieras
  254.         subwf   CONTADOR,0
  255.         btfss   STATUS,Z                ; van 10 veces?
  256.         goto    ENCIENDE_D              ; no, vuelve a repetir secuencia
  257.         clrf    CONTADOR
  258.         goto    DESACTIVAR_D
  259.  
  260. LOS_DOS
  261.         btfsc   PUL_I
  262.         goto    $-1
  263.         btfsc   PUL_D                   ; miramos si están sin pulsar ambos botones
  264.         goto    $-3
  265.         call    ANTIRREBOTES_1
  266.         movf    GP4,0                   ; movemos estado pul I a W
  267.         andwf   GP5,0                   ; y le sumamos el estado del pul D para comprobar que vale 0
  268.         btfsc   STATUS,Z                ; encendió FLAG de 0?
  269.         goto    LOS_DOS                 ; fueron rebotes vuelve a comprobar despulsación
  270.         clrf    CONTADOR
  271.         clrf    CONTADOR_1
  272.         bcf     INTCON,2       
  273.         goto    ENCIENDE_LOSDOS
  274.  
  275. DESACTIVAR_LOSDOS
  276.         btfsc   PUL_I
  277.         goto    $-1
  278.         btfsc   PUL_D                   ; miramos si están sin pulsar ambos botones
  279.         goto    $-3                     ; para confirmar que se soltaron
  280.         call    ANTIRREBOTES_1         
  281.         movf    GP4,0                  
  282.         andwf   GP5,0
  283.         btfsc   STATUS,Z                ; comprobamos que el valor de GP4 y 5 es 0, no pulsados
  284.         goto    ENCIENDE_LOSDOS         ; no se soltaron, vuelve a encender los dos    
  285.         clrf    GP0                     ; apagamos intermitentes
  286.         clrf    GP1
  287.         clrf    CONTADOR
  288.         clrf    CONTADOR_1
  289.         return
  290.  
  291. ENCIENDE_LOSDOS
  292.         bcf     INTCON,2
  293.         bsf     GPIO,0                  ; encendemos led D
  294.         bsf     GPIO,1                  ; y led I
  295.         movlw   .61                     ; cargamos TIMER0 con 61 para que nos cuente 50ms
  296.         movwf   TMR0                    ; porque si empezara de 0 contaría 65536
  297.         btfsc   PUL_I
  298.         goto    DESACTIVAR_LOSDOS       ; si mientras esta ejecutando una secuencia
  299.                                         ; se pulsa un botón empieza de nuevo
  300.         btfsc   PUL_D
  301.         goto    DESACTIVAR_LOSDOS
  302.         btfss   INTCON,2                ; pasaron 50ms? se desbordó TIMER?
  303.         goto    $-5                     ; no seguimos esperando y chequeando pulsadores
  304.         bcf     INTCON,2                ; borramos flag para la próxima vez
  305.         incf    CONTADOR_1,1
  306.         movlw   .1                      ; número de veces que se repite el retardo de 50ms
  307.         subwf   CONTADOR_1,0            ; modificando este numero aumentará o reducirá en 50ms el tiempo
  308.         btfss   STATUS,Z
  309.         goto    ENCIENDE_LOSDOS
  310.         clrf    CONTADOR_1              ; ponemos a 0 contador
  311.  
  312. APAGA_LOSDOS   
  313.         bcf     GPIO,0                  ; apagamos led D
  314.         bcf     GPIO,1                  ; y led I
  315.         movlw   .61                     ; cargamos TIMER0 con 61 para que nos cuente 50ms
  316.         movwf   TMR0                    ; porque si empezara de 0 contaría 65536
  317.         btfsc   PUL_I
  318.         goto    DESACTIVAR_LOSDOS       ; si mientras esta ejecutando una secuencia
  319.                                         ; se pulsa un botón empieza de nuevo
  320.         btfsc   PUL_D
  321.         goto    DESACTIVAR_LOSDOS
  322.         btfss   INTCON,2                ; pasaron 50ms? se desbordó TIMER?
  323.         goto    $-5                     ; no seguimos esperando y chequeando pulsadores
  324.         bcf     INTCON,2                ; borramos flag para la próxima vez
  325.         incf    CONTADOR_1,1
  326.         movlw   .20                     ; número de veces que se repite el retardo de 50ms
  327.         subwf   CONTADOR_1,0            ; modificando este numero aumentará o reducirá en 50ms el tiempo
  328.         btfss   STATUS,Z
  329.         goto    APAGA_LOSDOS
  330.         clrf    CONTADOR_1              ; ponemos a 0 contador
  331.         goto    ENCIENDE_LOSDOS
  332.  
  333.  
  334. ANTIRREBOTES                            ;
  335.         movlw   .110                    ; 1 set número de repetición  (B)
  336.         movwf   PDel0                   ; 1 |
  337. PLoop1  
  338.         movlw   .181                    ; 1 set número de repetición  (A)
  339.         movwf   PDel1                   ; 1 |
  340. PLoop2  
  341.         clrwdt                          ; 1 clear watchdog
  342.         clrwdt                          ; 1 ciclo delay
  343.         decfsz  PDel1,1                 ; 1 + (1) es el tiempo 0  ? (A)
  344.         goto    PLoop2                  ; 2 no, loop
  345.         decfsz  PDel0,1                 ; 1 + (1) es el tiempo 0  ? (B)
  346.         goto    PLoop1                  ; 2 no, loop
  347. PDelL1  
  348.         goto    PDelL2                  ; 2 ciclos delay
  349. PDelL2  
  350.         goto    PDelL3                  ; 2 ciclos delay
  351. PDelL3  
  352.         clrwdt                          ; 1 ciclo delay
  353.         return                          ; 2+2 Fin.
  354.  
  355.  
  356. ANTIRREBOTES_1                          ; antirrebotes de 20ms solo cuando esta funcionando uno
  357.                                         ; y se cambia para el otro, sin pasar por MAIN
  358.         movlw   .21                     ; 1 set número de repetición  (B)
  359.         movwf   PDel2                   ; 1 |
  360. PLoop3  
  361.         movlw   .237                    ; 1 set número de repetición  (A)
  362.         movwf   PDel3                   ; 1 |
  363. PLoop4  
  364.         clrwdt                          ; 1 clear watchdog
  365.         decfsz  PDel3,1                 ; 1 + (1) es el tiempo 0  ? (A)
  366.         goto    PLoop4                  ; 2 no, loop
  367.         decfsz  PDel2,1                 ; 1 + (1) es el tiempo 0  ? (B)
  368.         goto    PLoop3                  ; 2 no, loop
  369. PDelL4  
  370.         goto    PDelL5                  ; 2 ciclos delay
  371. PDelL5  
  372.         clrwdt                          ; 1 ciclo delay
  373.         return                          ; 2+2 Fin.
  374.        
  375.        
  376.         org     0x3FF
  377.        
  378. CALIBRAOSC      retlw   0x80            ;calibro oscilador a 4 mhz +- 2%        
  379.        
  380.  
  381.         END


Bueno, que pasen un bonito fin de año, y que el 2011 sea mucho mejor que éste.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Intermitentes moto.
« Respuesta #32 en: 03 de Enero de 2011, 08:34:47 »
Bueno feliz año, tarde unos dias en contestar porque a medida que se tienen mas años las resacas tardan mas en pasar, y yo lo noto bastante :lol: :lol:
Creo que el problema esta en WDT_ON, ya te lo dije otra vez que lo habilitaste (te gustan los perros ehh)  :lol:
Tambien modifique algunas cosas en el tema de los puertos, en el MPLAB corre bien, en eso de la calibracion  el "call 3ffh" no va a ninguna posicion y en OSCCAL escribe un 00h siempre, te pongo aqui un documento de Microchip especifico para la programacion de este PIC, esta en ingles.

http://ww1.microchip.com/downloads/en/DeviceDoc/41191D.pdf


Código: [Seleccionar]
LIST P=12F629, ; usar PIC 12F629
#include <p12F629.inc>

__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_BODEN_OFF&_INTRC_OSC_NOCLKOUT&_MCLRE_OFF

ERRORLEVEL -302

CBLOCK 0x20 ; ponemos 0x20 para que valga para todos
; incluido 12f629
CONTADOR
CONTADOR_1
REG_1
PDel0
PDel1
PDel2
PDel3
 

 ENDC


#DEFINE LED_I GPIO,1
#DEFINE LED_D GPIO,0
#DEFINE PUL_I GPIO,4
#DEFINE PUL_D GPIO,5

ORG 0X00 ; VECTOR DE RESET
goto INICIO ; va a inicio
ORG 0x04 ; VECTOR DE INTERRUPCION



INICIO
clrf GPIO
movlw 07h
movwf CMCON ; todos los pines en modo digital.
bsf STATUS,5 ; activa la página 1
movlw b'111100' ; GP0 y 1 salidas 2, 3, 4 y 5 entradas.
movwf TRISIO
call 0X3FF
movwf OSCCAL
clrf INTCON ; deshabilitar interrupciones.
movlw 0X07 ; TIMER con prescaler de 256, para 50ms
movwf OPTION_REG
movlw 0X20 ; habilitamos desborde de TIMER pero sin interrupción
movwf INTCON ; cada 50ms nos seteara el flag TOIF de INTCON
bcf STATUS,5 ; volvemos a la página 0
bcf GPIO,0 ; apagamos led D
bcf GPIO,1

clrf CONTADOR
clrf CONTADOR_1
clrf REG_1


ESPERA

btfss   PUL_I   
goto    $+3 ; va tres posiciones para delante
call      ANTIRREBOTES
goto     MAIN
btfss    PUL_D
goto     ESPERA
call      ANTIRREBOTES
goto    MAIN

TABLA          ;esta tabla nos dira que hay que hacer
addwf   PCL,1
goto     ESPERA  ; aqui nunc vendra, pero por si acaso....
goto     DERECHA
goto     IZQUIERDA
goto     LOS_DOS

MAIN

btfss   PUL_D    ; miramos si en PUL_D hay un 1 o un 0
bcf     REG_1,0  ; y escribimos en un registro lo que haya
btfsc   PUL_D    ; en el bit 0
bsf      REG_1,0
btfss   PUL_I     ; hacemos lo mismo con el otro pulsador
bcf      REG_1,1  ;este lo escribimos en el bit 1
btfsc   PUL_I
bsf      REG_1,1  ; aqui ya tenemos los dos pulsadores leidos y anotados en un registro
movf  REG_1,0    ; lo movemos a W
call    TABLA
goto   ESPERA

CAMBIA_I ; esta rutina se ejecutara solo cuando cambie de un intermitente
; y hara un antirrebotes de 20ms para asegurarse de que no fue un rebote
bcf LED_D
call ANTIRREBOTES_1
btfss PUL_I ; comprueba que realmente se pulso
goto ENCIENDE_D ; falsa alarma va a donde estaba
btfsc PUL_I ; se espera hasta que se suelte
goto $-1
call ANTIRREBOTES_1 ; llama antirrebotes para confirmar
btfsc PUL_I ; se mira si de verdad se solto
return ; paso algo raro vuelve a MAIN
btfsc PUL_D ; y que el otro boton esta desactivado
return ; se pulsaron los dos va a main a iniciar secuencia
bcf INTCON,2
clrf CONTADOR
clrf CONTADOR_1
goto ENCIENDE_I


IZQUIERDA

btfsc PUL_I ; Aqui espera hasta que se suelte pulsador
goto $-1 ; va una posicion para atras
call ANTIRREBOTES_1 ; para comprobar si hay rebotes al soltar
btfsc PUL_I ; se confirma que se solto pulsador
return ; falsa alarma va a MAIN
bcf INTCON,2 ; se solto y no hay rebotes
clrf CONTADOR ; pone contadores a 0 e inicia secuencia
clrf CONTADOR_1
goto    ENCIENDE_I


DESACTIVAR_I

bcf     LED_I
clrf CONTADOR
clrf CONTADOR_1
btfsc PUL_I    ; espera hasta que se suelte pulsador
goto $-1 ; porque si retornara sin esperar volveria a secuencia
call ANTIRREBOTES_1
btfsc PUL_I ; despues de antirrebotes confirma se solto
goto $-4 ; fueron rebotes va a primer chequeo
return            ; apaga flag e intermitente y vueleve a MAIN, FLAG estaba a 1

ENCIENDE_I

bsf    LED_I    ; enciende intermitente izquierda
movlw .61 ; cargamos TIMER0 con 61 para que nos cuente 50ms
movwf TMR0 ; porque si empezara de 0 contaria 65536

btfsc PUL_D
goto CAMBIA_D  ; si mientras esta ejecutando una secuencia; se pulsa un boton empiezade nuevo
btfsc PUL_I
goto DESACTIVAR_I
btfss INTCON,2      ; pasaron 50ms? se desbordo TIMER?
goto $-5 ; no seguimos esperando y chequeando pulsadores
bcf INTCON,2 ; se desbordo, borramos flag para la proxima vez
incf CONTADOR_1,1
movlw .1 ; numero de veces que se repite el retardo de 50ms
subwf CONTADOR_1,0 ; modificando este numero se aumentara o reducira en 50ms el tiempo
btfss STATUS,Z
goto ENCIENDE_I
clrf CONTADOR_1 ; ponemos a 0 contador

APAGA_I

bcf    LED_I    ; apaga
movlw .61 ; cargamos TIMER0 con 61 para que nos cuente 50ms
movwf TMR0 ; porque si empezara de 0 contaria 65536

btfsc PUL_D
goto CAMBIA_D    ; si mientras esta ejecutando una secuencia; se pulsa un boton empiezade nuevo
btfsc PUL_I
goto DESACTIVAR_I
btfss INTCON,2      ; pasaron 50ms? se desbordo TIMER?
goto $-5 ; no seguimos esperando y chequeando pulsadores
bcf INTCON,2 ; se desbordo, borramos flag para la proxima vez
incf CONTADOR_1,1
movlw .20 ; numero de veces que se repite el retardo de 50ms
subwf CONTADOR_1,0 ; modificando este numero se aumentara o reducira en 50ms el tiempo
btfss STATUS,Z
goto APAGA_I
clrf CONTADOR_1 ; ponemos a 0 contador

incf  CONTADOR,1  ; para numero de veces que encendera
movlw .10          ; le pongo 10 pero pueden ser las que tu quieras
subwf  CONTADOR,0
btfss  STATUS,Z  ; van 10 veces?
goto  ENCIENDE_I    ; no, vuelve a repetir secuencia
clrf  CONTADOR
goto DESACTIVAR_I

CAMBIA_D ; esta rutina se ejecutara solo cuando cambie de un intermitente
; y hara un antirrebotes de 20ms para asegurarse de que no fue un rebote
bcf LED_I ;
call ANTIRREBOTES_1
btfss PUL_D ; comprueba que realmente se pulso
goto ENCIENDE_I ; falsa alarma va a donde estaba
btfsc PUL_D ; se espera hasta que se suelte
goto $-1
call ANTIRREBOTES_1 ; llama antirrebotes para confirmar
btfsc PUL_D ; se mira si de verdad se solto
return ; paso algo raro vuelve a MAIN
btfsc PUL_I ; y que el otro boton esta desactivado
return ; se pulsaron los dos va a main a iniciar secuencia
bcf INTCON,2
clrf CONTADOR
clrf CONTADOR_1
goto ENCIENDE_D

DERECHA

btfsc PUL_D ; Aqui espera hasta que se suelte pulsador
goto $-1 ; va una posicion para atras
call ANTIRREBOTES_1 ; para comprobar si hay rebotes al soltar
btfsc PUL_D ; se confirma que se solto pulsador
return ; falsa alarma va a MAIN
bcf INTCON,2
clrf CONTADOR
clrf CONTADOR_1
goto ENCIENDE_D

DESACTIVAR_D

bcf LED_D
clrf CONTADOR
clrf CONTADOR_1
btfsc PUL_D    ; espera hasta que se suelte pulsador
goto $-1 ; porque si retornara sin esperar volveria a secuencia
call ANTIRREBOTES_1
btfsc PUL_D ; despues de antirrebotes confirma se solto
goto $-4 ; fueron rebotes va a primer chequeo
return          ; apaga intermitente y vuelve a MAIN
 
ENCIENDE_D

bsf LED_D      ; enciende intermitente
movlw .61 ; cargamos TIMER0 con 61 para que nos cuente 50ms
movwf TMR0 ; porque si empezara de 0 contaria 65536

btfsc PUL_D
goto DESACTIVAR_D    ; si mientras esta ejecutando una secuencia; se pulsa un boton empiezade nuevo
btfsc PUL_I
goto CAMBIA_I
btfss INTCON,2      ; pasaron 50ms? se desbordo TIMER?
goto $-5 ; no seguimos esperando y chequeando pulsadores
bcf INTCON,2 ; se desbordo, borramos flag para la proxima vez
incf CONTADOR_1,1
movlw .1 ; numero de veces que se repite el retardo de 50ms
subwf CONTADOR_1,0 ; modificando este numero se aumentara o reducira en 50ms el tiempo
btfss STATUS,Z
goto ENCIENDE_D
clrf CONTADOR_1 ; ponemos a 0 contador

APAGA_D

bcf LED_D      ; apaga
movlw .61 ; cargamos TIMER0 con 61 para que nos cuente 50ms
movwf TMR0 ; porque si empezara de 0 contaria 65536

btfsc PUL_D
goto DESACTIVAR_D    ; si mientras esta ejecutando una secuencia; se pulsa un boton empiezade nuevo
btfsc PUL_I
goto CAMBIA_I
btfss INTCON,2      ; pasaron 50ms? se desbordo TIMER?
goto $-5 ; no seguimos esperando y chequeando pulsadores
bcf INTCON,2 ; se desbordo, borramos flag para la proxima vez
incf CONTADOR_1,1
movlw .20 ; numero de veces que se repite el retardo de 50ms
subwf CONTADOR_1,0 ; modificando este numero se aumentara o reducira en 50ms el tiempo
btfss STATUS,Z
goto APAGA_D
clrf CONTADOR_1 ; ponemos a 0 contador

incf CONTADOR,1  ; para número de veces que encenderá
movlw .10          ; le pongo 10 pero pueden ser las que tu quieras
subwf CONTADOR,0
btfss STATUS,Z    ; van 10 veces?
goto ENCIENDE_D ; no, vuelve a repetir secuencia
clrf  CONTADOR
goto DESACTIVAR_D

LOS_DOS

btfsc PUL_I
goto $-1
btfsc PUL_D ; miramos si estan sin pulsar ambos botones
goto $-3
call ANTIRREBOTES_1
btfsc PUL_I
goto $-1
btfsc PUL_D ; miramos si estan sin pulsar ambos botones
goto $-3

clrf CONTADOR
clrf CONTADOR_1
bcf INTCON,2
goto    ENCIENDE_LOSDOS

DESACTIVAR_LOSDOS

btfsc PUL_I
goto $-1
btfsc PUL_D ; miramos si estan sin pulsar ambos botones
goto $-3
call ANTIRREBOTES_1
btfsc PUL_I
goto $-1
btfsc PUL_D ; miramos si estan sin pulsar ambos botones
goto $-3

clrf GPIO  ; apagamos intermitentes
clrf CONTADOR
clrf CONTADOR_1
return

ENCIENDE_LOSDOS

bcf INTCON,2
movlw  0x03
movwf GPIO  ; ponemos a 1 bits 0 y 1 del puerto
movlw .61 ; cargamos TIMER0 con 61 para que nos cuente 50ms
movwf TMR0 ; porque si empezara de 0 contaria 65536

btfsc PUL_I
goto    DESACTIVAR_LOSDOS  ; si mientras esta ejecutando una secuencia se pulsa un boton empiezade nuevo
btfsc  PUL_D
goto DESACTIVAR_LOSDOS
btfss INTCON,2      ; pasaron 50ms? se desbordo TIMER?
goto $-5 ; no seguimos esperando y chequeando pulsadores
bcf INTCON,2 ; borramos flag para la proxima vez
incf CONTADOR_1,1
movlw .1 ; numero de veces que se repite el retardo de 50ms
subwf CONTADOR_1,0 ; modificando este numero se aumentara o reducira en 50ms el tiempo
btfss STATUS,Z
goto ENCIENDE_LOSDOS
clrf CONTADOR_1 ; ponemos a 0 contador

APAGA_LOSDOS

clrf GPIO ; apagamos intermitentes
movlw .61 ; cargamos TIMER0 con 61 para que nos cuente 50ms
movwf TMR0 ; porque si empezara de 0 contaria 65536

btfsc  PUL_I
goto  DESACTIVAR_LOSDOS  ; si mientras esta ejecutando una secuencia se pulsa un boton empiezade nuevo
btfsc  PUL_D
goto DESACTIVAR_LOSDOS
btfss INTCON,2      ; pasaron 50ms? se desbordo TIMER?
goto $-5 ; no seguimos esperando y chequeando pulsadores
bcf INTCON,2 ; borramos flag para la proxima vez
incf CONTADOR_1,1
movlw .20 ; numero de veces que se repite el retardo de 50ms
subwf CONTADOR_1,0 ; modificando este numero se aumentara o reducira en 50ms el tiempo
btfss STATUS,Z
goto APAGA_LOSDOS
clrf CONTADOR_1 ; ponemos a 0 contador
goto    ENCIENDE_LOSDOS


ANTIRREBOTES               ;

DEMORA  movlw     .110      ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .181      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel1,1   ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,1   ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  goto PDelL3         ; 2 ciclos delay
PDelL3  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.


ANTIRREBOTES_1 ; antirrebotes de 20ms solo cuando esta funcionando uno
; y se cambia para el otro, sin pasar por MAIN
movlw     .21       ; 1 set numero de repeticion  (B)
        movwf     PDel2     ; 1 |
PLoop3  movlw     .237      ; 1 set numero de repeticion  (A)
        movwf     PDel3     ; 1 |
PLoop4  clrwdt              ; 1 clear watchdog
        decfsz    PDel3,1   ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop4    ; 2 no, loop
        decfsz    PDel2,1   ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop3    ; 2 no, loop
PDelL4  goto PDelL5         ; 2 ciclos delay
PDelL5  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.


END


Bueno ya me contaras.

Saludos

Desconectado ohsielos

  • PIC10
  • *
  • Mensajes: 21
Re: Intermitentes moto.
« Respuesta #33 en: 05 de Enero de 2011, 13:20:38 »
Funciona perfecto también con el 12F629, gracias Tapi8. Posiblemente entre el perro  :D y los portA y B me fastidiaron todo el programa. Está visto que esto de programar no es para mí.
Precisamente lo del OSCCAL para calibrarlo si no lo saqué del datasheet fue de algún programa de algún compañero, que después comprobé que en las hojas de microchip también venía.

Para los que vayan a grabar un chip de éstos: al programar el micro, primero lo leí para averiguar el valor de calibración situado en la última posición de memoria y lo anoté. Después al cargar el programa hay que ir a esa misma posición y editar lo que haya puesto el programa (normalmente 3FFF) y reponer el valor que puso Microchip.
Así lo he hecho y funciona correcto al 100%, como con el 16F84A.

Ya estoy diseñando la pcb para distribuir los componentes y pasar a probar con +12v. A ver si va todo bien. Todavía me falta por encontrar un par de casquillos para las lámparas. El del taller de coches donde llevo el mío me ha encontrado uno, mas otro que yo tenía, solo me faltan dos, si no me toca romper dos bombillas buenas  :5], cosa que no me hace gracia. Soy pejiguera con estas cosas.

Y también me falta coger los leds a algo que los deje en su sitio dentro del intermitente. Ya tengo un par de ideas, todas en plan chapuza total, pero efectivas, y como no se vé.....

Bueno, si hay alguna novedad, la dejo por aquí.

Muchísimas gracias. Seguimos en contacto.

Saludos


Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Intermitentes moto.
« Respuesta #34 en: 06 de Enero de 2011, 09:49:19 »
Me alogro que te funcione con el 12F629, porque en este foro a los que llegamos a los 500 mensajes no se nos permite tener fallos, y ya me estaba viendo con una bronca encima   :lol: :lol:.
Cuando hagas pruebas con 12V debes controlar en los pulsadores que te lleguen menos de 5.5V, ya que van directos a los 12V, porque sino te puede cascar el PIC, y desde luego mas de 2V, a 4Mz con 2V le llega segun el datasheet, pero bueno mejor darle un poco mas, si le das en torno a 4V creo que estaria bien, estoy hablando en los pulsadores ya que la alimentacion va a traves del 7805 y no deberia haber problema.
Estoy impaciente por ver el video de demostracion  :-/ :-/

Saludos Tapi

Desconectado ohsielos

  • PIC10
  • *
  • Mensajes: 21
Re: Intermitentes moto.
« Respuesta #35 en: 17 de Marzo de 2011, 18:58:29 »
Como lo prometido es deuda, aquí está el tutorial con el montaje e instalación de esta historia.

Me ha llevado bastante tiempo adaptarlo a la moto, por eso la tardanza, pero no dispongo de un sitio adecuado para desmontar y trastear (la calle). El adaptarlo al hueco del intermitente es lo que mas dolores de cabeza me ha dado, el primer prototipo 'bailaba' mucho e incluso se oía afuera.

De nuevo muchas gracias por la ayuda prestada.

Espero que les guste.

Citar
http://www.foroharley.com/f44/

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Intermitentes moto.
« Respuesta #36 en: 18 de Marzo de 2011, 15:00:20 »
Si señor han quedado muy bien, aunque creo que un poco mas de tiempo encendidas....porque es posible que te pongan problemas en la ITV, creo que ya sabes tu como hacerlo, sino pega un toque por aqui.

Desconectado ohsielos

  • PIC10
  • *
  • Mensajes: 21
Re: Intermitentes moto.
« Respuesta #37 en: 18 de Marzo de 2011, 16:09:06 »
Pues no sé la normativa en cuanto a duración encendida, lo intenté buscar por la red pero no encontré nada al respecto, lo que está claro es que así no se calienta en absoluto y me gusta como 'flashea'.

En cuanto al cambio de duración encendido, no te preocupes, ya estoy haciendo pruebas sobre otro prototipo para que en vez de subir +12v a cada intermitente, suba solo 2v (tensión de trabajo del led) y así eliminar el driver en los intermitentes y los dos optoacopladores en el circuito controlador. Para ello programé el pic de manera que se mantuviera encendido varios segundos y así poder medir y ajustar el voltaje en el led.

De momento las pruebas han ido bien. El led iría pegado al casquillo metálico y eliminaría toda la parafarnalia del bote de cerveza. Se queda mas compacto, fácil y rápido de abrir y cerrar el conjunto del intermitente.

Sí, me paso la vida dándole vueltas al coco..... :D

Un abrazo, amigo.

Desconectado juan47

  • PIC10
  • *
  • Mensajes: 27
Re: Intermitentes moto.
« Respuesta #38 en: 22 de Marzo de 2011, 16:57:36 »
Una estupenda realizacion Felicidades a los dos y gracias

Un saludo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Intermitentes moto.
« Respuesta #39 en: 25 de Marzo de 2011, 15:33:37 »
Asencio, estos LEDs directos al micro no los puedes poner mas pronto o mas tarde cascara el 16f629, ya que la intensidad de esos LED esta muy por encima de lo que puede dar el PIC (25mA maximo).
Por medio de una resistencia necesitarias una de 10W o mas, son grandisimas.
Hay un sistema que creo que daria resultado, haciendo que se enciendan y se apaguen muy rapido (PWM) lo que te habia comentado del bajo consumo, recuerdas?, tienes 12V y quieres 2, hacemos que los transistores conduzcan 1mS y esten 5mS apagados, como de cada 6 esta solamente 1 con tension seria el equivalente a 2V, aunque realmente le llegan 12, si aun asi hubiera problemas creo que con un pequeño condensador en serie con el LED y la resistencia bajariamos esa tension??? pongo las ???porque no estoy totalmente seguro pero creo que la solucion va por aqui.
Bueno tu diras.
Gracias por ponerme tan bien en el foro de las HARLEY.

Birras y suerte.  :lol: :lol:

Desconectado ohsielos

  • PIC10
  • *
  • Mensajes: 21
Re: Intermitentes moto.
« Respuesta #40 en: 17 de Abril de 2011, 17:46:13 »
@Juan47: gracias a vosotros por el programa, si me lo hubiera tenido que currar yo solo me habría salido una castaña. Funcionaría probablemente, pero ni comparación a como lo hace ahora.

@Tapi8: empezando por el final....te he puesto como te mereces, el programa es tuyo y va de fábula.
No pensaba atacar directamente los leds desde el pic. Pensaba pasar por un transistor que le proporcione la chicha que necesita. Además voy a sustituir el regulador por un transistor pequeñito y un zener.
Voy a ver si te puedo adjuntar el esquema. La zona del control de tensión +5 para el micro es la del Q3. Y las salidas a los leds son los transistores Q1 y Q2. Si te fijas tienen un zener en la base de 2.6v para que al restarles el medio voltio que se comen los transistores entre base y emisor me dejen en las salidas tensiones de 2v. aprox. que es justo lo que necesitan los leds. Y como los transistores se alimentan de +12v, no sobrecargo las salidas del PIC.
Igualmente el nuevo"regulador" de +5 es el Q3, en su base un zener de 5.6V que con el medio voltio entre base y emisor me deja en la salida (emisor) los 5v. exclusivamente para el PIC. El transistor aún siendo de los de pequeño tamaño soporta corriente de 1A, de sobra para el PIC.

Gracias a todos por los comentarios e interés mostrado. Por descontado que cualquier compañero que necesite algún tipo de información o ayuda por mi parte encantado.

Ronda birras frescas para todos. De cuando en cuando entro por aquí. :)

P.D.: me acabo de dar cuenta que hay un componente del esquema que no es correcto, se trata de C3. Figura como condensador pero en realidad es un fusible de 4A (no encontraba en la librería un fusible redondo del tamaño de un condensador electrolítico de raster 5.08mm y puse éste para que saliera al dibujar la placa).
También he modificado los valores de C1 y C2 a 100/25 ambos para que cupieran en la cajita donde va alojado el módulo.
Y C5 está pegadito a la entrada de alimentación del Pic.
Ya lo he probado (fuera de la moto) y funciona perfectamente. Le he dado un poco mas de tiempo encendido (100ms) y que parpadee 12 veces en lugar de 10.  :lol:

« Última modificación: 13 de Mayo de 2011, 18:52:57 por ohsielos »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Intermitentes moto.
« Respuesta #41 en: 14 de Mayo de 2011, 14:33:00 »
Esto que pones en el foro de harley tambien tendria solucion.

Citar
Intenté pasar la ITV con ella y me la tirarón 'patrás' porque no se notaba el cambio al frenar, apenas iluminaba un poco mas.
 

seria un circuito sencillo con un programa sencillo, incluso lo podrias integrar en el circuito de los intermitentes ya que tenias dos pines libres en el PIC, no?

Desconectado ohsielos

  • PIC10
  • *
  • Mensajes: 21
Re: Intermitentes moto.
« Respuesta #42 en: 16 de Mayo de 2011, 19:11:20 »
Me refería a unas bombillas que compré a los chinos (al principio de los tiempos  :D)pensando que sería cambiar las incandescentes y funcionar sin mas complicaciones, incluso con vistas a cambiar las del coche. Pero al ponerlas el efecto fue muy lamentable, la luz de posición sí se veía bastante bien, pero al frenar apenas había un muy ligero incremento de luz (casi imperceptible).
No me pasaron la ITV y con razón. Son basura.
Todavía tengo algunas por aquí. Incluso una que la llevé un tiempo puesta, al desmontarla para aprovechar el casquillo para uno de mis primeros proyectos para la luz trasera con 50 u 80 leds (no recuerdo bien) me dí cuenta que una de las resistencias internas que lleva para limitar la corriente, no sé si de freno o de posición, estaba completamente quemada: negra, tiznaba e imposible ver los colores.
Resumiendo, no se os ocurra comprarlas, al menos las de doble luz. Imagino que para coches que tengan bombilla para posición separada e independiente de la del freno, igual sí sirve, estudiando bien la luminosidad que ha de proporcionar cada una.
No sé si en la página de harley puse la foto, pero es ésta:


Saludos

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Intermitentes moto.
« Respuesta #43 en: 17 de Mayo de 2011, 05:37:11 »
Si encienden da igual que tengan la resistencia quemada, ya que lo que hariamos seria con un PIC, el que tuvieramos mas a mano, podria ser el 12f629 que ya lo conocemos, unas resiatencias para conectarle dos pulsadores uno de encendido y uno que venga del freno, activariamos un transistor, con este transistor activariamos la luz al 30% de su luminosidad para posicion y al 100% para frenado, la bombilla solo tiena que encender la regulacion se la haria el circuito.
Ya ves 4 resistencios un PIC un transistor y un programa tan sencillo que incluso lo harias tu, asi vas empezando con la programacion.
Si tienes varias bombillas y te costo 5€ cada una las vendes con el circuito a 20€ y aun ganas algo  :lol: :lol:.


 

anything