ОЧЕНЬ НУЖНА ПОМОЩЬ ЖИВЫХ МИКРОКОНТРОЛЛЕРЩИКОВ!!!

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

Достало копаться в сети и листать книги, поэтому обращаюсь к живым микроэлектронщикам... Ситуация вот какая. Есть сигнал аналоговый. Напряжение от 0 до +5В. Нужно на 4 блока по 2 индикатора семисегментных вывести: среднее значение за 10 измерений, текущее, миниммальное и максимальное. Есть еще 2 кнопки: старт и сброс. Есть контроллер КР1816ВЕ31. Соотвественно без памяти программ, но с памятью данных. Есть АЦП-8ми разрядное. На выбор.....
Вот так) вообщем начал разбираться, то-се.
1. Дошел до ацп-AD7880. Как его подключить-понятно. Но вот вопрос. Он же выдаст мне 8 бит. А нужно выводить "целые" вольты и "десятые". Можно взять и четыре старших бита-как целые вольты, а 4 младших - за десятые? если да-то как? или если нет, то что делать? Или нужно переводить в 2-10 систему?
2. Дальше...я эти биты принял, и решил кидать в "банки" то есть все операции там произвести. Положим получилось и у меня будут они лежать как 1 байт. Можно видимо выделить старшие и младшие и отдельно подавать на индикаторы? И здесь же - как быть с точкой "h" циферкой. Ее зажигать нужно будет одновременно со старшим разрядом или как???
3. Кнопки. От них нужно будет делать прерывание? то есть нажал "старт" у меня запустился МК, обнулили все, а потом запустили ацп, считали и пошло-поехало. Или как? Или старт включать должно считывание ацп? Сброс-просто обнуляет видимо.
4. Внешняя память (здесь видимо мое непонимание читателя выбесит, но все же) - - - я в нее что записывать-то должен??? программу??? то есть мне нужно каждый mov кидать как-то туда....?? то есть у меня порты P0 и P2. На Р0 подаю младший байт адреса ячейки ПЗУ, а на Р2-старший. Младший по сигналу ALE уходит в защелку (ну эти RG)??? а потом на Р0 выставляю свой несчастный mov????

вообщем я пока в трансе, но затею это все дело изучить не оставлю)
помогите, микроконтроллерщики добрые..)
чайнику нужна помощь!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

levon66 писал(а): Есть контроллер КР1816ВЕ31.
Такой раритет был выбран из любви к отечественной технике?
levon66 писал(а):Или нужно переводить в 2-10 систему?
Именно.
levon66 писал(а):2. Дальше...я эти биты принял, и решил кидать в "банки" то есть все операции там произвести. Положим получилось и у меня будут они лежать как 1 байт. Можно видимо выделить старшие и младшие и отдельно подавать на индикаторы? И здесь же - как быть с точкой "h" циферкой. Ее зажигать нужно будет одновременно со старшим разрядом или как???
1-го байта будет мало ИМХО. Рассчитывать на работу с 2 байтами, конкретно - умножить 1й байт на некую константу, чтобы при 256 на входе получилось скажем 5000 в результате.
levon66 писал(а):3. Кнопки. От них нужно будет делать прерывание? то есть нажал "старт" у меня запустился МК, обнулили все, а потом запустили ацп, считали и пошло-поехало. Или как? Или старт включать должно считывание ацп? Сброс-просто обнуляет видимо.
Нет. Достаточно опрос состояния кнопок сделать.
levon66 писал(а):4. Внешняя память (здесь видимо мое непонимание читателя выбесит, но все же) - - - я в нее что записывать-то должен??? программу??? то есть мне нужно каждый mov кидать как-то туда....?? то есть у меня порты P0 и P2. На Р0 подаю младший байт адреса ячейки ПЗУ, а на Р2-старший. Младший по сигналу ALE уходит в защелку (ну эти RG)??? а потом на Р0 выставляю свой несчастный mov????
Внешняя память прошивается на программаторе. И из нее читается самим МК программа.
Контактная информация:
Реклама
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

вас не затруднит по порядку начать...вы единственный откикнувшийся...так сказать путь к знаниям. можно а ацп начать? у меня ацп 8ми разрядное. то есть максимум 11111111. это должно соответсвовать 5 вольтам, а 00000000 - о вольт?
чайнику нужна помощь!
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

Да. Точнее - 11111111 - это при Uвх=Uref, 00000000 - Uвх=0
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

так. а нужно как-то это в ацп отображать (эти 0 и 1)? или важно получить с него байт информации в мк и уже здесь дальше все делать?
чайнику нужна помощь!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

Почитайте даташит на АЦП, там все описано. С АЦП получаются данные, после - их обрабатывает МК и выводит на индикатор
Контактная информация:
Реклама
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

одно дело почитать, а другое, когда в глаза этого не видел и щупал. вот и лезу с вопросами. ((
чайнику нужна помощь!
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

там и пишут: с мк приходит 3 сигнала, то-се, и имеем байт. его закидывают в аккум. но он там в двоичной системе. зачем мне в 2-10 переводить? или ацп нужно перед этим как сказать-что вот это 5в и ты мне давай 11111111, а вот это 0 и давай 0000000. это опорным рещается или там какие-то пересчеты нужны. в литературе просто-держи 8 бит и все.
чайнику нужна помощь!
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

levon66 писал(а):но он там в двоичной системе. зачем мне в 2-10 переводить?
Чтобы на индикатор вывести.
Контактная информация:
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

то есть для каждой палочки индикатора и точки 0и1 должны быть в 2-10? у фрунзе "микроконтроллеры? это же просто" есть примеры с индикаторами. там как-то не помни такого. а почему так нужно? а дешифратор также их воспримет как и двоичные? и одну цифру одним байтом?
а еще...как мне "десятые" доли вольта от ацп понять. от туда ведь без точек десятичных идет...
чайнику нужна помощь!
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

levon66 писал(а):то есть для каждой палочки индикатора и точки 0и1 должны быть в 2-10? у фрунзе "микроконтроллеры? это же просто" есть примеры с индикаторами. там как-то не помни такого. а почему так нужно? а дешифратор также их воспримет как и двоичные? и одну цифру одним байтом?
При чем здесь одно к другому? С двоичным кодом вы ничего удобоваримого не получите на выходе - раче что-что-то вроде C7 на индикаторе.
levon66 писал(а):а еще...как мне "десятые" доли вольта от ацп понять. от туда ведь без точек десятичных идет...
Умножить на 195 (тогда вместо 256 получите грубо 50 000 - точнее, 49 920) и перевести в двоично-десятичную систему (займет 3 байта, получится что-то вроде 04 99 20), последний байт откидываете, результат выводите на индикатор
Контактная информация:
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

честно. не понял. индикаторов допустим 2. мне нужно на правый высти целые вольты. потом поставить точку. а потом вывести "десятые" доли. где 195:? ну не понимаю я, простите пожалуйста.
чайнику нужна помощь!
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

Понятия "целые", "десятые" в МК нет. Т.к. нет плавающей запятой.
С АЦП идет величина. пропорциональная напряжению - т.е., 0 - это 0В, 256 - это 5В, если опорный источник 5В.
Вам нужно привести это как-то к удобоваримому для индикатора виду - т.е. получить либо 50, либо 500, либо 5000 и т.д. для входной величины, дальше - это уже переводить в двоично-десятичный код и выводить нужные разряды. Учтите, что умножать/делить можно опять-таки только на целые числа. Потому - подбирать разрядность операций, чтобы погрешность не особо большая была
Хотя я бы на вашем месте немного схитрил бы - поставил бы опорное напряжение не 5, а 5.12В. Тогда достаточно было бы полученные данные умножить на 2 и преобразовать в bcd, после - откинуть 1 разряд...
Контактная информация:
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

умножаю на 2- получаю 10.24. что подсказывает, что связано со степенью двойки. но, чтоб меня, не понимаю я. можно подробней с этими разрядами. как и почему там должно произойти. и почему обязательно 50, 500 или 500? откуда они.
чайнику нужна помощь!
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

levon66 писал(а):умножаю на 2- получаю 10.24.
Что именно умножаете?
Если вы умножите 256 (которое соответствует 5.12В опорным) - вы получите число 512. Которое потом будете выводить на индикатор.
levon66 писал(а):можно подробней с этими разрядами. как и почему там должно произойти. и почему обязательно 50, 500 или 500? откуда они.
Для 5 вольт (или 5.12В) вы получаете на выходе АЦП число 256. Чтобы вывести на индикатор 5В, вам нужно получить из этого числа либо 50 (x100 мВ), либо 500 (х10 мВ) и т.д., потом - перевести его в двоично-десятичную запись, и потом - вывести нужное кол-во разрядов (2 старших в вашей задаче)
Контактная информация:
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

то есть если мне нужно было указать до сотых, то нужно было получить число 500, а вот если до десятых, то 50.??? не понимаю зачем 50 и 500? и как быть если 4.8 вольта.?? мне стыдно, что я так туплю,но хочу разобраться.
чайнику нужна помощь!
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

а может вот -если у меня от 0 до 5 вольт и нужно точность до десятых, то можно взять и через каждые пять изменений в двоичном переводить через 0,1 вольта. т.е. 00000000-0вольт. а вот 00000100-уже 0,1 вольт
чайнику нужна помощь!
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

Можно - только тогда получается поделить на 5, получим для максимального значения число 51 (51.2 - но сотые отбрасываются), в итоге - при опорном напряжении 5.12В получаем корректное отображение.
Рассчет делается для максимального/минимального значения (т.к. известно, что должно быть на выходе при известном опорном напряжении), для меньших значений - пропорционально пересчитается.
Контактная информация:
Родился
Сообщения: 16
Зарегистрирован: Чт янв 08, 2009 10:05:23

Сообщение levon66 »

а как это выглядеть должно? то есть как мне объяснить мк что вот так и так. в программе то есть как реализовать. на асме. и деление производить в 2ой форме? то есть в регистр В класть 2ку в 2ой, а в А класть то, что снимаю?
чайнику нужна помощь!
Друг Кота
Аватара пользователя
Сообщения: 3051
Зарегистрирован: Пт авг 10, 2007 12:49:55
Откуда: kr.ua

Сообщение NiTr0 »

levon66 писал(а):а как это выглядеть должно? то есть как мне объяснить мк что вот так и так. в программе то есть как реализовать. на асме.
Пишете процедуру запуска преобразования и считывания результата, процедуру вывода на экран, и увязываете это мат.обработкой и обработкой кнопок.
levon66 писал(а):и деление производить в 2ой форме? то есть в регистр В класть 2ку в 2ой, а в А класть то, что снимаю?
Да, только делить на 5.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»