как совместить ADRESH и ADRESL на 12-битном АЦП
MICRO: PIC18LF47K42 компилятор: XC8 приложение: MPLABX
Привет, я пытаюсь объединить значения в моем 12-битном АЦП. они входят в АДРЕШ и АДРЕСЛ. мой АЦП настроен для выравнивания по правому краю, который формирует так: ADRESH: (---- MSB, x, x, x) ADRESL: (X, X, X, X, X, X, X, LSB)
Это моя первая работа с АЦП, и, надо признать, я мало о них знаю. Но, проверив значение в моем регистре результатов, я могу сказать, что у меня нет хорошего разрешения. Я почти уверен, что это потому, что я совмещаю ADRESH и ADRESL. как я мог это сделать? И снова это 12-битный АЦП. его тестируют с помощью LDR, когда нет света, я получаю 0, и это нормально, но когда есть слабый свет, он переходит к десятичному значению 48, поэтому я снова немного увеличиваю яркость, и она остается на уровне 48. до тех пор, пока не произойдет большой скачок до WhicHit перескакивает на 64 или что-то в этом роде.
#include "myIncludes.h"
volatile unsigned char ZCDSoftwareFlag = 0;
volatile unsigned char switchValue = 0;
void main(void)
{
portInit();
triac = 0;
unsigned char result;
adcInit();
while(1)
{
__delay_us(4);
ADCON0bits.GO = 1; //Start conversion
while (ADCON0bits.GO); //Wait for conversion done
result = ADRESH;
result = result << 8;
result = result |ADRESL;
}
}
И вот функция инициализации ADC
void adcInit(void)
{
ADCON0bits.FM = 1; //right-justify
ADCON0bits.CS = 1; //ADCRC Clock
ADPCH = 0x00; //RA0 is Analog channel
ADCON0bits.ON = 1; //Turn ADC On
ADCON0bits.GO = 1; //Start conversion
}
1 ответ
Вы пытаетесь поместить 12-битный результат в 8-битную переменную. Переключите его на 16 бит
uint_t result;