Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.227.69] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Доброго времени суток, пытаюсь организовать работу логической схемы программно на AVR ATMega 16, подобную задачу решаю в первый раз, по-дозреваю, что для облегчения данной задачи должны быть готовые классы, но не как не могу найти, не примеров, не чего то подобного. Вот часть схемы (Блок выделения четных и нечетных единичных импульсов):
Прикреплённая картинка
Помогите с написанием кода для этого кусочка схемы, дальше думаю разберусь. (Блок INF в схеме представляет собой генератор случайного кода) Язык С++, среда CodeVisionAVR. |
Сообщ.
#2
,
|
|
|
Цитата marks90 @ Доброго времени суток, пытаюсь организовать работу логической схемы программно на AVR ATMega 16, подобную задачу решаю в первый раз, по-дозреваю, что для облегчения данной задачи должны быть готовые классы, но не как не могу найти Самое простое это низкоуровневое программирование. С классами сложнее, так как классы это высокий уровень. Всё что вам нужно это выучить операторы которые даёт вам компилятор "+","-","and","or","xor","not". Делаешь цикл. a=Inf; - я так понимаю что он уже есть. Если нет возьми Rand a=triger xor a; triger=a; b=not a; Этот код должен быть внутри цикла, частота цикла соответствует вашим 200Гц. |
Сообщ.
#3
,
|
|
|
Цитата Pavia a=Inf; - я так понимаю что он уже есть. Если нет возьми Rand a=triger xor a; triger=a; b=not a; Спасибо. Вас понял, буду описывать логические операции каждого элемента схемы. Столкнулся с первой проблемой, триггер работает не так как надо: вот
Описан согласно этой схеме: (должен работать как делитель на 2) вот
Сам код триггера: (тип данных каждой переменной bit) for(;;) { a = rand()%2; // генерируем передаваемый код b++; // генератор импульсов c = a & b; // и /* D триггер */ d2 = d & b; d2 = !d2; d3 = d2 & b; d3 = !d3; e = d2 & d; e = !e; d = d3 & e; d = !d; /* конец D триггер */ PORTB.0 = b; // генератор PORTB.1 = d; // удвоенный инвертированный импульс генератора PORTB.2 = e; // удвоенный импульс генератора }; Что не так? Описал каждый элемент... чего ему не хватает? |
Сообщ.
#4
,
|
|
|
Цитата Что не так? Описал каждый элемент... чего ему не хватает? Ты описал последовательно, а тригер работает параллельно вернее асинхронно. Т.е. тебе надо запомнить старое состояние всей системы и применять операции к старому состоянию, а по окончанию работы сохранить новое состояние как старое. А вернее надо учесть что после каждого логического элемента с обратной связью рождается своё состояние. Можно это строго математически описать далее что-бы упростить перейти от недетерминированной системы к детерминированной. Но не думаю что вам это нужно, гораздо проще понять суть работы тригера и реализовать согласно тому как он работает. http://ru.wikipedia.org/wiki/Триггер Вот посмотрите на граф перехода и таблицу состояний и реализуй согласно этому описанию. Тригер можно воспринимать как элемент которые запоминает 1 бит информации. |
Сообщ.
#5
,
|
|
|
В си не шарю.
с1 = a&b ; новое состояние по входу с триггера if (c1 != c) & (c1 == 1) ; { q = !q ; инверсия выхода триггера по восходящему фронту на С } с = c1 |
Сообщ.
#6
,
|
|
|
Цитата marks90 @ Описан согласно этой схеме: (должен работать как делитель на 2) Схема, очевидно, с ошибкой. Вход D подключен к выходу d. И одновременно - к выходу внешней управляющей схемы. Так нельзя. Два выхода соединяются вместе. Точно сходу не скажу, но подозреваю, что эта схема вообще правильно работать не может. Это не D-триггер. Также, в программе нужно предусмотреть начальное состояние триггера. Посмотри это. На первой странице нарисована внутренняя логика 74LS74. Её можно упростить, в результате получишь правильный D-триггер. |
Сообщ.
#7
,
|
|
|
А для чего внутренности триггера моделировать?
|
Сообщ.
#8
,
|
|
|
Цитата ЫукпШ Схема, очевидно, с ошибкой. Вход D подключен к выходу d. И одновременно - к выходу внешней управляющей схемы. Так нельзя. Два выхода соединяются вместе. Точно сходу не скажу, но подозреваю, что эта схема вообще правильно работать не может. Это не D-триггер. Также, в программе нужно предусмотреть начальное состояние триггера. Схема без ошибок, вот. А то что с выхода "не Q" мы подаём состояния на вход D, не чего странного, так и должно быть. (при таком соединение Д триггер работает как делитель на 2). Цитата Prince А для чего внутренности триггера моделировать? Думал так проще будет, просто описывать логику работы каждого элемента по действиям. не тут то было.. А если вообще то, пытаюсь данную схему перенести в микроконтроллер. (заменить кучку стандартных микросхем одним запрограммированным микроконтроллером) ------------- Вот что получилось, но это опять же как делитель... /* D тригер */ c++; // такты if(c == 1){ hc = 1; } if(c == 0){ if(hc == 1){ Q = D; Q1 = !Q; hc = 0; } } Q1; // не Q; // прямой /* конец D тригер */ А дальше по схеме Д триггер не в качестве делителя… + RS.. Опять запары.. |
Сообщ.
#9
,
|
|
|
Сообщ.
#10
,
|
|
|
Цитата Думал так проще будет, просто описывать логику работы каждого элемента по действиям. не тут то было.. Элемент можно рассматривать как черный ящик, описывая его реакцию на внешние сигналы. В случае D триггера в счётном режиме, нужно просто отлавливать фронт по входу "С" и инвертировать состояние "триггера". Не в счётном режиме добавится проверка состояния на входе D, от чего будет зависеть выход Q. Цитата А если вообще то, пытаюсь данную схему перенести в микроконтроллер. Какую функцию схема в натуре выполняет? Вообще? В составе чего работает? Что такое inf? |
Сообщ.
#11
,
|
|
|
Цитата Prince @ Какую функцию схема в натуре выполняет Имхо - никакую. Идет программное моделирование поведения жесткой логики средствами микроконтроллера: Цитата marks90 @ среда CodeVisionAVR. Цитата Prince @ Вообще? В составе чего работает? Ну, к примеру, в составе Протеуса... Цитата Prince @ Что такое inf? Цитата marks90 @ Блок INF в схеме представляет собой генератор случайного кода) |
Сообщ.
#12
,
|
|
|
RS триггер асинхронный. Простая проверка условий по входу.
R S Q 0 0 не меняется 0 1 1 1 0 0 1 1 0 Хотя нет, не совсем простая проверка. Надо проанализировать схему, и исключить неопределенную ситуацию при возможном переходе от 11 к 00, по входам. |
Сообщ.
#13
,
|
|
|
Цитата Элемент можно рассматривать как черный ящик, описывая его реакцию на внешние сигналы. Какую функцию схема в натуре выполняет? Вообще? В составе чего работает? Что такое inf? Я примерно предполагаю к чему вы ведёте, но рассматривать всю схему как чёрный ящик увы не получится, по причине её "нелинейной" работы. 1. Вся схема (реализуемая в мк) целиком, подготавливает информационную последовательность (её выдаёт блок inf) для передачи. В последующем эта последовательность пойдёт на квадратуру где будет модулирована "MSK - модуляция". 2. В составе полной схемы (реализуемой в мк) входят: a) Блок выделения четных и нечетных единичных импульсов. (это первая часть схемы (рисунок в первом посте)) вроди как уже реализован)) b) Блок выделения нулевых бит информации, следующих после не-четных единичных бит. (это вторая часть схемы тоже вылаживал в предыдущем сообщении) с) Блок разделения входной последовательности на четные и нечет-ные биты. (ещё не брался) d) Логическая схема блока формирования модуляционных кодов квадратурных каналов. (ещё не брался) 3. inf - это генератор того самого кода который будет передаваться (выход 1 без инверсии выход 2 с инверсией). Вечером постараюсь полную схему выложить. |
Сообщ.
#14
,
|
|
|
Цитата Вся схема (реализуемая в мк) целиком, подготавливает информационную последовательность (её выдаёт блок inf) для передачи. Шифратор? Цитата Блок выделения четных и нечетных единичных импульсов. Импульсов чего? INF - это входящая последовательность. А 200 Гц - это что за импульсы? 1001000001100010101011110110001011 Я правильно разделил четные и нечетные единичные импульсы(чего-то)? Цитата Блок выделения нулевых бит информации, следующих после не-четных единичных бит. (это вторая часть схемы тоже вылаживал в предыдущем сообщении) 1001000001100010101011110110001011 Так? Цитата Блок разделения входной последовательности на четные и нечет-ные биты. (ещё не брался) 100011010000 Так? Имхо, лучше бы начать с функциональной схемы, а не фактически принципильной. |
Сообщ.
#15
,
|
|
|
Думается мне, что автор темы просто не понимает, что делает.
Если это реальная задача, то вместо предложенного здесь бесконечного цикла заводится таймер и в его обработчике выполняются необходимые действия. Добавлено А судя по тексту первого сообщения - таки не понимает. |