Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Важный кусок программы для ATmega

Непрочитано 21.08.2011, 09:32  
orionSSV
Временная регистрация
 
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
orionSSV на пути к лучшему
По умолчанию Важный кусок программы для ATmega

Доброго времени суток господа. Ни когда до сих пор не пользовался форумом в качестве решения своего конкретного вопроса. Но форумы этого портала весьма эффективны! Итак...
Суть задачи такая : с нескольких удалённых объектов снимаются их состояния. Всего состояний 4 (в аналоговом виде), после декодирования они в 3-х битном состоянии подаются в входы скажем PORTA.0, PORTA.1 и PORTA.2. Их значения (на выходе декодера) 0х0, 0х1, 0х2, 0х3 (ну или 0b000, 0b001, 0b011, 0b111). Опрос объектов (всего 6 штук) производится последовательно. Реализовано на 6 реле которые коммутируют объекты по очереди к одному декодирующему блоку. Управляются реле PORTB (через соответствующие развязки), на выходах которого поочерёдно появляется "1" с нулевого по 6 бит порта (в цикле итерация которого инициируется прерыванием от таймера Т1). Проблема следующая: ни как не могу сделать так чтобы в процессе опроса программа запоминала состояния объектов, чтобы в последствии скажем вывести на индикаторы. Работаю в Proteus, программа пишется в CodeVisionAVR. Камень Atmega 8515. При необходимости с радостью предоставлю файлы этого устройства для критики.
С уважением и надеждой, я))
Реклама:
orionSSV вне форума  
Сказали "Спасибо" orionSSV
warel (28.06.2019)
Непрочитано 21.08.2011, 10:03  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Сообщение от orionSSV Посмотреть сообщение
Проблема следующая: ни как не могу сделать так чтобы в процессе опроса программа запоминала состояния объектов, чтобы в последствии скажем вывести на индикаторы.
Считывание значения объекта с порта в переменную с именем этого объекта уже есть память состояния. Вопрос, на какую глубину во времени вам нужно сохранять эти данные. Обычно в таких случаях организуют стек (массив) в памяти. Глубина стека определяется исходя из ваших требований (вы их не оглашали, увы.). Подобные устройства носят названия логгеры или регистраторы. Исходя из требований их часто реализуют на SD/MMC картах или других типах долговременной памяти. Повторяю, исходя из условий. Которых мы не знаем.
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 21.08.2011, 13:11  
EagleB3
Вид на жительство
 
Регистрация: 03.05.2006
Сообщений: 312
Сказал спасибо: 30
Сказали Спасибо 144 раз(а) в 52 сообщении(ях)
EagleB3 на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Сообщение от orionSSV Посмотреть сообщение
Проблема следующая: ни как не могу сделать так чтобы в процессе опроса программа запоминала состояния объектов, чтобы в последствии скажем вывести на индикаторы
В целом присоединяюсь к предыдущему посту, но немножко конкретизирую вопросы. Идти надо от конца к началу.
Обычно конечная цель все же анализ данных от датчиков. Поэтому вопросы, которые Вы заранее четко должны решить для себя

g) Кто, как, чем и где будет анализировать данные.
f) Перед этим - какая-то предварительная обработка данных.
e) Перед этим - передача данных (например в компьютер...). Может быть не надо вообще.
d) Перед этим - в каком виде и сколько времени хранить данные до передачи (обработки). Энергонезависимость. Каков общий объем данных. Как и когда удалять ненужные данные.
c) Перед этим - как помещать данные в хранилище.
b) Перед этим - как и в каком виде получать данные.
a) Какие вообще требуются индикаторы (этапы "b".."g" и эксплуатация прибора).

Вы пока справились с этапом "b", и просите совета по этапу "c".
Нельзя что-то предметно советовать по этапу "c", если не известны требования к этапу "d".

Вот как-то так...

Сообщение от orionSSV
они в 3-х битном состоянии подаются в входы скажем PORTA.0, PORTA.1 и PORTA.2. Их значения (на выходе декодера) 0х0, 0х1, 0х2, 0х3 (ну или 0b000, 0b001, 0b011, 0b111).
4 состояния описываются 2-мя битами (0b00, 0b01, 0b10, 0b11).
А 0b111 = 0x07

В 3 бита Вы можете затолкать 8 состояний, т.е., при желании, добавить к нынешним 4-м состояниям еще 4 служебных (например, "обрыв", "короткое", "не ответил" и т.п.).

Последний раз редактировалось EagleB3; 21.08.2011 в 13:22.
EagleB3 вне форума  
Сказали "Спасибо" EagleB3
warel (28.06.2019)
Непрочитано 21.08.2011, 14:44  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Сообщение от EagleB3 Посмотреть сообщение
В целом присоединяюсь к предыдущему посту, но немножко конкретизирую вопросы. Идти надо от конца к началу.
Обычно конечная цель все же анализ данных от датчиков. Поэтому вопросы, которые Вы заранее четко должны решить для себя

g) Кто, как, чем и где будет анализировать данные.
f) Перед этим - какая-то предварительная обработка данных.
e) Перед этим - передача данных (например в компьютер...). Может быть не надо вообще.
d) Перед этим - в каком виде и сколько времени хранить данные до передачи (обработки). Энергонезависимость. Каков общий объем данных. Как и когда удалять ненужные данные.
c) Перед этим - как помещать данные в хранилище.
b) Перед этим - как и в каком виде получать данные.
a) Какие вообще требуются индикаторы (этапы "b".."g" и эксплуатация прибора).

Вы пока справились с этапом "b", и просите совета по этапу "c".
Нельзя что-то предметно советовать по этапу "c", если не известны требования к этапу "d".

Вот как-то так...



4 состояния описываются 2-мя битами (0b00, 0b01, 0b10, 0b11).
А 0b111 = 0x07

В 3 бита Вы можете затолкать 8 состояний, т.е., при желании, добавить к нынешним 4-м состояниям еще 4 служебных (например, "обрыв", "короткое", "не ответил" и т.п.).
Господи, да зачем вам это?! Вы собрались за коллегу его работу выполнить? Вопрос как изначально стоял?
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (28.06.2019)
Непрочитано 21.08.2011, 18:45  
orionSSV
Временная регистрация
 
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
orionSSV на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Отлично. мгновенная реакция на тему. Огромное спасибо всем!
Как метко подметил уважаемый EagleB3, состояния действительно отображают именно "обрыв", "короткое", "тревога" и "охрана". Все эти состояния передаются с объектов по 2-х проводному соединению и характеризуются изменением сопротивлений, и как следствие падением напряжения на этом объекте. У меня хватило ума реализовать дешифратор на 3 компараторах, выходы которых и есть: обрыв - 0b000, охрана - 0b001, тревога - 0b011, короткое - 0b111. По поводу глубины времени. Уважаемый ut1wpr, хранить состояния достаточно до нового опроса всех реле. А вот тревожные состояния нужно хранить до сброса, при этом новые состояния уже не учитываются (я знаю как это реализовать). индикация примерно следующая : обрыв -красный , охрана - зелёный, тревога - мигающий красный, короткое - перемигивание зелёным\красным (как реализовать знаю). Не получается сделать именно фиксирование состояний в какой нибудь массив buf[6] или переменным sensor1,sensor2...

Последний раз редактировалось orionSSV; 21.08.2011 в 19:40.
orionSSV вне форума  
Сказали "Спасибо" orionSSV
warel (28.06.2019)
Непрочитано 21.08.2011, 19:09  
orionSSV
Временная регистрация
 
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
orionSSV на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Сообщение от EagleB3 Посмотреть сообщение
g) Кто, как, чем и где будет анализировать данные.
f) Перед этим - какая-то предварительная обработка данных.
e) Перед этим - передача данных (например в компьютер...). Может быть не надо вообще.
d) Перед этим - в каком виде и сколько времени хранить данные до передачи (обработки). Энергонезависимость. Каков общий объем данных. Как и когда удалять ненужные данные.
c) Перед этим - как помещать данные в хранилище.
b) Перед этим - как и в каком виде получать данные.
a) Какие вообще требуются индикаторы (этапы "b".."g" и эксплуатация прибора).
g) Анализ данных . Кто - первая ступень АЦП, реализованный на компараторах, вторая - входы МК на которые идет результат АЦП. КАК - чтение входов МК на которые идет результат АЦП и выполнение определённых действий.
f) Только АЦП- преобразование в понятный для МК вид информации (АЦП не контроллера)
e) Передача только с объекта контроля (сторожевой датчик) по двухпроводной линии. Сигнал аналоговый.
d) Состояние "охрана" только на период опроса, все остальные до сброса и без обновления состояний(заморозить).
c) Интересный вопрос. Это как раз часть моей проблемы. Можно в созданный буфер, можно глобальными переменными... м?
b) Видимо это ответ на пункт e)
a) индикаторы - двух цветовые (красный\зелёный) светодиоды + звуковое оповещение.
orionSSV вне форума  
Сказали "Спасибо" orionSSV
warel (28.06.2019)
Непрочитано 22.08.2011, 02:57  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Важный кусок программы для ATmega

Посоветовал бы использовать другой камень. Например ATmega16. У неё встроенный 8-канальный АЦП. Не придётся ничего коммутировать, да ещё такими устройствами, как реле. 8 ног - 8 независимых входов.

Программа по таймеру (например, с интервалом 1 сек) опрашивает состояние 6 объектов и запоминает их в памяти.

После опроса данные анализируются. И если возникло какое-то важное событие - то устанавливается флаг этого события.

Камушек по RS-232 связывается главным компьютером. Запущенная на ПК программа с интервалом (допустим, 2 сек) опрашивает МК.

МК ей передаёт как текущие состояния объектов, так и флаги.

По определённой команде флаги могут сброситься (ложная тревога).

Можно сделать так, что МК сам с интервалом 1 минуту передаёт состояние объектов. А если случилось событие - передаёт состояние немедленно.

Если программе на ПК за 2 минуты (ну примерно это всё) не пришло данных от МК, то это также аварийная ситуация.

Данные желательно зашифровать.

например:

PHP код:
 
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
scan = 0;
}

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
send = 0;
}

unsigned char GetState(unsigned char channel)
{
unsigned int a;
a = GetADC(channel);
switch(a)
  {
  case 0 .. 400: 
  return STATE_1;
  break;
            
  case 401 .. 600:
  return STATE_2;
  break;

  case 601 .. 800:
  return STATE_3;
  break;

  default
  return STATE_4;
  }
}

int main(void)
{
unsigned char i,j;
begin:
if(scan == 0) {
              for(i=0; i‹6; i++) {
                                 states[i] = GetState(i);
                                 j = states[i] & MASK_ERROR;
                                 if(j == 0) continue;
                                 if(j & errors[i] == 0) {
                                                        errors[i] |= j;
                                                        send = 0;
                                                        }
                                 }
              scan = 1;
              }

if(send == 0) {
              for(i=0; i‹6; i++) {
                                 SendUART(states[i]);
                                 SendUART(errors[i]);
                                 }
              send = 1;
              }
goto begin;
} 

Последний раз редактировалось Godzilla82; 22.08.2011 в 04:52.
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
warel (28.06.2019)
Непрочитано 22.08.2011, 05:17  
orionSSV
Временная регистрация
 
Регистрация: 04.07.2010
Адрес: город Омск
Сообщений: 72
Сказал спасибо: 6
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
orionSSV на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Сообщение от Godzilla82 Посмотреть сообщение
Посоветовал бы использовать другой камень. Например ATmega16. У неё встроенный 8-канальный АЦП. Не придётся ничего коммутировать, да ещё такими устройствами, как реле. 8 ног - 8 независимых входов.
Желательно конечно использовать уже имеющийся камень...Хотя Atmega тоже не проблема. Хм... Может даже в этом есть определённый смысл. И кстати необходима развязка тогда, цеплять шлейфы блиною до 20м к ноге МК весьма сомнительное занятие)).
Зато к компу подключать нет нужды. Это просто охранное устройство к тщательным контролем состояния шлейфов.
сейчас ознакомился с ДШ камня. Конечно на порядок выше 8515...

Последний раз редактировалось orionSSV; 22.08.2011 в 05:30.
orionSSV вне форума  
Сказали "Спасибо" orionSSV
warel (28.06.2019)
Непрочитано 22.08.2011, 05:37  
Godzilla82
Почётный гражданин KAZUS.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Важный кусок программы для ATmega

Сообщение от orionSSV Посмотреть сообщение
И кстати необходима развязка тогда, цеплять шлейфы блиною до 20м к ноге МК весьма сомнительное занятие)).
Зато к компу подключать нет нужды. Это просто охранное устройство к тщательным контролем состояния шлейфов.
Ну куда его подключать - решать вам. Это для примера.

Ну и входная цепь:
Миниатюры:
Нажмите на изображение для увеличения
Название: in_sch.gif
Просмотров: 80
Размер:	1.3 Кб
ID:	25338  
Godzilla82 вне форума  
Сказали "Спасибо" Godzilla82
warel (28.06.2019)
Непрочитано 22.08.2011, 06:04  
avric
Временная регистрация
 
Аватар для avric
 
Регистрация: 23.12.2007
Сообщений: 88
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 6 сообщении(ях)
avric на пути к лучшему
По умолчанию Re: Важный кусок программы для ATmega

Правильно ли я понял, что у вас просто не считываются состояния портов?
Если да, то просто надо читать не PORTA, а PINA (см. раздел о GPIO в даташите).
states[i] = PINA & 0x07; // оставляем нужные 3 бита

Ну, плюс реле работают медленно (миллисекунды, если ни десятки миллисекунд на переключение), следовательно, читать состояния после коммутации с довольно большой задержкой. Например, есть смысл читать состояния перед перекоммутацией в том же обработчике прерывания таймера.

Далее, о запоминании состояния в прерывании. Если вы так и делаете, то переменные, в которые вы сохраняете состояния, следует объявлять с атрибутом volatile, например:
char volatile states[CHANNEL_COUNT];
в противном случае в цикле индикации компилятор может оптимизировать чтение этих переменных из памяти, запихнув их в регистры один раз перед циклом (логично, ведь значения переменных в цикле не меняются).
avric вне форума  
Сказали "Спасибо" avric
warel (28.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
Нужен образец программы для at89c51rc24pi avgust75 Микроконтроллеры, АЦП, память и т.д 9 09.08.2011 10:08
из DVD в DVD-player реально? Altalimir Микроконтроллеры, АЦП, память и т.д 14 17.09.2007 21:21
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


Часовой пояс GMT +4, время: 09:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.