Obtener valor de LDR

0

Estoy utilizando el picdem 18F4550 con microchip v8.63 y el compilador c. Los componentes que utilizo son: - 3 leds (rojo, verde, azul); - un LDR (327700 NORPS-12 farnell).

He conectado 3 leds (rojo, verde y azul), en RB4, RB5 y RB6 como salida. También conecto el LDR en RB1.

Mi pregunta es, cuando se enciende el verde de otro led, ¿cómo puedo recuperar el valor en mi código que mide el LDR?

Incluí mi código:

#include "p18cxxx.h"
#pragma config WDT = OFF 
void main(void) {     
    // turn off all LED latches     
    LATDbits.LATD0 = 0;     
    LATDbits.LATD1 = 0;     
    LATDbits.LATD2 = 0;     
    // make port d bits which drive LEDs outputs     
    TRISDbits.TRISD0 = 0;     
    TRISDbits.TRISD1 = 0;     
    TRISDbits.TRISD2 = 0;    
    TRISB = 0;    
    // RB port output.    
    PORTB = 0;    
    PORTB = 0b10001111; 
    // 0b01011010    
    if(PORTBbits.RB4 == 0) {        
        LATDbits.LATD0 = 1;         
    }    
    else if(PORTBbits.RB5 == 0) {        
        LATDbits.LATD1 = 1;    
    }    
    else if(PORTBbits.RB6 == 0) {        
        LATDbits.LATD2 = 1;    
    }       
    if(PORTBbits.RB1 == 1) {    
    }         
    while(1) {        ;    }   
}
    
pregunta yannick

2 respuestas

4

No puede leer una resistencia (directamente) desde un puerto de entrada PIC. Hay algunas maneras diferentes de ir aquí:

  1. Si conecta otra resistencia a Vdd, puede crear un divisor de tensión, que tiene una tensión de salida determinada por las dos resistencias. El ADC le dará el voltaje y un poco de álgebra le dará la resistencia.

  2. Puede crear una fuente de corriente constante y pasar esta corriente a través del LDR. Entonces, el voltaje a través del LDR será exactamente proporcional a la resistencia.

  3. Puede usar un condensador del LDR y conectarlo a otro pin. Cuando el pin del capacitor se establece en alto, puede observar el tiempo de aumento en la conexión del capacitor-LDR. Esta técnica no requiere un ADC. (Para mayor precisión, cargue el condensador a través de una resistencia conocida y descargue a través del LDR, luego use la relación de tiempo de carga / tiempo de descarga).

respondido por el markrages
1

Como en su otra pregunta, un par de esos pines son entradas analógicas de forma predeterminada, y deben habilitarse para E / S digital. El código no funcionará, de lo contrario.

    
respondido por el Leon Heller

Lea otras preguntas en las etiquetas