|
12 ATmega48 от одного тактового генератора (внешнего)., Можно ли провести 8 Мгц по всей плате? |
|
|
|
Nov 19 2008, 17:15
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Есть одна задача, требующая достаточно больших вычислений, но легко параллелящаяся на 12 потоков. Если можно установить 12 штук ATmega48 (или 88), работающих от одного внешнего тактового генератора, то задача очень красиво решается (питание процессоров 3В тактовая частота 8Мгц). Я понимаю, конечно, что можно использовать внутренние тактовые генераторы и их частоту подстраивать по внешнему сигналу. Но это не то. Частота совпадёт, но фаза будет отличатся, а необходимо именно совпадение фазы тактового сигнала. Вобщем получается, что нужно около 100мм печатного проводника с частотой 8 Мгц по плате провести. Можно ли как-нибудь такое сделать? Ну там параллельно с обоих сторон землю провести, или ещё как? И как там со всякими затуханиями? И нужен ли терминальный резистор? Я в этих вопросах полный профан.
|
|
|
|
|
Nov 19 2008, 18:41
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(_Pasha @ Nov 19 2008, 21:07)  Дорожки с 8 МГц можно до 150 мм вести, если вспомнить ПК "Специалист" и его клоны Синхронизм портится только по Power Up. А внешним ресетом его как раз и можно поднять. Имхо. А вот какой выход у генератора тактовой д.б.? Нужно ли там резистор 100 Ом ставить чтоб слегка фронты завалить? А на другой стороне этого провода нужно ли два резистора один на питание, другой на землю ставить? А для синхронизации там специальный сигнал будет. Он там есть уже, только в этом случае его через D-триггер пропустить придётся для синхронизации с тактовой частотой. А за 2 периода этого сигнала с точностью до такта засинхронизировать все процессоры не проблема. Цитата(slog @ Nov 19 2008, 21:21)  8MHz "детская" частота. Тяни не бойся. Драйвер должен обеспечить нагрузочную способность достаточную для 12 входов. Ну и земля должна быть хорошая от всех процов, да и согласовать на конце тактовую линию не помешает. "На всякий случай". А вот как эту линию согласовывать? У меня ведь не кабель, волновое сопротивление неизвестно. Хотя если и известно было-бы я всё равно в этом деле профан. Знаю только, что у RS485 и CAN на концах кабеля резисторы ставят, а вот у USB нет. Хотя вроде все кабели и сигналы в них у USB и RS485 аналогичны.
|
|
|
|
|
Nov 19 2008, 21:13
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(bzx @ Nov 19 2008, 23:16)  А почему бы не рассмотреть замену 12mcu на 1mcu с достаточной производительностью? Если посчитать стоимость этих 12mcu + стоимость их установки, то это в любом случае будет выгоднее использовать один камень, но более производительный. 12 штук ATmega48 - это менее чем $12. Причём там уже есть и ОЗУ, и FLASH для программ, и всё, что нужно для работы. Программируются они по 1 проводу, т.е. 12 двухконтактных разъёмов для программирования добавляется. Реальная замена всему этому - это АРМ, работающий из ОЗУ. Что-то типа AT91RM9200. Он один стоит в разы дороже, чем все эти меги, а к нему ешё и быстрое ОЗУ нужно, и FLASH, из которой он загружаться будет, и плата там 4х слойная получается. Да вроде и правило такое, что цена возрастает быстрее, чем производительность. Но вот только не все задачи так легко распараллеливаются как эта.
|
|
|
|
|
Nov 19 2008, 22:11
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(_Pasha @ Nov 20 2008, 00:33)  А цепочкой там проще не выйдет ? (clko -> clki) Думал я насчёт цепочки. Но вроде каждая мега задержку в тактовый сигнал вносить будет. И к последней тактовая со значительным сдвигом по фазе прийдёт. И вся синхронизация рушится. Цитата(_Pasha @ Nov 20 2008, 00:33)  Так, по-идее там достаточно только ТТЛ-выход и никаких терминаторов не надо. Но это было на макс. 4 ТТЛ входа... Надо подумать. Ну можно к одному ТТЛ-выходу ещё 3 ТТЛ-входа инверторов (или повторителей - неважно) подключить, а уже к каждому из их выходов по 4 процессора. Единственный момент, что питание там 3,3 вольта, но современная логика вроде хорошо от такого напряжения работает. Я вообще-то с логикой со времени синклеров дела не имел, всё как-то без неё удавалось обойтись. А терминаторы хоть и ставлю, но зачем - для меня загадка. P.S. Там ещё 13й процессор поставить придётся. Он будет обработанные данные у этих собирать, буферизировать и дальше отправлять. Какой нибудь с возможностью аппаратного подключения внешнего ОЗУ желательно. Даже ATmega64 подойдёт.
|
|
|
|
|
Nov 19 2008, 22:39
|

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Цитата(galjoen @ Nov 20 2008, 00:13)  12 штук ATmega48 - это менее чем $12. Если уж начали считать, то сюда надо добавить и стоимость работ по монтажу, ну и стоимость платы под этими mcu. Будем считать, что Вам повезло, и стоимость точки-пайки на автомате (подготовка к производству не учитывается) обходится в 16коп. Так же считаем, что Вы заложили самый маленький корпус - MLF28. Всего точек паек 28*12=336, тогда стоимость сборки 336*0.16=~54р. Размер корпуса MLF28 - 4 x 4 мм, зазор по установке между корпусами компонентов на pcb пусть 2.5 мм, тогда площадь платы под 12mcu 12*(4+2.5) *(4+2.5)=~500мм^2. Будем считать, что у Вас заказ в несколько десятков дм^2, тогда при данном заказе стоимость 1 дм^2 можно условно принять в 100р. Стоимость платы под 12mcu = 100*0.05=5р Итого затраты 54+5=59р и это минимум, скорее всего в Вашем случае будет в разы больше. Это ещё $2 к Вашим $12. Цитата(galjoen @ Nov 20 2008, 00:13)  Реальная замена всему этому - это АРМ, работающий из ОЗУ. Что-то типа AT91RM9200. На самом деле RM9200 уже староват, есть более удачные камни и с приличным быстродействием, и со встроенной flash. PS: чем больше в вычислительной связке mcu, тем больше геморроя будет и при запуске, и на серии. PS: По питанию 12mcu так же проиграют одному более шустрому камню
--------------------
Для связи email: info собака qbit.su
|
|
|
|
|
Nov 19 2008, 23:35
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(galjoen @ Nov 19 2008, 23:13)  12 штук ATmega48 - это менее чем $12. Причём там уже есть и ОЗУ, и FLASH для программ, и всё, что нужно для работы. Программируются они по 1 проводу, т.е. 12 двухконтактных разъёмов для программирования добавляется. Реальная замена всему этому - это АРМ, работающий из ОЗУ. Что-то типа AT91RM9200. С чего вы взяли что именно этот АРМ?  Реальная замена всей вашей требухи из 12-ти M48 @8Mhz - это LPC2101(2KB sram/8KB flash)@72Mhz который стоит 2$. Цитата P.S. Там ещё 13й процессор поставить придётся. Он будет обработанные данные у этих собирать, буферизировать и дальше отправлять. Какой нибудь с возможностью аппаратного подключения внешнего ОЗУ желательно. Даже ATmega64 подойдёт. Решили науку двигать?  Научитесь вначале делать обзор существующего. Берем LPC2106 - гонится до 110Mhz, ОЗУ 64KB, Flash 128KB, корпус 48ног, стоит ~7$ потенят всю вашу задачу как пить дать.
|
|
|
|
|
Nov 21 2008, 11:34
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(_Pasha @ Nov 21 2008, 14:15)  Зачем переключать контексты если можно все данные свести к массивам, а дерево алгоритма потока - к switch(state[task_num]) ? Но в таком случае невозможно будет СРОЧНО перейти от обработки одной задачи к другой (по прерыванию или опросу флага). Придётся заканчивать обработку текущей задачи, всё сохранять в массивы, и уже затем переходить к следующей. Или я что-то не понимаю?
|
|
|
|
|
Nov 21 2008, 11:54
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(galjoen @ Nov 21 2008, 15:34)  Придётся заканчивать обработку текущей задачи, всё сохранять в массивы, и уже затем переходить к следующей. Или я что-то не понимаю? Простейшая организация задачи: Код uint8_t task(uint8_t tasknum) { /* подразумевает, что Вы обращаетесь с данными, описанными в виде static массивов в любой момент можете нас.ать на плохое отношение к goto и при желании выйти из задачи написать goto exit_task */ exit_task: return 0; // возвращаемое значение может показывать какой-нить статус задачи } Т.е контекст не переключается вовсе. И текущая задача может прерваться в заранее известных местах, не прерывая атомарных операций.Но это в простом случае. Сложнее - никто не мешает "навернуть" эту конструкцию без использования оси. В общем -кооперативная многозадачность.
|
|
|
|
|
Nov 21 2008, 12:27
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(_Pasha @ Nov 21 2008, 14:54)  И текущая задача может прерваться в заранее известных местах, не прерывая атомарных операций. Да, именно это я имел ввиду, но расстояние между такими местами (в тактах) может оказаться недопустимо большим. Или, к примеру, чтобы его уменьшить придётся идти на усложнение кода - скажем не просто на выход идти, а на "специальный выход именно из этого места". А ещё я обычно запоминаю точку (её адрес) в которой данная задача была прервана. Но код, при такой манере программирования, сложно изменять становится. Хотя, если посмотреть, то у меня во всех проектах именно так и сделано (по подобной схеме и без оси).
|
|
|
|
|
Nov 21 2008, 13:04
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(_Pasha @ Nov 21 2008, 15:46)  К сожалению, кооперативные многозадачки на асме выглядят намного прямее, короче и читабельнее. А почему к сожалению? Цитата(_Pasha @ Nov 21 2008, 15:46)  Такшта, может на ARM asm ? Да, другой дороги видимо нет.
|
|
|
|
|
Nov 21 2008, 13:20
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(galjoen @ Nov 19 2008, 17:15)  ...нужно около 100мм печатного проводника с частотой 8 Мгц по плате провести Посчитаем: 10 см дают задержку импульса где-то на 30 нс, для вашего 125 нс такта это где-то 25%. Если вам так важна полная фазировка, надо принимать соотв. меры. Можно, например, уменьшить размер проводника 8 МГц, разместив генератор в середину платы, а по четырём сторонам вокруг него расположить по 3 МК. Ну или сделать отдельные линии для каждого МК и выровнять все пути от генератора до всех МК, чтобы задержки были одинаковыми. В начале и конце каждой линии поставить по инвертору. Цитата(galjoen @ Nov 19 2008, 18:41)  А для синхронизации там специальный сигнал будет. Он там есть уже, только в этом случае его через D-триггер пропустить придётся для синхронизации с тактовой частотой Не понимаю вашей идеи, зачем нужен триггер? Все 12 МК можно засинхронизировать по одному проводу безо всяких триггеров с точностью до перехода 0-1.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 21 2008, 13:48
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(=GM= @ Nov 21 2008, 16:20)  Посчитаем: 10 см дают задержку импульса где-то на 30 нс, для вашего 125 нс такта это где-то 25%. Если вам так важна полная фазировка, надо принимать соотв. меры. Можно, например, уменьшить размер проводника 8 МГц, разместив генератор в середину платы, а по четырём сторонам вокруг него расположить по 3 МК. Ну или сделать отдельные линии для каждого МК и выровнять все пути от генератора до всех МК, чтобы задержки были одинаковыми. В начале и конце каждой линии поставить по инвертору. Петли, как на материнских платах, я разведу. Спасибо за совет. Но инверторы зачем? Да ещё по два. Цитата(=GM= @ Nov 21 2008, 16:20)  Не понимаю вашей идеи, зачем нужен триггер? Все 12 МК можно засинхронизировать по одному проводу безо всяких триггеров с точностью до перехода 0-1. Да они и будут синхронизироваться по одному проводу с точностью до такта (за два фронта синхросигнала). По первому фронту с точностью в 2 такта, и по второму уточнятся до такта. А триггер для того, чтобы сигнал синхронизации засинхронизировать с тактовым сигналом (изначально они не синхронны). Если так не делать, то фронт синхросигнала может попасть на границу тактов, и из-за небольшой разницы в фазах по процессорам, которая всётаки будет, один процессор может воспринять его в одном такте, а другой в другом.
|
|
|
|
|
Nov 21 2008, 15:55
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(galjoen @ Nov 21 2008, 13:48)  Но инверторы зачем? Да ещё по два Можно и без них, зависит от ваших требований к рассогласованию по фазе, скажем, 10 нс и 0.1 нс немного разные вещи. Инверторы развяжут и согласуют, согласитесь, одну линию легче проконтролировать, чем пучёк из 12. Ну поставьте 12 инверторов в начале, если будет всё нормально, кинете перемычку. Цитата(galjoen @ Nov 21 2008, 13:48)  Да они и будут синхронизироваться по одному проводу с точностью до такта (за два фронта синхросигнала). По первому фронту с точностью в 2 такта, и по второму уточнятся до такта. А триггер для того, чтобы сигнал синхронизации засинхронизировать с тактовым сигналом (изначально они не синхронны). Если так не делать, то фронт синхросигнала может попасть на границу тактов, и из-за небольшой разницы в фазах по процессорам, которая всё-таки будет, один процессор может воспринять его в одном такте, а другой в другом Всё равно не понимаю. Если будет разница в фазах, то триггер вам не поможет. Вообще похоже, мы о разных вещах говорим. Когда я говорю засинхронизировать микроконтроллеры, я подразумеваю, что одинаковая программа будет выполняться на всех МК такт в такт.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 21 2008, 16:20
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(=GM= @ Nov 21 2008, 18:55)  Всё равно не понимаю. Если будет разница в фазах, то триггер вам не поможет.
Вообще похоже, мы о разных вещах говорим. Когда я говорю засинхронизировать микроконтроллеры, я подразумеваю, что одинаковая программа будет выполняться на всех МК такт в такт. Да, именно так. Во всех процессорах программа в один и тот-же такт должна начинаться и заканчиваться. Момент этого самого начала определяется по специальному сигналу синхронизации. Но этот сигнал внешний, и с тактовым генератором не связан. Поэтому его фронт может по периоду тактовой частоты гулять. Это может привести к рассинхронизации процессоров на 1 такт. А D-триггер обеспечит одновременность фронтов у тактового сигнала процессоров, и сигнала синхронизации этих процессоров. На вход данных D-триггера подаём внешний синхросигнал, на вход C - тактовый сигнал, и с выхода получаем, засинхронизированный по тактовому сигналу, внешний синхросигнал.
|
|
|
|
|
Nov 21 2008, 20:31
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(galjoen @ Nov 21 2008, 20:20)  ...Да, именно так. Во всех процессорах программа в один и тот-же такт должна начинаться и заканчиваться. ... Начинаться в один такт она сможет, а вот заканчиваться - большой вопрос. Данные поступают разные, в какой-то AVR команда, к примеру BREQ, выполнится при 0, а в другой AVR нет. Число тактов получится разное, процесс рассинхронизируется. Или у вас строго линейный алгоритм (как в первых DSP)?
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Nov 21 2008, 23:00
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
2=GM= Начать выполнение программы одновременно не так просто. Даже если 2 процессора только тем и занимаются, что фронт внешнего сигнала ловят, то тут как ни крути точность в 2 такта получится. Т.к. никоим образом програмно считывать и анализировать состояние порта чаще чем 1 раз за 2 такта не получится. Но за 2 раза вполне можно с точностью в такт уложится. Тут мог-бы вход захвата таймера помочь, но я пока на железке не проверял, а описаниям не доверяю, как-то туманно в них всё написано. Цитата(Nanobyte @ Nov 21 2008, 23:31)  Или у вас строго линейный алгоритм (как в первых DSP)? Нет. Я таймер запущу.
|
|
|
|
|
Nov 21 2008, 23:23
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(galjoen @ Nov 19 2008, 20:15)  Есть одна задача, требующая достаточно больших вычислений, но легко параллелящаяся на 12 потоков. Если можно установить 12 штук ATmega48 (или 88), работающих от одного внешнего тактового генератора, то задача очень красиво решается (питание процессоров 3В тактовая частота 8Мгц)... Жесть! Прошу прощенья за ремарку. Присоединюсь к предложению поставить более мощный контроллер. Выиграете во всех без исключения смыслах. Я бы, правда, порекомендовал DSP. По теме (хотя здесь это и не совсем к месту). На выход генератора обязательно нужно ставить буфер. Проще всего взять 6-гейтовый буферный инвертор типа 74AC04. Расположить рядом с генератором. К каждому выходу буфера подключить два тактовых входа. Провода желательно тянуть от буфера отдельно для каждого из входов. Собственно, согласование при такой длине проводников не играет особой роли. Однако, на каждую трассу следует поставить последовательный резистор 50-100 Ом для уменьшения добротности резонирующей цепи, обусловленной индуктивностью дорожки и ёмкостью входа приёмника. Резисторы располагать в непосредственной близости от выводов буфера. Усё.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Nov 22 2008, 03:34
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(=GM= @ Nov 21 2008, 21:20)  Посчитаем: 10 см дают задержку импульса где-то на 30 нс ... 10 см это 0.33 нс, что для 125 нс (8МГц) не существенно.
|
|
|
|
|
Nov 22 2008, 08:25
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(galjoen @ Nov 22 2008, 03:00)  2=GM= Начать выполнение программы одновременно не так просто. Я Вас умоляю! Берете Int0 - на него вешаете "готовность номер 1" Int1 - собственно синхронизация, и его надо подать в течение времени не более, скажем 1 мкс, иначе все опять придет в начальное состояние. Код .org 0 rjmp start rjmp int0_isr rjmp int1_isr ;.......... start: ; config SFR
forever: wdr rjmp forever int0_isr: sei nop nop ; натыкать нопов столько сколько надо чтобы гарантированно отработалась точная синхронизация rjmp forever; кто не успел-тот опоздал int1_isr: sei ; начало Вашей суперзадачи Где-то так
|
|
|
|
|
Nov 22 2008, 21:32
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Stanislav @ Nov 22 2008, 02:23)  На выход генератора обязательно нужно ставить буфер. Проще всего взять 6-гейтовый буферный инвертор типа 74AC04. Расположить рядом с генератором. Я примерно в таком духе и планировал сделать, на 74AC04. На двух из шести его инверторов генератор сделать, а остальные как буфера использовать. Т.е. к каждому из буферов через резистор по 3 тактовых входа подключить. Вот только к каждой меге свой провод тянуть проблематично. Думал может там (около входа меги), вместо этого, тоже резистор 50..100 Ом поставить для исключения взаимовлияния? Цитата(_Pasha @ Nov 22 2008, 11:25)  Я Вас умоляю! Берете Int0 - на него вешаете "готовность номер 1" Int1 - собственно синхронизация, и его надо подать в течение времени не более, скажем 1 мкс, иначе все опять придет в начальное состояние. В качестве "готовности N1" и собственно синхронизации можно один сигнал использовать. Нулевой уровень которого будет готовностью N1, а переход 0-1 собственно синхронизацией. Завести его на int0 и прерывания по 0му уровню разрешить. А в самом прерывании переинициализировать прерывание int0 на срабатывание по переходу 0-1, ну и цепочка nop-ов. Ну ещё там, в прерывании, придётся смотреть как оно сейчас проинициализировано (от чего произошло), ну и стек там подправить (как впрочем и в вашем случае). Но всётаки способ со входом захвата таймера лучше. Если получится конечно. А судя по описанию получится должно. Но попробовать надо. А вообще я конечно понимаю, что на одном процессоре это легче сделать. И всю эту тему поднял только для того, чтобы все варианты рассмотреть. Но сейчас как-то втянулся. Думаю так: ну сделаю я всё это на каком-нибудь АРМе, ну будет ещё одно устройство, каких много. А вот если на 12 мегах сделать - это будет круто! Какой ещё дурак до такого додуматься сможет? Когда ещё такая задача подвернётся? М.б. и никогда... А проигрыш в $5 и 10 кв. см платы - это ерунда. Таких девайсов точно много не будет. Десятки, ну м.б. несколько сотен. Ну вобщем взвешиваю все за и против...
|
|
|
|
|
Nov 23 2008, 07:43
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(galjoen @ Nov 23 2008, 01:32)  В качестве "готовности N1" и собственно синхронизации можно один сигнал использовать. Нулевой уровень которого будет готовностью N1, а переход 0-1 собственно синхронизацией. Завести его на int0 и прерывания по 0му уровню разрешить. А в самом прерывании переинициализировать прерывание int0 на срабатывание по переходу 0-1, ну и цепочка nop-ов. Стоп-стоп! На кой ему тогда переход в "готовность 1" делать по прерыванию ? Просто поллинг пина, затем переход к нопам. И стек не обеднеет оттого что у него съели 2 байта. Попутно замечу, что по сбросу можно делать тестирование МК и выдавать сигнал "тест ок" Цитата А вот если на 12 мегах сделать - это будет круто! Лично я не знаю, как там крутизна, но если посмотреть на групповые абонкомплекты цифровых АТС - количество микрух пугать не должно.
|
|
|
|
|
Nov 23 2008, 19:14
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(_Pasha @ Nov 23 2008, 10:43)  Стоп-стоп! На кой ему тогда переход в "готовность 1" делать по прерыванию ? Просто поллинг пина, затем переход к нопам. Если сделать по прерыванию, то можно фоновые задачи в свободное время запускать. Цитата(_Pasha @ Nov 23 2008, 10:43)  И стек не обеднеет оттого что у него съели 2 байта. Ну это только первые несколько раз. А такие синхронизации около 100 раз в секунду проходить будут. Задача, в основном, состоит в том, чтобы от 12 аналоговых, гальванически развязанных, сигналов всякие там среднеквадратические вычислять + на табличные значения помножать и перерабатывать + передавать результаты. Так-то требования небольшие, но это всё строго синхронно делать надо. Я хотел 2 сшестерённых сигма-дельта АЦП использовать (аналог девайс), но оказывается нельзя - гальваноразвязка. Вот и думаю, пусть каждая из мег со своим гальваноразвязанным АЦП работает. В идеале и АЦП на меге-бы сделать, но скорости-разрядности не хватает. А м.б. ко мне уже в цифровом виде эти сигналы прийдут - сейчас решается.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|