Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 05:54:09

Здравствуйте, недавно столкнулся с проблемой, нужно собрать схему и написать программу на микроконтроллер PIC16F873, так как учусь на программиста с принципами написания программы на мк разобрался за пару часов. Но тут возникла проблема, я в электронике практически самоучка, но многое знаю, а вот с даташитом на этот мк до конца разобраться не смог, подскажите:

1)Какие аналоговые сигналы и в каких диапазонах может воспринимать и передавать этот МК?
2)Можно ли программно(пишу на С) задать напряжение на выходах мк к цифровому индикатору, мне нужно 1.7В?

http://labkit.ru/userfiles/file/documen ... 76_877.pdf вот даташит на этот мк.
Последний раз редактировалось zuranika Сб ноя 10, 2012 08:18:57, всего редактировалось 1 раз.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 08:36:13

1. Аналоговые сигналы с уровнями 0-Uпит микроконтроллера. Постоянное напряжение. Модуля ЦАП на борту нет.
2. Выходные уровни равны напряжению питания, поэтому программно понизить напряжение нельзя. Можно только внешними делителями или схемами сдвига уровня.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 09:06:54

то есть могу подать на вход от 0 до 5 вольт при питании 5В. На счет второго я так и думал что придется ставить резисторы для ограничения тока.
Большое спасибо.
Не подскажете какова чувствительность этого АЦП, т.е. почувствует ли он разницы скажем между 0.01В и 0.015В?

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 11:22:24

На счет пиков не уверен, т.к. архитектуры не знаю, но на AVR делал программный ЦАП 0-5 вольт с точностью 10 мВ, проверял все это дело только в протеусе - работает стабильней некуда, вот только в железе не проверял, разница думаю будет только в источнике питания по стабильности и всё. Сделать 1.7 В на ноге легко, однако не все ноги для этого подходят, если нужна динамика, ставим MOSFET и управляем через него динамически другой ногой.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 11:48:09

Спасибо, 1.7 выход с ноги не обязательно просто у меня цифровые одноразрядные индикаторы работают от 1.7В при таком напряжение достигается максимальное свечение при минимальном токе. Но тут я уже расчитал резисторы. Вот теперь думаю как быть с аналоговым входом, там управление через переменный резистор я думал по току управлять, теперь придется расчитать мост что бы по напряжению было, а на идикаторы просто выводиться значение соответствующее положению резистора что типо от 0 до 100. Ещё вопросик, а АЦП в какое значение преобразует входной сигнал, я понял что напряжение в 0.5В он преобразует в char равный о.5.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 11:53:11

Как можно учиться программировать контроллеры и совершенно не понимать ФИЗИЧЕСКОГО СМЫСЛА производимых манипуляций? :facepalm:
Разрядность АЦП у заявленного контроллера - ДЕСЯТЬ. Это означает, что минимальный ДИСКРЕТ преобразования (разрешающая способность АЦП) составит Uоп/1024=5/1024 - примерно 5 милливольт.
Но это еще не означает, что такой же будет ТОЧНОСТЬ преобразования. Для этого открывайте и читайте даташит на данный контроллер...
zuranika писал(а):Ещё вопросик, а АЦП в какое значение преобразует входной сигнал, я понял что напряжение в 0.5В он преобразует в char равный о.5.

Если диапазон чисел у 10 разрядного АЦП по выходу составит 0...1023 (0х00...0х3FF), то никак не может 0,5 вольта быть равным 0.5.
В регистре результата будут целые беззнаковые числа указанного выше диапазона... - тип unsigned int
К слову, Вы даже не знаете типы в Си... :facepalm: char - целое знаковое разрядностью в 1 байт -127...128

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:04:52

Я просто до этого ни когда не работал с микроконтроллерами, занимался в основном аналоговыми приборами, привык к простым даташитам которые максимум 3 - 4 листа занимали, а в это больше 170 листов и пока многое непонятно, вот пытаюсь разобраться что к чему, как раз таки пытаясь понять полностью физический смысл, если я во всем разберусь программу для меня написать будет проще простого, так как я пишу программы на С++ для ПК. А под МК ни когда не писал. Я не зря дал наверху ссылку даташита на этот мк, я сам по ней пытался разобраться и сижу читаю. Если можете посоветуйте книгу про мк, что бы так как раз все описывалось не очень сложным языком. Уроки по программированию мк которые я нашел сводились обычно к тому как перевести ногу из одного состояние в другое сделать прерывание и т.п. объяснение работы с АЦП ни где не было.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:09:28

Крам извиняюсь за неточность, голова тут забита многими другими вещами, я просто по запарке написал char хотя думал про float

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:12:49

zuranika писал(а):Уроки по программированию мк которые я нашел сводились обычно к тому как перевести ногу из одного состояние в другое сделать прерывание и т.п. объяснение работы с АЦП ни где не было.

А что, АЦП отдельно и АЦП на борту МК чем то различаются?
Или на чтение 170 СИСТЕМАТИЗИРОВАННЫХ страниц требуется больше ума, чем на 3...4?
Что за бред Вы тут несете?
Лучше задавайте конкретные вопросы без "музыкального" сопровождения о собственных проблемах...
:facepalm:
ЗЫ. Причем тут флоат? КАРАУЛ!!! Зачем преобразовывать 10 разрядов во флоат? Вам непременно нужно забить программную память всякой фигней?
Опишите КОНКРЕТНО поставленную задачу. По пунктам.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:23:54

Про флоат я спросил, хотел узнать как будут храниться данные в памяти мк преобразованные в АЦП.
задача такова:
есть процесс в котором нужно контролировать температуру, там находится датчик ТСМ с характеристикой 50М, нужно отобразить температуру на индикаторах диапазон(-50 +100) и преобразовать сигнал этого датчика(в нашем случае сопротивление) в частотный сигнал. Мне нужно что бы я получил значение температуры и занести её в переменную, Эта переменная потом будет использовать в формуле рассчета частоты.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:37:04

1. Отображение температуры на индикаторах - это суть есть ТАБЛИЧНОЕ преобразование двоично-десятичного числа в код сегментного индикатора (либо другого на выбор). Т.е. задача отображения сводится к ТРЕМ действиям: преобразованию переменной температуры в двоично-десятичный формат (массив unsigned char длиной в количество десятичных разрядов на индикации), табличное преобразование в код символов на индикаторе, вывод на индикатор.
2. Название датчика температуры мне ни о чем не говорит. Ваша задача состоит в том, чтобы преобразовать АНАЛОГОВЫМ способом сигнал датчика в динамический диапазон АЦП по входу - т.е. 0...5 вольт. Либо 0...опорное напряжение АЦП (оно может быть не равно напряжению питания). Для этого применяют источники опорного напряжения. Есть такие и на напряжение 4,096 вольт. Тогда шаг преобразования составит ровно 4 милливольта.
3. Последняя задача: вычисление управляющей переменной для формирования частотного сигнала. Для этого необходимо знать ПАРАМЕТРЫ этого сигнала: диапазон частот, шаг перестройки частоты, форма (меандр, синус, импульсы определеной скважности, пила...)

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:42:29

хотел узнать как будут храниться данные в памяти мк преобразованные в АЦП
Они, изначально, хранятся в единицах, диапазон которых равен разрядности АЦП, к примеру - 0-1023 (собственно, об этом уже писали выше). Вы, скорее всего, думаете, что данные с АЦП будете читать уже в вольтах. Это заблуждение. Переводить в вольты Вам придётся самому. Для этого открывайте даташит, раздел ADC, и смотрите формулу расчёта.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:44:39

1)Как вывести информацию на индикаторы я сразу разобрался
2)Характеристики частотного сигнала тоже есть, это второстепенный вопрос который я решу сам
3)как преобразовать сопротивление в сигнал от 0...5В я уже практически рассчитал

В данный момент мне нужно получить из сигнала 0-5В значение которое я мог бы занести в переменную а потом использовать в формуле расчета частоты.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:47:37

Alex,Я уже понял что они будет храниться не в вольтах, а в числах равных от 0 до 1023, перевести это в вольты думаю проблем не составит.
Спасибо

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:54:31

zuranika писал(а):В данный момент мне нужно получить из сигнала 0-5В значение которое я мог бы занести в переменную а потом использовать в формуле расчета частоты.

:))) :))) :)))
Начал за здравие - кончил за упокой...
На выходе АЦП имеется 10-разрядов в двух однобайтных регистрах. Если установлено правое выравнивание, то в младшем регистре результата будут восемь младших разрядов результата преобразования, а в старшем регистре - два старших. Т.е. преобразование в unsigned int будет таким:
256*ADRESH+ADRESL

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 12:57:22

Спасибо.

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 13:09:28

перевести это в вольты думаю проблем не составит.
Тогда почему у Вас эта задача:
мне нужно получить из сигнала 0-5В значение которое я мог бы занести в переменную
превращается в проблему ?

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 13:18:14

Я просто изначально неправильно понял принцип хранения данных АЦП. И не смог сообразить как внести эти данные в переменную, когда написали мне что от 0 до 1023 вот тогда соображалка начала работать и я понял как это сделать. И это перестало быть проблемой. Извините уж не приходилось мне работать напрямую с регистрами, только иногда с адресами переменных в оперативной памяти и то немного в другой сфере. А здесь вот не сообразил.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 13:44:31

Да незачто извиняться, главное что поняли :tea:

Re: Pic16f873 аналоговый вход/выход

Сб ноя 10, 2012 13:47:18

Если все получиться скину в эту ветку схему и прошивку может кому пригодится.
Ответить