реклама на сайте
подробности

 
 
> АЦП PIC16F877 для новичков
студент ю
сообщение Nov 22 2011, 13:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 11-02-09
Пользователь №: 44 720



Я новичок в универе учился на пиках, конкретно на PIC16F877. Так как знания поверхностные то пытаюсь сам докопаться до истины, а чтоб конкретно докопаться решил сделать что то типа реле напряжения, вобщем устройство работает следующим образом АЦП меряет все время напряжение и заносит результат в регистры (AdresL) и (AdresH), только я не пойму если АЦП 10-разрядное (десятичное число выглядит как 1023) то как записывается туда результат. У меня два предположения либо поровну, 512 в регистр (AdresL) и 512 (AdresH) если сложить два регистра то получим 1024, либо восемь разрядов лежат в регистре (00000000 AdresL), а остальные два в регистре (00 AdresH) если их сложить, то получим 10 разрядное число = 1023. Я не знаю какое рассуждение правильное. И так к нашему заданию, АЦП меряет напряжение и у меня есть некое измеренное число (результат измерения). И есть некая константа даже две, я не знаю как в программе написать условие, если результат измерения меньше числа .106, то на одном из выходов порта D установить ноль, если больше то пусть там сохраняется единица. И второе условие если результат измерения больше чем число .145 то на одном из выводов порта D установить ноль, иначе должно все время присутствовать единица.
Вот это равенство я не могу представить программно как сравнить одно с другим. Пишу на ассемблере, очень прошу помощи.

Сообщение отредактировал студент ю - Nov 22 2011, 13:47
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Nov 22 2011, 15:49
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(студент ю @ Nov 22 2011, 17:45) *
... PIC16F877...
АЦП меряет все время напряжение и заносит результат в регистры (AdresL) и (AdresH), только я не пойму если АЦП 10-разрядное (десятичное число выглядит как 1023) то как записывается туда результат.

Об этом вполне доступно написано в документации ( http://ww1.microchip.com/downloads/en/devicedoc/30292c.pdf ).
Если в регистре ADCON1 7-й бит - единичка, результат выравнивается вправо:
ADRESH ADRESL
000000xx xxxxxxxx
если наоборот, 7-й бит - ноль, результат выравнивается влево:
ADRESH ADRESL
xxxxxxxx xx000000

Цитата(студент ю @ Nov 22 2011, 17:45) *
...если результат измерения меньше числа .106, то ...

Есть много вариантов. Самый простой вариант - предположим, что АЦП 8-битное. Тогда и результат, и граничные значения влезают в регистр, с ними удобно работать. Для этого надо выровнять результат влево и пользоваться только ADRESH, игнорируя младшие биты в ADRESL.

Второй вариант - рассматривать надо обе "половинки" числа. Ассембер пиков я тоже крайний раз видел в институте, поэтому только в общих словах:
берём старшие части результата и границы; получаем три (в общем случае) варианта
- старшая часть результата больше. Значит, весь результат тоже больше границы
- старшая часть результата меньше. Соответственно, всё значение также меньше границы.
- старшие части равны. Надо рассматривать младшие части, там тоже будет три варианта.
Для этого алгоритма, мне кажется, удобнее выравнивать результат АЦП вправо.

PS а самое удобное - доверить компилятору Си "склеить" эти результаты в одно 16-битное число ;-)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 16:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016