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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 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.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 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.RU
 
Регистрация: 29.10.2006
Сообщений: 1,448
Сказал спасибо: 96
Сказали Спасибо 319 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: Важный кусок программы для ATmega

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

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

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

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

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

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

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

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

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

например:

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

interrupt [TIM1_COMPAvoid timer1_compa_isr(void)
{
send 0;
}

unsigned char GetState(unsigned char channel)
{
unsigned int a;
GetADC(channel);
switch(
a)
  {
  case 
.. 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=0i6i++) {
                                 
states[i] = GetState(i);
                                 
states[i] & MASK_ERROR;
                                 if(
== 0) continue;
                                 if(
errors[i] == 0) {
                                                        
errors[i] |= j;
                                                        
send 0;
                                                        }
                                 }
              
scan 1;
              }

if(
send == 0) {
              for(
i=0i6i++) {
                                 
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.RU
 
Регистрация: 29.10.2006
Сообщений: 1,448
Сказал спасибо: 96
Сказали Спасибо 319 раз(а) в 233 сообщении(ях)
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, время: 20:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot