Я использую picdem 18F4550 с микрочипом v8.63 с компилятором C18.
Я включу PortA для установки в качестве входа, я подключу LDR к порту RA0. Что выглядит следующим образом (я думаю):
TRISAbits.TRISA0 = 1; //<= set RA0 as input.
Теперь мне нужно значение LDR (напряжение/значение, если светодиод горит), могу ли я сказать:
int colorLed = PortAbits.RA0;
И теперь в переменной типа int есть значение/напряжение моего светодиода.
Поправьте меня если я ошибаюсь.
Во-первых, давайте проверим, правильно ли вы подключили свой 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
Янник