Перейти к содержанию
    

Crystaly

Участник
  • Постов

    20
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Crystaly

  • Звание
    Участник
    Участник

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Правильно! Почему-то думают что 20МГц полоса это все, тупик, дальше сигнал не проходит... это ведь полоса на уровне -3дБ (или 0,707 от макс) и реально АЧХ простирается гораздо дальше что приводит к скруглению фронтов импульса но никак уж не к синусоиде.
  2. Я нашел реальный глюк, причем он есть как в PCAD2004 так и в PCAD2006. Смысл в следующем. В утилите Pattern Editor создаются несколько Pattern Graphics. Но в них используются разные типы контактных площадок. Если теперь в одном Pattern Graphics войти в Options/Pad Style и выполнить Purge Unused Styles то типы площадок используемые на другом Pattern Graphics убьются. Если теперь перейти Next(Previous) Pattern Graphics то возникает фатальная ошибка и приложение закрывается.
  3. USB programmer AVR910

    А компоненты как паять? Они все в слое TOP расположены ну для SMD понятно, а для штыревых? Или штыревые с обратной стороны устанавливаются, вроде бы без разницы будет кроме USB-разъема...
  4. Спасибо за разъяснения. 5 слоев заказчик хотел, сейчас уже на 6 согласен. Vic спасибо за ссылку.
  5. Появилась необходимость развести 5-слойную ПП. А какие особенности я не знаю, до этого тголько 2-слойные разводил. Работаю в PCAD2002. Какие особенности, а именно: 1. Переходные отверстия должны быть сквозными через всю плату или могут быть только между нужными слоями?. А в других слоях в этом месте могут идти проводники? Если отверстие соединяет только слои 1 и 3, а между ними слой 2, то в слое 2 только отверстие без площадки? И если могут быть не только сквозные отверстия, то что - надо в ПИКАДе создать все возможные типы переходных отверстий - все возможные варианты соединения слоев, например для 4-слойной это будет 11 типов отверстий! (1-2, 1-3, 1-4, 2-3, 2-4, 3-4, 1-2-3, 1-2-4, 1-3-4, 2-3-4, 1-2-3-4) и при разводке выбирать конкретный тип когда надо перейти на другой слой? То есть плата сверлится насквозь когда все слои склеены или нет? 2. Подсоединение монтажных отверстий к внутренней заливке - там на заливке должны быть термальные мостики? 3. Для переходных отверстий на внутреннюю заливку мостики не нужны? Буду признателен за любые разъяснения.
  6. Ладненько, что-нибудь придумаем. В любом случае спасибо.
  7. Да, решение есть всё достаточно просто. Работаю с AVR. Питание от управляемого стабилизатора, например от AD. Плюс идёт на кнопку, от кнопки на резистор и на диод, с резистора на пин МК который работает на вход без внутренней подтяжки, от пина на другой резистор (получается делитель на пин через кнопку) и на землю. Диод катодом соединён с управляющим выводом стабилизатора. И ещё один диод аналогично подключённый к стабилизатору соединён со вторым пином МК включённым на выход. При нажатии на кнопку стабилизатор и вся схема включается, программа анализирует вход и через установленное время подаёт единицу на управляющий вывод стабилизатора, тем самым заменяя нажатие на кнопку. Выключение идёт обратным порядком. У программы четыре состояний: включение, включено, выключение, выключено. Вроде всё. Спасибо, буду разбираться :)
  8. Oleg_IT Уважаемый, нашлось ли решение? Поделись плиззз!!! У меня такая же проблема!
  9. Схема с батарейным питанием, имеется микроконтроллер. Видимо должен быть ключ по питанию, который изначально закрыт (схема обесточена) и открывается кнопкой включения. Микроконтроллер запускается и выдает сигнал, который поддерживает ключ во включенном состоянии при отпускании кнопки. По истечении заданного времени контроллер сигнал снимает и схема выключается. Может кто знает такую схемку, чтобы управлять питанием, напряжение 1..3В (два элемента АА), ток нагрузки порядка 100мА и чтобы падение на ключе было минимальным и ток упраления ключа минимальный - надо экономить питание. Есть рабочий вариант на биполярном транзисторе - но большое падение и много тока по базе жрет. Есть задумка с маломощными оптореле, но много тока жрут по управлению (несколько миллиампер). Может быть какой-нибудь транзистор-полевик? Киньте кто-нибудь схемкой. Есть ведь такие в калькуляторах или в мобильниках (отключаются при разряде аккумулятора).
  10. В общем правильно говоришь. Но эти промежуточные состояния - лишние. Пример автомата-светофора: Состояния автомата: R_STATE - горит красный 20 секунд RY_STATE - горят красный и желтый 5 секунд G_STATE - горит зеленый 20 секунд GY_STATE - горит зеленый и желтый 5 секунд Где-то в программе описаны временнЫе константы RG_TIME = 20секунд Y_TIME = 5секунд Описания состояний: R_STATE: Включить красный, выключить желтый и зеленый. NEXT_STATE_CDELAY RY_STATE,RG_TIME ;Перейти на состояние RY_STATE через 20сек Возврат RY_STATE: Включить красный и желтый, выключить зеленый. NEXT_STATE_CDELAY G_STATE,Y_TIME ;Перейти на состояние G_STATE через 5сек Возврат G_STATE: Включить зеленый, выключить желтый и красный. NEXT_STATE_CDELAY GY_STATE,RG_TIME ;Перейти на состояние GY_STATE через 20сек Возврат GY_STATE: Включить зеленый и желтый, выключить красный. NEXT_STATE_CDELAY R_STATE,Y_TIME ;Перейти на состояние R_STATE через 5сек Возврат Другой пример: Автомат из одного состояния. Например, надо опрашивать датчик каждые 20мс, тогда единственное состояние выглядит так (граф из одного состояния с петлей): SENSOR_STATE: Опросить датчик Обработать результат REPEAT_STATE TIME20MS ;Повторить состояние через 20мс Возврат Здесь еще один макрос о котором я не упомянул - ПОВТОРИТЬ_ТО_ЖЕ_СОСТОЯНИЕ_С_ЗАДЕРЖКОЙ Последний пример: Пример, который совсем не увязывается с автоматными принципами, но тем не менее эффективно работает. Например, надо включить закрывание заслонки. Если через 2сек не закроется, то выполнить аварийную ситуацию. В этом случае имеем два автомата - один закрывает заслонку, второй аварийный (состоит из одного состояния): 1. Определяю автоматы (в памяти данных) ZASLONKA_AUTOMATON: ... ALARM_AUTOMATON: ... 2. Инициализирую автоматы (в самом начале программы до разрешения прерывания) Здесь автоматы инициализируются, но не работают - отдыхают пока (выполняют холостое СТОП_СОСТОЯНИЕ, состоящее из одного возврата) STOP_AUTOMATON ZASLONKA_AUTOMATON STOP_AUTOMATON ALARM_AUTOMATON 4. Где-то в программе включаем заслонку START_AUTOMATON ZASLONKA_AUTOMATON,ONZASLONKA_STATE 4. Описываю состояния автоматов (подпрограммы) ONZASLONKA_STATE: Включить заслонку START_AUTOMATON_CDELAY ALARM_AUTOMATON,ALARM_STATE,TIME2S ;Запустить аварийный автомат через 2сек NEXT_STATE WAITZASLONKA_STATE ;Перейти на ожидание закрывания заслонки Возврат WAITZASLONKA_STATE: Заслонка закрылась? НЕТ - возврат (ждать дальше) STOP_AUTOMATON ALARM_AUTOMATON ;ДА - остановить аварийный автомат NEXT_STATE STOP_STATE ;Остановиться Возврат ALARM_STATE: STOP_AUTOMATON ZASLONKA_AUTOMATON ;Остановить автомат закрывания заслонки Выполнить действия при аварии NEXT_STATE STOP_STATE ;Остановиться Возврат В приведенном примере два автомата управляют друг другом. То есть автоматы не независимы, не изолированы. Но это не есть плохо! Это очень логично. Пример из реальной жизни: Я ложусь спать - завожу будильник. Если сам не проснулся - будильник будит меня. Если я сам проснулся - выключаю будильник, чтобы никого больше не разбудил. По поводу в каком состоянии находится автомат во время задержки - он находится в неком промежуточном состоянии, в котором считает время через свой собственный таймер. В общем-то так все и есть. Макрос (он же сервис) "перейти с задержкой" запускает таймер. Затем скрытое состояние считает этот таймер и при окончании счета запускается состояние, заданное тем же "перейти с задержкой". Насчет ув.Шалыто - все у него хорошо, но слишком уж строго-формально.
  11. Дело не просто в опросе готовности. Дело в том, что не надо ждать вхолостую готовность. Вы в программе фактически просто отправляете данные в EEPROM без ожидания готовности со скоростью программы хоть тридцать байт друг за дружкой без всяких ожиданий. А они уже "сами без вашего участия" своим чередом со скоростью EEPROM улетят. Если не устраивает куча (нельзя вдруг нарушать последовательность записи) - можно добавить еще один указатель и сделать полноценный буфер-очередь.
  12. Я пишу на ассемблере, но дело не в этом. Я когда-то тоже писал в EEPROM несколько байт подряд, ждал предыдущей записи. Когда байтов было 2 - все ОК. Но когда стало 4 - не работало. Я долго парился пока не обнаружил, что просто повторно срабатывает прерывание (запись шла внутри прерывания) - слишком долго это все. Короче я сделал такую вещь - небольшая структура типа буфера, похожая на стек (но не совсем стек, скорее куча), состоит из тела, указателя, размера. Тело - содержит пакеты из трех байт, два байта адрес и один байт данные, размер тела = 3*N байт, где N-размер тела в пакетах; Указатель - 2 байта, содержат адрес вершины кучи; Размер - 1 байт, содержит количество положенных пакетов в кучу. Если =0 - куча пустая. Подпрограммы такие: ПОЛОЖИТЬ_В_КУЧУ и ОБСЛУЖИТЬ_КУЧУ. В начале программы кучу инициализировать - указатель на начало тела, размер=0. ПОЛОЖИТЬ_В_КУЧУ вызывается в любом месте программы, где надо записать в EEPROM очередное число. Берет адрес, данные, ложит в кучу по указателю, передвигает указатель на 3, увеличивает размер на 1. На время работы с кучей запретить прерывания. ОБСЛУЖИТЬ_КУЧУ вызывается сравнительно редко по прерыванию, проверяет размер кучи если =0 ничего не делает, иначе проверяет завершилась ли предыдущая запись в EEPROM, если нет - ничего не делает, если да - берет из кучи по указателю данные, адрес, направляет в регистры EEPROM, запускает запись, передвигает указатель на 3 обратно, уменьшает размер на 1. Все. Вот такая штука значительно облегчила мне жизнь :)
  13. С чего начать знакомство с новым зверем?
  14. Желание обсудить имеется, т.к. может в будущем и у меня будет что-то подобное. Задача следующая. Имеется группа устройств, которая состоит из одного ведущего и трех подчиненных. Далее для краткости ведущее устройство будет называться "папа", подчиненное устройство "сынок" :) Папа общается с каждым сынком. Сынки друг с другом не общаются. Расстояние между устройствами в группе порядка 10м. Радиосигнал - частотная манипуляция. То есть сигнал может принимать два значения частоты. На данный момент группа одна, но таких независимых групп в некоторой близости (в одном помещении) может работать несколько одновременно. В связи с тем, что необходимо чтобы устройства не бодались друг с другом, как-то разделять использование радиоканала. Существует ли кодовое разделение для ЧМ (повторюсь - не Модуляция а Манипуляция) типа Уолша, ШПС или подобное? Или это только для АМ? Для меня пока ясно такое решение - в группе разделение по времени (режим полудуплексный - каждое устройство(хоть папа, хоть сынок) в каждый момент времени или принимает или передает), а между группами частотное, чтобы группы на разных частотах работали. Но можно ли чтобы все группы работали на одной частоте и не мешали друг другу? Теперь вот еще что. Все сынки - это автономные устройства с батарейным питанием. С целью снижения энергопотребления они бОльшую часть времени отключены, периодически выходя на связь на короткое время. Папа на связи всегда (подключен к розетке :) ) Хотелось бы чтобы внешне работа выглядела так. Имеется несколько пап и несколько сынков. Все они изначально одинаковы, то есть производство одинаковое - конструкция, схемы, программы. Каждый папа и каждый сынок имеет свой уникальный индивидуальный номер - задается любым способом после изготовления: прошивкой программы, перемычками на плате, с внешней клавиатуры(для папы), через внешний разъем(для сынка - с компьютера или терминала) или еще как нибудь. Далее - берутся конкретные сынки и конкретный папа, ему назначаются номера сынков с которыми он будет работатью Когда включается папа и начинает опрашивать эфир в поисках своих сынков типа так: - я папа № такой-то, сын мой № такой-то ты здесь? далее слушает ответ. - я папа № такой-то, сын мой № такой-то ты здесь? далее слушает ответ. - я папа № такой-то, сын мой № такой-то ты здесь? далее слушает ответ. далее цикл опроса сынков повторяется. Цикл опроса одного сынка составляет Тп (период папы). Полный цикл опроса всех трех сынков составлят 3Тп. Пока нет ответа от сынка, папа выдает сообщение "сынок № такой-то не отвечает" Получив ответ от сынка, папа выдает сообщение "сынок № такой-то на связи". Когда включается сынок, периодически (с периодом Тс - период сынка) выходит на связь на время бОльшее 3Тп и слушает - не зовет ли его какой-нибудь папа? Услышав зов от папы № такого-то, запоминает номер своего папы и отвечает "папа № такой-то, это я, твой сынок № такой-то". Если группы работают на разных частотах, то каждый сынок может просматривать все возможные частоты (каналы) и слушать - не зовет ли где-нибудь его папа? Услышав зов, запоминает рабочий канал и дальше слушает только его. Если после последнего сеанса связи с папой через некоторое время папа пропадает, начинается снова сканирование каналов. Далее после установления связи со всеми сынками папа так же периодически опрашивает сынков, передавая приказы: - я папа № такой-то, сын мой № такой-то, приказ такой-то, понял? далее слушает ответ. - я папа № такой-то, сын мой № такой-то, приказ такой-то, понял? далее слушает ответ. - я папа № такой-то, сын мой № такой-то, приказ такой-то, понял? далее слушает ответ. Получив ответ от сынка о том, что приказ понял, начинает ждать исполнение приказа: - я папа № такой-то, сын мой № такой-то, тебе есть что мне сказать? далее слушает ответ. Если ответ получен, отвечает что ответ получен. Далее все повторяется. Важно, чтобы период общения с каждым сынком был постоянным. Если возникает ситуация, требующая скорейшей реакции (например авария), то не дожидаясь окончания времени Тс на первый же запрос от своего папы сынок отвечает и сообщает об этом. Теперь - если групп может быть несколько на одной частоте(хотя я думаю что это сложно), то при включении папа сначала слушает эфир и смотрит - сколько пап кричат, запоминает их количество и номера. Чтобы присоединиться к ним, он должен дождаться запроса типа "новенькие есть?" ответить что "я тут", сообщить свой номер. У меня была задумка чтобы право использования канала передавалось от группы к группе, то есть временно'е разделение. Но может возникнуть ситуация, когда одна группа (например в центре зала) видит две другие (расположенные по разные стороны зала), а эти две друг друга не видят (далеко друг от друга). И эта идея не подходит. И еще. Для DP-1203 надо хотя бы 1 перепад на каждые 8 бит. Я делал так - каждый передаваемый байт я разбивал на две тетрады, из каждой тетрады и ее инверсии делал новый байт. Таким образом при любых исходных байтах (хоть все нули или единицы) получались перепады. Кроме этого дублирование информации - при приеме контроль ошибок. Правда размер данных увеличивается вдвое. Паттерн тоже использовал, только проверял его программно. То есть у меня цепочка регистров, через которые я гоню принятый сигнал. Регистры в начале цепочки (куда вталкивается очередной принятый бит) сравниваются с паттерном, при совпадении - в остальной части цепочки уже принятый пакет. Так в общем устроены все аппаратные устройства обработки. И вообще для таких целей лучше ПЛИСину использовать(в будущем наверно так и буду делать). Быстродействие резко возрастает, возможность аппаратной коррекции ошибок (кодирование-декодирование). Правда дороже получается чем на одном микроконтроллере.
×
×
  • Создать...