Получить значение от LDR - PullRequest
0 голосов
/ 27 марта 2011

Я использую picdem 18F4550 с микрочипом v8.63 и компилятором c.Я использую следующие компоненты: - 3 светодиода (красный, зеленый, синий);- LDR (327700 NORPS-12 farnell).

Я подключил 3 светодиода (красный, зеленый и синий) на выходах RB4, RB5 и RB6.Я также подключаю LDR к RB1.

У меня такой вопрос: когда загорается зеленый индикатор другого светодиода, как я могу получить значение в моем коде, которое измеряет LDR?код:

#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;     
    }
    if(PORTBbits.RB5 == 0) {
        LATDbits.LATD1 = 1;
    }
    if(PORTBbits.RB6 == 0) {
        LATDbits.LATD2 = 1;
    }   
    if(PORTBbits.RB1 == 1) {

    }
    while(1) {
        ;
    }   
}

1 Ответ

0 голосов
/ 26 июля 2011

Предполагается, что вы подключаете LDR к выводу, настроенному как GPIO. Применяется порог напряжения для вывода GPIO. Значение, считываемое на выводе, зависит от сопротивления LDR, достаточно широкого, чтобы генерировать как низкий логический уровень, так и высокий логический уровень. Скорее всего, вы хотите подключить LDR к выводу PIC A / D вместо GPIO. Используйте ADCON для настройки A / D. Настройте A / D для преобразования и дождитесь прерывания завершения A / D. Затем прочитайте ADRESH и ADRESL, которые выдают аналоговое напряжение LDR.

...