avatar_Игорь

Порекомендуйте контроллер. Я созрел начинать.

Автор Игорь, 12-09-2011, 20:42:18

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

ИгорьTopic starter

Прекрасно понимаю, что нужно осваивать контроллеры, но когда подходит какая-то конкретная задача, быстренько решаю её с помощью 561-й логики, 555-х таймеров, на операционниках или компараторах.
Вот и сейчас - есть конкретная задача, и я как всегда принялся ваять схему. Но понял, что с таким подходом я никогда не оседлаю микроконтроллеры.
Созрел. Буду делать первые шаги в направлении использования микроконтроллера.

Планирую сделать конечное устройство - никакого расширения функций не предвидится.

Входы.
Устройство должно иметь 5 подвешенных к "нулю" входов (ВХ1-ВХ5), которые  внешних устройств будут соединять с "единицей".
Кроме этих входов нужен еще один вход (ВХ0) для подключения единственной настроечной кнопки.
Выходы.
На выходе должен быть один семисегментный индикатор. Десятичную точку тоже планирую использовать.
Кроме индикатора нужно еще четыре выхода (ВЫХ0-ВЫХ3), на которые программно нужно будет устанавливать ноль или единицу.
Управляющая программа будет небольшой - пара десятков СИ-шных строк.

Коллеги, какой порекомендуете контроллер? Желательно в корпусе, который можно вставлять в панельку.




Последняя постановка задачи - здесь.
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Бандерівець

Для таких целей я бы использовал atmega8, стоит около 2,3$.
Если в будущем нужно будет микроконтроллер получше можно тогда использовать atmega32, atmega64... работы с ними очень похожи, разница в мелочах.


m16

#2
mega16, mega32 если не нужен ацп то и mega162 имхо

Цитата: vovanxp від 12-09-2011, 20:50:45
Для таких целей я бы использовал atmega8, стоит около 2,3$.
Если в будущем нужно будет микроконтроллер получше можно тогда использовать atmega32, atmega64... работы с ними очень похожи, разница в мелочах.
по заявленным входам -выходам не прокатит. только трёхразрядный семисегментник сожрёт 11-ть ног проца

Игорь, скудноваты исходники ,ты хоть структурную схему накидай может чего умного посоветуем.

ИгорьTopic starter

#3
М16, семисегментник будет одноразрядный, с десятичной точкой, возьмет один порт целиком.
Пять входов, кнопка и три выхода... Блин, девять...  Подумаю, может сэкономлю один вход-выход.
Если так, получается что мне хватит процессор с двумя портами?

Кроме того, я не гордый, могу и дешифратор поставить - типа из жвачного двоичного кода в семисегментный - тогда индикатор съест максимум 4 ноги... Но не хочу - думаю не только цифры на нем отображать, но и какие-то мнемонические символы.

Цитата: m16 від 12-09-2011, 20:56:58ы хоть структурную схему накидай может чего умного посоветуем

Да я изначально заготовку проги начал писать ... как подобает сантехнику - вроде как на си, с заметным бейсиковским акцентом, с ввставками на русском :)
Потом постеснялся дремучего дилетантизма в зачаточной стадии и сократил сообщение.
Причешу - выложу.


Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

m16

#4
Цитата: Игорь від 12-09-2011, 21:30:41Если так, получается что мне хватит процессор с двумя портами?
начинал как то проектик  на тыньке 2313 , по прикидкам задуманное в неё влазило . и что ты думаешь ?  делал две миграции на мегу 48-ю  и мегу16-ю , новые мысли приходят во время воплощения ранее задуманного. лишних портов и лишней памяти  не бывает в творческом поиске.

Цитата: Игорь від 12-09-2011, 21:30:41Причешу - выложу.
схемку накидай в сплане , быстро и дёшево

вдогонку , ранее уже выкладывал , повторюсь
хорошая книга- Евстифеев А.В. - Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL. Электронное издание [2008, PDF]

диск от атмела с дайташитами и апнотами ,очень полезная информация ATMEL AVR/AVR32 Technical Library September 2011

хороший ресурс  http://www.gaw.ru/  по электронным компонентам


ИгорьTopic starter

#5
Вот такая предварительная схема.
За ночь покурил даташитов и смог более конкретно сформулировать задачу, с привязкой к возможностям контроллеров, поэтому скрытый текст можно не смотреть, а сразу перейти сюда.
Spoiler



[attach=1]
На уровне задумки.
Порт В полностью отдан семисегментнику.
Порт А, выводы 0,1,2 - выходы.
Выводы 3,4,5,6 - контакты реле внешних устройств.
Вывод 7 - кнопка на плате.

Пытаюсь сваять постановку задачи.

При появлении питания на индикаторе отображатся нестандартный символ (3 горизонтальных линии).
Переменным X и Y (целые положительные) присваиваются значения 5 и 0.
Переменным Z3, Z4 и Z5 (булевы) присваиваются значения "ложь".
Переменной Т (дробное положительное) пока ничего не присваивается
На выходах устанавливаются состояния:
А0=0, А1=0, А3=1, через секунду А3=0

Это состояние продолжается до тех пор, пока не будет нажата кнопка (А7)

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

Затем каждые 5 секунд выполняется одна и та-же функция.
Писать её словами будет долго и запутано. Попытаюсь написать в чем-то вроде бейсика со вставками и ремарками на русском. Думаю, тем, кто знаком с программированием, все будет ясно.
Не хочу пока писать на малознакомом мне СИ, ибо ошибок будет много, и за ними потеряется суть.  "Перевести" потом на другой язык наверное труда не составит.
Только не смейтесь.

sub work()
Метка Q.   Т = 5         // значение для поддержания периодичности. Метка - точка возврата.
   if a3 = 1 then        // если замкнуто реле, подключенное к А3,
      if  Z3 = false     // если это случилось впервые
          Z3 = true      // поставить галочку, чтобы запомнить факт замыкания
      else               // Если прошлый раз это реле уже было замкнуто
          Z3 = false     // очистить регистратор факта замыкания
         ostanov(3)      // выполнить подпрограмму "останов", передав ей значение "3"
      end if
   end if                // конец отработки состояния реле на А3
     
                         // абсолютно аналогичные действия при замыкании реле, подключенных к
                         // входам А4 и А5, только в подпрограмму "останов" передаются другие значения
                         // Поэтому комментарии опускаю.

   if a4 = 1 then        // если замкнуто реле, подключенное к А4
      if  Z4 = false         
          Z4 = true       
      else                   
          Z4 = false       
         ostanov(4)     
      end if
   end if                // конец отработки состояния реле на А4     

   if a5 = 1 then        // если замкнуто реле, подключенное к А5
      if  Z5 = false         
          Z5 = true       
      else                   
          Z5 = false       
         ostanov(5)     
      end if
   end if                // конец отработки состояния реле на А5

   if a6 = 1 then        // если замкнуто реле, подключенное к А6,
      Y = Y + 1          // Инкрементировать переменную Y.
      А1 = 1             // установить на выводе А1 "единицу"
      pause (Y * 0.01)   // выдержать паузу (в секундах)
      Т = Т - Y * 0.01   // Из длительности отнять длительность паузы
      А1 = 0             // установить на выводе А1 "ноль"

      if Y > 500         // Если Игрек превысил 500
         ostanov(6)      // выполнить подпрограмму "останов", передав ей значение "3"
      end if
   else                  // Если реле, подключенное к А6, разомкнуто
      А2 = 1             // установить на выводе А2 "единицу"
      pause (Х / 4)      // выдержать паузу (в секундах)
      Т = Т - Х / 4      // Из длительности отнять длительность паузы
      А1 = 0             // установить на выводе А2 "ноль"
   end if                // конец отработки состояния реле на А6     

   pause ( T )           // Пауза для поддержания периодичности 5 секунд

   goto Q                // Отправка на метку Q для повторения цикла.

end sub                  // конец цикла

sub OSTANOV (r)          // Подпрограмма (или процедура), выполняющая остановку
   А3 = 1                // установить на выводе А3 "единицу"
   pause (0.5)           // выдержать паузу 0,5 секунды
   А3 = 0                // установить на выводе А1 "ноль"

   if r=3 then portB= "10101001"      // Послать на индикатор
   if r=4 then portB= "????????"      // нестандартный символ
   if r=5 then portB= "????????"      // в зависимости от значения r.
   if r=6 then portB= "????????     " // РАЗБЕРУСЬ.

   exit                  // прерывание цикла опроса

end sub


При нажатии на кнопку, подключенную к входу А7, должно произойти прерывание цикла независимо от места выполнения программы.
Переменная ИКС должна инкрементироваться, а после значения 19 - обнулиться.
В порт В должно быть отправлено число, равное целой части от деления ИКС на ДВА. Если ИКС нечетное, децимальная точка должна гореть, если четное - нет.

В принципе, я мог бы прописать её обработку прямо из тела цикла, но тогда первого изменения надо будет ждать до 5 секунд, пока цикл дойдет до программной строки, опрашивающей вход А7.
Правда можно строку опроса А7 натолкать в теле одного цикла много раз, но если есть возможность красивого прерывания, лучше воспользоваться им.

Вроде всё.
[close]
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

ИгорьTopic starter

#6
Присмотрел два 20-выводных контроллера - ATtiny2313 и ATtiny26... Покурил даташиты, сравнивая их. Весьма полезное занятие!
Понял, что алгоритм, который писал ночью, совсем детский - он не использует и части возможностей периферии, заложенных в эти контроллеры. Да и сам принцип привязки периодичности опроса входов к тактированию управляемого устройства не отличается изяществом.

Начинаю заново.

В схеме 5 входов, которые могут подать на контроллер ноль или единицу - 4 от внешних устройств, один - управляющая кнопка.

4 внешних устройства передают схеме единицу в следующих случаях:
- первое - когда температура куба превышена;
- второе - когда температура продукта превышена;
- третье - когда сработал датчик потопа;
- четвертое - когда превышена температура в насадке.

Появление единицы на первых трех выходах должно запустить процедуру останова. Я сперва предусматривал программную задержку для исключения случайных срабатываний, но сейчас думаю, что проще реализовать её аппаратно, схемно, с помощью RC задержки входного сигнала.

Процедура останова предусматривает:
1. Полусекундное появление единицы на первом выходе (это реле, соединяющее нули УЗО, и вырубающее подачу питания 220 вольт на нагрев и клапан подачи воды);
2. Отображение на индикаторе нестандартного символа, мнемонически показывающего причину останова;
3. Прекращение циклического опроса входов;
4. Включение единицы на втором входе (непрерывного звукового сигнала.

Пока речь шла о первых трех входах.
Четвертый вход решает более сложную задачу.
Пока на нем ноль, на третьем выходе присутствует сигнал ШИМ частотой 0,2 герца с заранее заданной скважностью. Это управление клапаном отбора.
Изменение состояния четвертого входа с нуля на единицу выключает ШИМ на третьем выходе ( устанавливает третий выход в ноль - остановка отбора) и  включает 500-секундный таймер, по истечении которого должна быть вызвана процедура отстанова (см. выше).
Изменение состояния четвертого входа с единицы на ноль должно возобновить работу ШИМ отбора и обнулить 500-секундный таймер.

Во время активности 500-секундного таймера на выходе № 2 (звуковой сигнал) должен присутствовать непрерывно изменяемый ШИМ - сигнал, скважность (или периодичность) которого зависит от длительности работы таймера - чем долже работает таймер, тем навязчивее должен быть звук.

Я еще не описал задачу единственной управляющей кнопки, подключенной к пятому входу.
Задача этой кнопки - сброс режима останова и установка параметров ШИМ, управляющей отбором.

Если система находится в режиме останова, нажатие кнопки должно запустить ШИМ отбора и запустить циклический опрос пяти входов.

Если система находится в режиме циклического опроса, нажатие, кнопки должно увеличить на единичку переменную, задающую параметр ШИМ отбора. При достижени максимума, эта переменная должна обнулиться.

И последнее, что я упустил. При появлении питания схема должна запустить процедуру останова и заслать на индикатор символ, соответствующий ситуации "пропадание напряжения питания".

Теперь всё.

Позже добавлю блок-схему работы устройства.

Теперь вопрос изменяется.
Какой микроконтроллер лучше использовать для решения такой задачи - ATtiny26, ATtiny2313,  или какой-то другой?
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Borbos

Цитата: Игорь від 13-09-2011, 09:50:24- первое - когда температура куба превышена;
- второе - когда температура продукта превышена;

- четвертое - когда превышена температура в насадке.
То есть измерением и анализом температуры будет заниматься другая схема.Тогда теряется смысл в использовании контролера.

ɐwʎ ɔ vǝmоɔ dиw

ИгорьTopic starter

Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Borbos

Цитата: Игорь від 13-09-2011, 11:00:09
Прочти первое сообщение.
Да понятно что надо начинать с чего то простого.Но программка "подрыгать ножками" одинаковая и для ATtiny26 и для ATmega128.
[attach=1][attach=2]
ɐwʎ ɔ vǝmоɔ dиw

Бандерівець

#10
Я для себя определился, это ATMEGA32, почему она? Потому что стоит недорого не жалко спалить весь камень или вывод, в ней есть много выводов. Если сравнивать с ATMEGA16 то 32-я стоит на копейки дороже. Для того чтоб научится нужно пробывать с малого, берешь пишешь первую программу, например управление светодиодом, потом вывод на экран...

потом допишу иду пить

Borbos

Цитата: vovanxp від 13-09-2011, 14:28:08Я для себя определился, это ATMEGA32, почему она?
Я сделал такой же выбор.Поэтому и купил и собрал NM8036 и пару камней для экспериментов. Родное ПО набора уже можно применять в нашем деле,и в инете куча всевозможных примеров использования.

ɐwʎ ɔ vǝmоɔ dиw

ИгорьTopic starter

#12
Borbos, это не "подрыгать ножками", это реальная практическая задача.

У меня приобретены для двух универсальных блоков управления (перегонка и ректификация) регуляторы РМ-2 и четырехканальные терморегуляторы. Чтобы из набора запчастей из них получились готовые устройства, ля них нужно сделать блок безопасности и модуль управления отбором с какой-то индикацией.

Я собрал это на макетке. Три корпуса микросхем - спаренный таймер, счетверенный триггер и счетверенный операционник, куча рассыпухи, около десятка светодиодов, потенциометр, три тумблера... Заработало, но скучно.

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

Покупка готовой прошитой схемы не даст такого результата.
Віриш ти в Бога чи ні, йому байдуже.
Важливо, щоб Бог в тебе вірив, а не навпаки.

Бандерівець

#13
......
потом допишу иду пить
За программеров выпили.

Дальше
Реальная задачи начинаются с малого, хотя бы с того чтоб создать проект и подрыгать ногами на чем нибудь, дальше принять сигнал, дальше ... что-то  не получается, даже самое простое может забрать много времени , сново ставишь минимальную задачу, которая с временем меняется и в конце получаешь первый готовый проект, на который  через некоторое время стыдно будет посмотреть, но в плане опыта огромный рывок. IMXO.
Игорь, ту задачу которую ты перед собой поставил можно разбить на мелкие задачи и реализовывать их по порядку.

Цитата: Игорь від 13-09-2011, 09:50:24Я сперва предусматривал программную задержку для исключения случайных срабатываний, но сейчас думаю, что проще реализовать её аппаратно, схемно, с помощью RC задержки входного сигнала.
Я думаю что микроконтроллер должен делать практически все, а те радио детали что вокруг должны согласовывать сигналы. IMXO

Borbos

Цитата: Игорь від 13-09-2011, 16:20:23
Это моё.
Мне эта схема больше понравилась.
[attach=1]
ɐwʎ ɔ vǝmоɔ dиw

SMF spam blocked by CleanTalk