Включите порт RA0 в качестве входа и извлеките значение LDR из светодиода.

Я использую picdem 18F4550 с микрочипом v8.63 с компилятором C18.

Я включу PortA для установки в качестве входа, я подключу LDR к порту RA0. Что выглядит следующим образом (я думаю):

TRISAbits.TRISA0 = 1; //<= set RA0 as input.

Теперь мне нужно значение LDR (напряжение/значение, если светодиод горит), могу ли я сказать:

int colorLed = PortAbits.RA0;

И теперь в переменной типа int есть значение/напряжение моего светодиода.

Поправьте меня если я ошибаюсь.

Ответы (2)

Во-первых, давайте проверим, правильно ли вы подключили свой LDR, должно быть что-то вроде этого...

Проводка LDR

Чтобы прочитать значение PIN RA0/AN0, вам нужно выполнить некоторую инициализацию, чтобы убедиться, что порт настроен правильно. В техническом описании объясняется, как все это работает, но эти значения должны работать:

TRISAbits.TRISA0 = 1;           // Set RA0/AN0 to input
ADCON0           = 0b00000000;  // Set channel select to AN0
ADCON1           = 0b00001110;  // Configure RA0/AN0 as analogue
ADCON2           = 0b10101010;  // Right justified result
                                // TAD 12 and FOSC 32 - may need to adjust this
                                // depending on your clock frequency (see datasheet)
ADCON0.ADON      = 1;           // Enable ADC

Теперь порт должен быть настроен, теперь вы можете прочитать значение LDR:

ADCON0bits.GO    = 1;           // Set the GO bit of the ADCON0 register to start
                                // the conversion.

while (ADCON0bits.GO);          // Wait until the conversion is complete.

Теперь вы можете прочитать результат LDR как 10-битное значение в формате ADRESH:ADRESL. Если вам нужно только 8-битное разрешение, то установите ADCON2.ADFM = 0выравнивание по левому краю результата, тогда вам нужно только прочитать, ADRESHчтобы получить результат.

план, который вы подписали, правильный. Код, который вы пишете, это то, что я хотел! Большое спасибо за вашу помощь!!!

Для считывания аналогового напряжения необходимо использовать АЦП PIC (аналогово-цифровой преобразователь).

Вот учебник: http://www.roboticsguy.com/tutorials/pic-microcontrollers/configuring-the-pic18f4550-10-bit-adc-module