реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> 12 ATmega48 от одного тактового генератора (внешнего)., Можно ли провести 8 Мгц по всей плате?
galjoen
сообщение Nov 21 2008, 11:34
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(_Pasha @ Nov 21 2008, 14:15) *
Зачем переключать контексты если можно все данные свести к массивам, а дерево алгоритма потока - к switch(state[task_num]) ?

Но в таком случае невозможно будет СРОЧНО перейти от обработки одной задачи к другой (по прерыванию или опросу флага). Придётся заканчивать обработку текущей задачи, всё сохранять в массивы, и уже затем переходить к следующей.
Или я что-то не понимаю?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 21 2008, 11:54
Сообщение #17


;
******

Группа: Участник
Сообщений: 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; // возвращаемое значение может показывать какой-нить статус задачи
}

Т.е контекст не переключается вовсе. И текущая задача может прерваться в заранее известных местах, не прерывая атомарных операций.Но это в простом случае.
Сложнее - никто не мешает "навернуть" эту конструкцию без использования оси.
В общем -кооперативная многозадачность.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Nov 21 2008, 12:27
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(_Pasha @ Nov 21 2008, 14:54) *
И текущая задача может прерваться в заранее известных местах, не прерывая атомарных операций.

Да, именно это я имел ввиду, но расстояние между такими местами (в тактах) может оказаться недопустимо большим. Или, к примеру, чтобы его уменьшить придётся идти на усложнение кода - скажем не просто на выход идти, а на "специальный выход именно из этого места". А ещё я обычно запоминаю точку (её адрес) в которой данная задача была прервана. Но код, при такой манере программирования, сложно изменять становится.
Хотя, если посмотреть, то у меня во всех проектах именно так и сделано (по подобной схеме и без оси).
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 21 2008, 12:46
Сообщение #19


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(galjoen @ Nov 21 2008, 16:27) *
Да, именно это я имел ввиду

К сожалению, кооперативные многозадачки на асме выглядят намного прямее, короче и читабельнее.
Такшта, может на ARM asm ?
Go to the top of the page
 
+Quote Post
galjoen
сообщение Nov 21 2008, 13:04
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(_Pasha @ Nov 21 2008, 15:46) *
К сожалению, кооперативные многозадачки на асме выглядят намного прямее, короче и читабельнее.

А почему к сожалению?
Цитата(_Pasha @ Nov 21 2008, 15:46) *
Такшта, может на ARM asm ?

Да, другой дороги видимо нет.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 21 2008, 13:20
Сообщение #21


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.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
galjoen
сообщение Nov 21 2008, 13:48
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 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 такта, и по второму уточнятся до такта. А триггер для того, чтобы сигнал синхронизации засинхронизировать с тактовым сигналом (изначально они не синхронны). Если так не делать, то фронт синхросигнала может попасть на границу тактов, и из-за небольшой разницы в фазах по процессорам, которая всётаки будет, один процессор может воспринять его в одном такте, а другой в другом.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 21 2008, 14:35
Сообщение #23


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(galjoen @ Nov 21 2008, 17:04) *
А почему к сожалению?

Несмотря на то, что ARM семейство многочисленное и загнать себя асмом в угол тяжело, есть ведь и всякие DSP56xxx, dsPIC33xxx например...
Go to the top of the page
 
+Quote Post
МП41
сообщение Nov 21 2008, 14:46
Сообщение #24


4 синих кубика
****

Группа: Участник
Сообщений: 526
Регистрация: 19-09-08
Из: полупроводника, металла и стекла
Пользователь №: 40 326



Чем больше контроллеров в системе, тем выше вероятность сбоев и меньше её надёжность. А отладить такую систему просто кошмар. Теоретичести, скажем, mp3-декодер можно сделать на 20-и мегах, но трудоёмкость будет просто не оправдана. Разве что ради спортивного интереса.


--------------------
p-n-p-p-n-p-n-n-p-n-p структура однако очень эффективна
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 21 2008, 15:55
Сообщение #25


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 такта, и по второму уточнятся до такта. А триггер для того, чтобы сигнал синхронизации засинхронизировать с тактовым сигналом (изначально они не синхронны). Если так не делать, то фронт синхросигнала может попасть на границу тактов, и из-за небольшой разницы в фазах по процессорам, которая всё-таки будет, один процессор может воспринять его в одном такте, а другой в другом

Всё равно не понимаю. Если будет разница в фазах, то триггер вам не поможет.

Вообще похоже, мы о разных вещах говорим. Когда я говорю засинхронизировать микроконтроллеры, я подразумеваю, что одинаковая программа будет выполняться на всех МК такт в такт.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
galjoen
сообщение Nov 21 2008, 16:20
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(=GM= @ Nov 21 2008, 18:55) *
Всё равно не понимаю. Если будет разница в фазах, то триггер вам не поможет.

Вообще похоже, мы о разных вещах говорим. Когда я говорю засинхронизировать микроконтроллеры, я подразумеваю, что одинаковая программа будет выполняться на всех МК такт в такт.

Да, именно так. Во всех процессорах программа в один и тот-же такт должна начинаться и заканчиваться. Момент этого самого начала определяется по специальному сигналу синхронизации. Но этот сигнал внешний, и с тактовым генератором не связан. Поэтому его фронт может по периоду тактовой частоты гулять. Это может привести к рассинхронизации процессоров на 1 такт. А D-триггер обеспечит одновременность фронтов у тактового сигнала процессоров, и сигнала синхронизации этих процессоров. На вход данных D-триггера подаём внешний синхросигнал, на вход C - тактовый сигнал, и с выхода получаем, засинхронизированный по тактовому сигналу, внешний синхросигнал.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 21 2008, 16:25
Сообщение #27


Ambidexter
*****

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



Цитата(galjoen @ Nov 21 2008, 16:20) *
Момент этого самого начала определяется по специальному сигналу синхронизации. Но этот сигнал внешний, и с тактовым генератором не связан

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


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Nov 21 2008, 20:31
Сообщение #28


За битами по регистрам гоняюсь
***

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



Цитата(galjoen @ Nov 21 2008, 20:20) *
...Да, именно так. Во всех процессорах программа в один и тот-же такт должна начинаться и заканчиваться. ...

Начинаться в один такт она сможет, а вот заканчиваться - большой вопрос. Данные поступают разные, в какой-то AVR команда, к примеру BREQ, выполнится при 0, а в другой AVR нет. Число тактов получится разное, процесс рассинхронизируется. Или у вас строго линейный алгоритм (как в первых DSP)?


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
galjoen
сообщение Nov 21 2008, 23:00
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



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

Нет. Я таймер запущу.
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Nov 21 2008, 23:23
Сообщение #30


Гуру
******

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



Цитата(galjoen @ Nov 19 2008, 20:15) *
Есть одна задача, требующая достаточно больших вычислений, но легко параллелящаяся на 12 потоков. Если можно установить 12 штук ATmega48 (или 88), работающих от одного внешнего тактового генератора, то задача очень красиво решается (питание процессоров 3В тактовая частота 8Мгц)...
Жесть! biggrin.gif
Прошу прощенья за ремарку. Присоединюсь к предложению поставить более мощный контроллер. Выиграете во всех без исключения смыслах.
Я бы, правда, порекомендовал DSP. wink.gif

По теме (хотя здесь это и не совсем к месту).
На выход генератора обязательно нужно ставить буфер. Проще всего взять 6-гейтовый буферный инвертор типа 74AC04. Расположить рядом с генератором. К каждому выходу буфера подключить два тактовых входа. Провода желательно тянуть от буфера отдельно для каждого из входов.
Собственно, согласование при такой длине проводников не играет особой роли. Однако, на каждую трассу следует поставить последовательный резистор 50-100 Ом для уменьшения добротности резонирующей цепи, обусловленной индуктивностью дорожки и ёмкостью входа приёмника. Резисторы располагать в непосредственной близости от выводов буфера.
Усё. smile.gif


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016