PIC 16F1788 считывает напряжения

Я новичок в программировании PIC, и мне нужен совет, правильно ли я нахожусь в своем коде. Я пишу функцию, которая считывает входные значения (0-5 В) с порта 7 и возвращает значение напряжения на основе (0-6,5 В).

Вот что у меня есть до сих пор:

float measure(void) {

    do {
        ADCON1= 0x00; // configure ports as AD
        buffer.vol = ADC_Read(7); // reads value from port 7
        Real = (buffer.vol/5)*6.5; // converts it to voltage between 0 -6.5v
    } while(1);
}

Это выглядит правильно? Нужно ли мне что-то менять?


person sam brosteain    schedule 10.02.2015    source источник
comment
После ответа на сообщение, пожалуйста, не удаляйте 90% его. Оставьте это, чтобы другие могли воспользоваться.   -  person chux - Reinstate Monica    schedule 11.02.2015
comment
Сэм Бростейн, это второй раз, когда ваше сообщение откатывается назад после того, как вы удалили большую его часть. Пожалуйста, оставьте комментарий, если вы пытаетесь сделать что-то кроме того, чтобы скрыть свой собственный пост.   -  person chux - Reinstate Monica    schedule 12.02.2015


Ответы (1)


Вам не нужно перенастраивать контакт внутри петли. Начальная настройка должна происходить в начале main.

ADC_Read не возвращает значение с плавающей запятой; вам нужно преобразовать его самостоятельно. Для 12-битного АЦП вы можете иметь

const float conversion_factor = 6.5f / ( ( 1 << 12 ) - 1 );

а затем сделать

Real = ADC_Read(7) * conversion_factor;

Непонятно, для чего buffer. Если вам по какой-то причине не нужно сохранить немасштабированное напряжение, не делайте этого.

person Potatoswatter    schedule 10.02.2015
comment
У меня есть вопрос, вы не возражаете, это (1‹‹12), потому что на картинке 12 разных портов ввода-вывода? благодарю вас - person sam brosteain; 10.02.2015
comment
(1‹‹12) потому что это 12-битный АЦП. - person Robert; 10.02.2015