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

Обсуждаются темы не относящиеся к журналу "РАДИО"

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

Сообщение levon66 » 08 янв 2009, 18:38

Достало копаться в сети и листать книги, поэтому обращаюсь к живым микроэлектронщикам... Ситуация вот какая. Есть сигнал аналоговый. Напряжение от 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????

вообщем я пока в трансе, но затею это все дело изучить не оставлю)
помогите, микроконтроллерщики добрые..)
levon66
 
Сообщения: 6
Зарегистрирован: 08 янв 2009, 11:58

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

Сообщение ASD » 08 янв 2009, 19:45

levon66 писал(а): 1. Или нужно переводить в 2-10 систему?

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

Вообще-то я не могу понять, чем Вам полюбился давно устаревший КР1816ВЕ31. Сегодня есть много других, программно совместимых с ним, но имеющих внутреннюю электрически перепрограммируемую память программ. Никаких дополнительных микросхем памяти и регистров "навешивать" не придется. Посмотрите, например, серию AT89 на сайте фирмы Atmel www.atmel.com
ASD
 

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

Сообщение levon66 » 08 янв 2009, 19:49

можно у Вас подробней выспросить все это?
levon66
 
Сообщения: 6
Зарегистрирован: 08 янв 2009, 11:58

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

Сообщение ASD » 08 янв 2009, 20:02

Спросить - можно, а вот ответ получить... :)
С этой серией (КР1816) последний раз имел дело лет 20 назад. Мелкие подробности могу и не вспомнить.
ASD
 

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

Сообщение levon66 » 08 янв 2009, 20:05

вообщем, про десятые доли вольта вот что в голову с ваших строк проишло (разрядность нужна десятые доли) : 0 вольт-00000000, дальше 00000001, дальше 00000010, дальше 00000011, а потом 0000100-это как бы пятая по счету комбинация. то есть она уже соотвествует 0,1 вольта. раз шкала у меня от 0 до 5в. или неправильно понял?
levon66
 
Сообщения: 6
Зарегистрирован: 08 янв 2009, 11:58

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

Сообщение ASD » 09 янв 2009, 12:12

Если цена единицы младшего разряда Вашего АЦП равна 0,02 В, то:
00000000 - 0 В
00000001 - 0,02 В
00000010 - 0,04 В
00000011 - 0,06 В
00000100 - 0,08 В
00000101 - 0,1 В
...
11111010 - 5,0 В
...
11111111 - 5,1 В
ASD
 

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

Сообщение levon66 » 09 янв 2009, 12:24

Нужно будет переводить в 2-10 системму. Однако когда это делать? Т.е. когда вычислил уже все значения и перед выводом на индикаторы? или с самого начала-снял с ацп и сразу переводим, а потом все операции в 2-10 системе. И еще: Подал опорное на ацп 5.12 вольта. Тогда при выходе с ацп 1111111 это должно отображаться как 5.0 на индикаторе. Я эти 11111111 (256) делю на 5 и получаю как 50. А если десятичная точка горит всегда-будет 5.0. Значит нужно выводить число 50...но как? в 2-10 системе это будет 1 байт: старшие 4 бита-число 5, младшие 4-число 0. И дальше как? занулять младшие, выводить отдельно старшие на первый разряд индикатора, потом наоборот??
levon66
 
Сообщения: 6
Зарегистрирован: 08 янв 2009, 11:58

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

Сообщение ASD » 09 янв 2009, 14:58

levon66 писал(а): Нужно будет переводить в 2-10 системму. Однако когда это делать?
Да когда угодно! Как Вам удобнее, так и делайте.
levon66 писал(а): Подал опорное на ацп 5.12 вольта. Тогда при выходе с ацп 1111111 это должно отображаться как 5.0 на индикаторе. Я эти 11111111 (256) делю на 5 и получаю как 50.
Что-то у Вас с арифметикой не в порядке. 11111111 это 255, а не 256. И 255/5 = 51, а не 50.
levon66 писал(а):...старшие 4 бита-число 5, младшие 4-число 0. И дальше как? занулять младшие, выводить отдельно старшие на первый разряд индикатора, потом наоборот??
В любом порядке, как Вам удобнее. И не бойтесь допустить ошибку. Любую программу приходится отлаживать, т. е. искать и исправлять допущенные ошибки и недочеты. И как правило, неоднократно, прежде чем будет получен полностью удовлетворяющий Вас результат.
ASD
 

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

Сообщение levon66 » 09 янв 2009, 18:12

а как можно сделать этот перевод из двоичной системы в двоично-десятичную? команд таких нет. а поиски написанных программ с такими оперциями не помогают. мысль о том, что каждой комбинации bin сопоставить 2-10 число это как-то пугает.
и еще вопрос. как реализовать можно вычисление среднего из 10 последних показаний. Есть мысль, что есть 10 разрядов. Вычислил среднее, потом получил новое измерение-записал вместо 1-го из тех десяти, вычислил среднее. ПОотом получил измерение записал вместо второго, вычислил и т.д. Но как это в асме сделать. Это ведь не паскаль с циклами обычными. Как-то может связываться с SP???
levon66
 
Сообщения: 6
Зарегистрирован: 08 янв 2009, 11:58

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

Сообщение levon66 » 09 янв 2009, 19:05

я понял как переводить в программе двоичные к 2-10...последний(почти) вопрос. как реализовать можно вычисление среднего из 10 последних показаний. Есть мысль, что есть 10 разрядов. Вычислил среднее, потом получил новое измерение-записал вместо 1-го из тех десяти, вычислил среднее. ПОотом получил измерение записал вместо второго, вычислил и т.д. Но как это в асме сделать. Это ведь не паскаль с циклами обычными. Как-то может связываться с SP???
________________
а задача вот какая:с ацп с интервалом в 1с выводить-текущее, мин, макс, и среднее из 10 последних. Индикаторы 4 по 2 разряда. а еще кнопки пуск и сброс предусмотреть.
levon66
 
Сообщения: 6
Зарегистрирован: 08 янв 2009, 11:58

След.

Вернуться в Всё остальное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1