cny70 con 40106 y PIC, solo detecta 1 vez cada vez que reinicio

0

Estoy usando un PIC18F2550, un CNY70 y un 40106. (Esquemas a continuación)

El problema es que cuando enciendo el circuito, la primera vez que el CNY70 detecta que algo funciona perfectamente (tengo 1 led en cada salida B, excepto B0, que es la entrada de interrupción). Los LED se encienden por un tiempo muy corto y luego se apagan. Pero cuando intento hacerlo de nuevo, el voltaje de la salida CNY70 cambia la forma en que debe hacerlo, pero la salida 40106 solo cambia de 10mV a 100mV. Además, he cambiado el CNY70 y tengo el mismo problema. Revisé todas las conexiones varias veces pero no puedo encontrar nada malo.

Probé 3 configuraciones diferentes con el CNY70 y el 40106:

  1. Sin condensador:

  • Con capacitor entre 40106 entradas y Gnd:
  • Con capacitor entre Vcc y Gnd: (No puedo publicar más enlaces, igual que el 1º pero con un capacitor cerámico de 100 nf entre Vcc y Gnd)
  • Yo uso un PIC18F2550. El programa es muy simple, en este momento es solo para probar el sensor:

    #int_EXT
    void  EXT_isr(void) {
      output_B (0b11111110);
      delay_ms (300);
      output_B (0b00000000);
    }
    
    void main() {
    
       setup_adc_ports(AN0|VSS_VDD);
       setup_adc(ADC_CLOCK_INTERNAL);
       setup_spi(SPI_SS_DISABLED);
       setup_wdt(WDT_OFF);
       setup_timer_1(T1_DISABLED);
       setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
       setup_ccp1(CCP_OFF);
       setup_comparator(NC_NC_NC_NC);
       port_b_pullups(TRUE);
    
       set_tris_b(0x01);
    
       enable_interrupts(INT_EXT);
       enable_interrupts(GLOBAL);
    
       while(true){}
       }
    

    Pasos para reproducir el problema:

    1. Enciende el circuito
    2. CNY70 al aire (abierto). su salida es de 4.5V
    3. La entrada de 40106 es entonces de 4,5 V, por lo que la salida es de 0 V (10 mV). (B0 = 0)
    4. Ahora cubro el CNY70 (cerrar). Su salida es de 150mv.
    5. La entrada 40106 es de 150 mv, por lo que la salida es de 5V. (B0 = 1)
    6. Salida B1-B7 alta, encendiendo los 7 leds durante unos ms.
    7. Puse el CNY70 al aire de nuevo (abierto). su salida es de 4.5V
    8. La entrada 40106 es entonces 4.5V, por lo que la salida es 0V (10mv) (B0 = 0)
    9. Vuelvo a convertir el CNY70 (cerrar). Su salida es de 150mv.
    10. La entrada 40106 es entonces de 150 mv, PERO la salida es de solo 100 mv. (B0 = 0)
    pregunta Leingen

    1 respuesta

    3

    El elemento 10 indica que el puerto B0 se ha convertido en una salida y se está agotando, y está luchando contra el 40106. No uso el compilador CCS, que aparentemente es lo que estás usando, pero considera esta descripción de la función output_B :

    Parece que debería usar la directiva # use * _io en lugar de (o además de) TRIS para establecer la dirección de los pines del puerto (específicamente #use fixed_IO).

    Estas cosas no estándar de C son irritantes

        
    respondido por el Spehro Pefhany

    Lea otras preguntas en las etiquetas