Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Много вопросов накопилось... Сильно не глумитесь
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Screw
Здравствуйте, господа хорошие.
Перечитал я весь форум и охватило меня дикое желание узнать что-то новое в сфере AVR у профи, а не у таких же "знатоков" как я unsure.gif

Итак, от слов к делу:

1) Прерывания.... Знаю, тема больная, перечитал все, что тут есть..... Но.... либо опыта маловато, либо голова моя садовая - не принимает информацию wink.gif
Объясните на пальцах, что произойдет, если... (везде имеется ввиду Mega16)
Произошло прерывание Int1, в нем стоит задержка (ну или какая-то работа выполняется), во время которой происходит событие на порту INT0 (больший приоритет по документации). Далее во время этой же задержки срабатывает прерывание по таймеру-счетчику.

Распишите, если не трудно, в каком порядке это все будет отработано....

Возможно как-либо изменить приоритет прерываний ? Какие существуют решения?

2) Каким образом можно посчитать количество времени, затраченного на выполнение определенного куска кода (подпрограммы обработки прерывания допустим) в CVAVR?

3) У Атмела существует такой AppNote - Zero-Detector. Суть (если кто не видел) - соединяем ч/з 1Мом фазу и int0, а так же ноль и землю питания контроллера. Далее через прерывание идет обработка...
Дак вот - собрал сначало я со стабилитроном (на всякий пожарный) на 2,5 В. Все бы ничего - но контроллер в прерывание не уходил. На осциллографе все красиво, но видимо Меге мои красоты до..... Стабилитрон убрал - работает. Объясните, почему так оно происходит? При длительной работе без стабилитрона выход контроллера из строя как скоро произойдет?
За одно про int0 и тп.... в настройке этого прерывания можно выставлять передний и задний фронты сигналов (выставлял есс-но не я, а CVAVR). У меня есть подозрение, что что-то я делаю не так, ибо на осциллограмме смотрю фазу - ушла вниз, а прерывание на передний фронт сработало. (фазу и ноль не перепутал.... единственное - может меандр уплывает, но двухлучевика нет).

4) Граждане, привидите пример опроса клавиатуры 4x4 матрица... Самый простой, чтобы в глобальную переменную (назовем её key) выводилось значение нажатой клавиши.
Делал сам по 2-м алгоритмам.... сначало бегающим нулем с pullup, затем код клавиши вычислял через значения pinX.... Но то ли лыжи не едут.....


Надеюсь на Вашу помощь. Извините за сумбурность, писалось это все в 1-27 ночи wacko.gif
SasaVitebsk
Цитата(Screw @ Nov 29 2006, 22:35) *
Здравствуйте, господа хорошие.
Перечитал я весь форум и охватило меня дикое желание узнать что-то новое в сфере AVR у профи, а не у таких же "знатоков" как я unsure.gif

Итак, от слов к делу:

1) Прерывания.... Знаю, тема больная, перечитал все, что тут есть..... Но.... либо опыта маловато, либо голова моя садовая - не принимает информацию wink.gif
Объясните на пальцах, что произойдет, если... (везде имеется ввиду Mega16)
Произошло прерывание Int1, в нем стоит задержка (ну или какая-то работа выполняется), во время которой происходит событие на порту INT0 (больший приоритет по документации). Далее во время этой же задержки срабатывает прерывание по таймеру-счетчику.

Распишите, если не трудно, в каком порядке это все будет отработано....

Возможно как-либо изменить приоритет прерываний ? Какие существуют решения?


По поводу п.1 я написал статью находится по адресу http://nix-06.nm.ru/ Как раз Ваш случай. smile.gif Рассмотрел варианты программ. Привёл примеры. Есть осциллограммы. Написал также библиотеку для LCD на базе HD44780. Пишу для клавиатуры 4х4. Напишу выложу. Здесь и там.
aesok
Цитата
3) У Атмела существует такой AppNote - Zero-Detector. Суть (если кто не видел) - соединяем ч/з 1Мом .....
При длительной работе без стабилитрона выход контроллера из строя как скоро произойдет?


Вот Application Note от микрочипа где описана теория (почему вход контроллера останеться целым) и практика (как расчитать резистор):

http://ww1.microchip.com/downloads/en/AppNotes/00521c.pdf

Анатолий.

ADD:
Из AVR182: Zero Cross Detector стр. 7:
...
The series resistor can also be modified somewhat to make the detection closer but
note that the maximum current through the AVR’s clamping diode should not be higher
than 1 mA.

Тоесть максимальный входной ток через защитные диоды 1 ma.

Про входную емкость нашёл только в табличке про TWI интерфейс, но скорее всего она одинаковая для всех пинов (Ci = 10pF). Даташит на ATmega16 стр. 297.
demaven
И самое главное - обработчик прерываний не должен быть длинным по времени, желательно его сделать как можно короче, а окончательную обработку прерывания передать в основную программу. Тогда есть шанс не потерять следующее прерывание при обработке пришедшего.
Screw
Цитата(SasaVitebsk @ Nov 29 2006, 22:49) *
По поводу п.1 я написал статью находится по адресу http://nix-06.nm.ru/ Как раз Ваш случай. smile.gif Рассмотрел варианты программ. Привёл примеры. Есть осциллограммы. Написал также библиотеку для LCD на базе HD44780. Пишу для клавиатуры 4х4. Напишу выложу. Здесь и там.



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

Опять же появился еще один непонятный момент.... Если при обработке какого-то прерывания (допустим any change INT1) разрешить глобальные прерывания и до окончания обработки наступит опять Interrupt INT1 - как быть??? Это не конкретно моя задача, у меня все несколько проще, но тем не менее - хотелось бы знать.

Все еще непонятно, будет ли после обработки более высокооуровнего прерывания обработано более низкое по приоритетам...

В любом случае - спасибо за ответ и помощь.
otrog
По поводу второго вопроса: Определить время выполнения куска кода можно в симуляторе, например в AVR Studio.
По стабилитрону: 2,5В явно мало для уровня логической единицы, при питании контроллера от 5В. Поставьте стабилитрон на 5,1В или 4,7В и все заработает. А ИМХО полагаться только на встроенные защитные диоды как-то неправильно.
Wild007
По первому пункту:
При входе в пп обработки прерывания снимается флаг I регистра SREG (глобальное разрешение прерываний) и, естественно, если во время обработки прерывания произойдет любое другое прерывание его обработка начнется только после команды RETI в соответстви с его приорететом. В прерывании конечно можно программно разрешить обработку других прерываний (SEI), но вы запутаетесь в разрешениях и нарушится баланс стека, что не есть хорошо. Корректней в пп обработке прерывания надо просто устанавливать какой-то флаг прошедшего преравания и обрабатывать его в главном цикле. Тогда не запутаетесь со стеком и приоретет обработки прерываний вас не будет волновать. Приоритет прерываний установлен жестко логикой работы мс и изменить его програмно не возможно.

По второму пункту:
Я пишу програмы на ASM в AVR Studio и она позволяет измерить время выполнения любого куска програмы и не было случая что бы время выполнения реальной програмы на реальном железе отличалось от измеренного в STUDIO.
Dog Pawlowa
Цитата(Screw @ Nov 29 2006, 22:35) *
Надеюсь на Вашу помощь.

По прерываниям именно так - Вы можете разрешить вложенные прерывания во всех, кроме самого приоритетного. Сформировать приоритеты по другому в наиболее дешевых и популярных микроконтроллерах невозможно.

Опасность вложенных прерывания именно в том, что если во время выполнения одного придет запрос опять, стек переполнится и все рухнет. Если прерывание другое, то просто глубина стека нужна побольше, а если прерывание такое-же, то никакого стека не хватит.
Но!
Вы ведь при проектировании системы учли быстродействие контроллера, чтобы прерывания давали основной программе работать? wink.gif Доверьтесь собственному выбору smile.gif Оцените предварительно длительности выполнения прерываний, не пишите там сложных вычислений, индексаций массивов, задержек и проч. Контролируйте длительности прерываний в реальном приборе осциллографом, дергая вывод при входе и выходе из прерывания.

И будет Вам щастье! santa2.gif
SasaVitebsk
Цитата(Wild007 @ Nov 30 2006, 09:59) *
По первому пункту:
При входе в пп обработки прерывания снимается флаг I регистра SREG (глобальное разрешение прерываний) и, естественно, если во время обработки прерывания произойдет любое другое прерывание его обработка начнется только после команды RETI в соответстви с его приорететом. В прерывании конечно можно программно разрешить обработку других прерываний (SEI), но вы запутаетесь в разрешениях и нарушится баланс стека, что не есть хорошо. Корректней в пп обработке прерывания надо просто устанавливать какой-то флаг прошедшего преравания и обрабатывать его в главном цикле. Тогда не запутаетесь со стеком и приоретет обработки прерываний вас не будет волновать. Приоритет прерываний установлен жестко логикой работы мс и изменить его програмно не возможно.


Вы своим ответом вводите в заблуждение. "Но вы запутаетесь в разрешениях и нарушится баланс стека" - это непереводимая игра слов. Если всё рассчитано правильно, то ничего страшного произойти не может. Вы не запутаетесь потому что Вы не обрабатываете прерывания, а МК не запутается потому что он МК. Его запутать сложно. Если у Вас придёт разрешённое прерывание ещё раз, то это нехорошо smile.gif но это недопустимо при любой обработке. Теоритически, наверное, обработать можно если учитывать такую вероятность. Но если такое происходит регулярно, то такая прога не будет работать как при разрешённых, так и при запрещённых прерываниях. То есть здесь надо следовать Dog Pawlowa и чётко расчитывать производительность контроллера.

Цитата(Screw @ Nov 30 2006, 09:59) *
Из Вашей статьи следует, что возможно сделать только одно прерывание с максимальным приоритетом... Т.е. получится, такая же цепочка из допустимых прерываний, но уже возможен вызов из самих прерываний. Т.о. необходимо разрешить прерывания во всех обработчиках, кроме самого приоритетного - я правильно Вас понял?

Для двух уровней - да. Для трёх - перечитайте - там нет примера, но разжёвано. Как понимать фразу "Т.е. получится, такая же цепочка из допустимых прерываний"? И что Вас пугает? Кстати двух уровней достаточно для 99% случаев. Это же не IBM.

Цитата(Screw @ Nov 30 2006, 09:59) *
Все еще непонятно, будет ли после обработки более высокооуровнего прерывания обработано более низкое по приоритетам...


Естественно. Оно (или они) будет обработано сразу же после завершения обработки высокоуровневого прерывания, в порядке аппаратных приоритетов. М/у этими прерываниями будет выполнятся по одной операции головы. Глубина стека при этом должна быть увеличена и предусматривать возможность вложенных прерываний.
Рассмотрим например вариант когда у Вас три прерывания. Int1, UART, OCR0. Int1 - высокоприоритетное, остальные равные. Тогда в OCR0 и UART необходимо разрешить прерывание. Во всех трёх не должны быть использованы общие переменные или за этим необходимо следить, не должно быть использованы общие ресурсы. Например приходит прерывание от UART (не завершилось) потом Int1 (прервана UART) и во время Int1 - OCR. После завершения Int1 будет выполнена одна команда UART и вызвано OCR, по завершению - завершится UART. Поскольку возможен вариант вложенных вызовов OCR-UART-Int1, то стек должен быть увеличен на сумму стеков этих прерываний. Время реакции самого высокоприоритетного прерывания составит в худшем случае - 4+1+4 если команда sei идёт первой командой низкоприоритетного прерывания (так бывает не всегда). Это для ассемблера. Для Си надо смотреть реальный код.
Screw
Цитата(demaven @ Nov 30 2006, 07:06) *
И самое главное - обработчик прерываний не должен быть длинным по времени, желательно его сделать как можно короче, а окончательную обработку прерывания передать в основную программу. Тогда есть шанс не потерять следующее прерывание при обработке пришедшего.


Т.е. из обработчика прерывания вызвать подпрограмму обработки? А МК не будет думать, что этот код относится к обработчику (ну и загнул wink.gif ?
т.е. к примеру если я сделаю так:

<Timer1 Overflow>
{
obrabotka();
};

void main(void)
{
основная программа
};

void obrabotka(void)
{
Обработка прерывания
};


Будет правильно? Или в начало подпрограммы obrabotka надо вставить "SEI"?
Цитата(otrog @ Nov 30 2006, 08:50) *
По поводу второго вопроса: Определить время выполнения куска кода можно в симуляторе, например в AVR Studio.
По стабилитрону: 2,5В явно мало для уровня логической единицы, при питании контроллера от 5В. Поставьте стабилитрон на 5,1В или 4,7В и все заработает. А ИМХО полагаться только на встроенные защитные диоды как-то неправильно.

Стабилитроны были 3,9 В куплены.... но реальность оказалась суровой 2,5 В wink.gif По идее при 5-ти вольтовом питании 1,7 В - минимальный порог, а 2,5 В - гарантированный порог... Но это так, болтология, надо будет все же поставить защитный стабилитрон.
Screw
Вообще что-то сильно я вглубь полез.... Есть у меня такое качество.
По сути проект будет делать следующее:
1) есть 2 равноприоритетных прерывания высшего уровня INT0 и INT1. Перехлест их невозможен, происходят они с частотой 50 Гц каждое (нули синусоиды ловлю).
Так же в этом прерывании происходит открытие тиристоров в зависимости от алгоритма и данных с клавиатуры.
2) Есть прерывание от таймера счетчика для опроса клавиатуры. (А надо ли прерывание.... Но как подругому сделать клавиатуру доступной все время - пока непонятно)
3) В основной программе обработка данных с клавиатуры, вывод на LCD.

Вот такой вот проектик. Если у кого есть какие мысли - поделитесь, буду благодарен.

P.S. Да простят меня модераторы, но просто нехотелось создавать кучу тем.... лучше уж в одной о всех моих проблемах.
SasaVitebsk
Цитата(Screw @ Nov 30 2006, 17:49) *
Вообще что-то сильно я вглубь полез.... Есть у меня такое качество.
По сути проект будет делать следующее:
1) есть 2 равноприоритетных прерывания высшего уровня INT0 и INT1. Перехлест их невозможен, происходят они с частотой 50 Гц каждое (нули синусоиды ловлю).
Так же в этом прерывании происходит открытие тиристоров в зависимости от алгоритма и данных с клавиатуры.
2) Есть прерывание от таймера счетчика для опроса клавиатуры. (А надо ли прерывание.... Но как подругому сделать клавиатуру доступной все время - пока непонятно)
3) В основной программе обработка данных с клавиатуры, вывод на LCD.

Вот такой вот проектик. Если у кого есть какие мысли - поделитесь, буду благодарен.

P.S. Да простят меня модераторы, но просто нехотелось создавать кучу тем.... лучше уж в одной о всех моих проблемах.


Прерывание от таймера действительно придётся делать, для обработки клавиатуры, а можно и в другое вложить. Прерывание от 50Гц к томуже высокоприоритетное - это мало вероятно. 50Гц - это весьма низкая величина для МК. 20мс при 8 МГц - 160000 циклов. И потеря 200-500 (примерно среднее время обработки прерывания - это ничтожный процент. К тому же если Ваши синусоиды сфазированы, то 2 прерывания одновременно произойти не могут, но в любом случае выбор за Вами.

demaven Вы поняли неверно. Он писал совершенно верно. Прерывание должно быть максимально коротким и должно обрабатывать только суть процесса. Обычно ввод/вывод и предварительная обработка. Всё что не привязано к событию должно обрабатываться в голове. Например - по прерыванию ввёл данные с АЦП и засунул в ОЗУ и выставил флаг, что данные пришли. А в голове по флагу обработал их.

Всего не опишешь, - это в процессе обучения поймёшь. И универсальных приёмов не бывает. Отличаются также подходы для Си и для Асма.
Dopler
Если у вас два прерывания, одно по возрастающему фронту, другое по спадающему (50 гц), то можно настроить порт на любое изменение на ноге и получить прерывание 100 гц, а в обработчике читать значение ножки и определять полярность.

Интересно, поставите вы стабилитрон на +5В, а что будете делать с отрицательным напряжением (с диодом, который открывается на землю)? Ответ один - стабилитрон там даром не нужен, если правильно выбран гасящий резистор (ток через защитные диоды не превышает 1 мА). Если уж так хочется перестраховаться поставьте два внешних диода.

Кстати, стабилитрон у вас выдает 2,5В, так как ток через него течет совсем слабый (если ставили резистор 1МОм, то меньше 1мА), так что это вполне закономерно (открываем ВАХ стабилитрона и смотрим).
defunct
Цитата(SasaVitebsk @ Nov 30 2006, 16:38) *
фразу "Т.е. получится, такая же цепочка из допустимых прерываний"? И что Вас пугает? Кстати двух уровней достаточно для 99% случаев. Это же не IBM.

С тем же успехом можно заявить - одного уровня достаточно для 99% случаев. Вот и появляется вопрос:

зачем ломать, естественным образом полученный, простой механизм синхронизации?
Ведь, добавляя второй уровень, добвляется также и ряд проблем связанных с синхронизацией данных.

этот вопрос, чуть выше Вы назвали:
Цитата
это непереводимая игра слов.
IgorKossak
Цитата(Screw @ Nov 30 2006, 16:49) *
P.S. Да простят меня модераторы, но просто нехотелось создавать кучу тем.... лучше уж в одной о всех моих проблемах.

Если бы я все свои посты совал в одну тему, то кто захотел бы читать около сотни страниц?
Да и как назвать такую тему? "Проблемы от IgorKossak"? wink.gif
SasaVitebsk
Цитата(defunct @ Dec 1 2006, 01:35) *
Цитата(SasaVitebsk @ Nov 30 2006, 16:38) *

фразу "Т.е. получится, такая же цепочка из допустимых прерываний"? И что Вас пугает? Кстати двух уровней достаточно для 99% случаев. Это же не IBM.

С тем же успехом можно заявить - одного уровня достаточно для 99% случаев. Вот и появляется вопрос:

зачем ломать, естественным образом полученный, простой механизм синхронизации?
Ведь, добавляя второй уровень, добвляется также и ряд проблем связанных с синхронизацией данных.

этот вопрос, чуть выше Вы назвали:
Цитата
это непереводимая игра слов.



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

1) Непереводимая игра слов я ответил потому, что она там была. Поясните мне что значит фраза "запутаться" или "нарушить баланс стэка" и какие у Вас проблемы "связанные с синхронизацией данных"?
Ещё раз Вам повторяю. Я с этим работаю постоянно. Никаких проблем нет. По крайней мере у меня.
2) На счёт "второго уровня", давайте банально обратимся к оборудованию. Если бы это было не нужно, то этого нигде или почти негде небылобы. Но это есть аппаратно в x51 (2 уровня) в ARM (8) в других просто не интересовался.

Приведу простой и по моему доступный пример, - приведите своё решение. У меня идёт сигнал со станции 32 кГц(31.25мкс) (АТС С32) где "0" импульс длительностью 2мкс, "1" - длительностью 4мкс. Ч/з 2мкс от среза мне необходимо выдать ответный импульс длительностью 2мкс. Есть прерывание от таймера и USART. Частота 7.3728.

Всё это на уровне ощущений, как и везде в программировании. Я лишнее никогда не добавляю. Я сразу чуствую что можно, а что лишнее. И если получается как-то не так, то чуствую какой-то дискомфорт. Я понимаю что скорее всего уважаемый defunct чувствует что-то вроде этого. То есть ему просто не нравится данное решение. Кажется ему некрасивым. Но это не так! Надо просто попробовать. Там всё Ok. И проблем не больше чем везде. Кстати всё прекрасно работает и из под Си. Это видно из моего примера.
Dog Pawlowa
Цитата(IgorKossak @ Dec 1 2006, 11:51) *
Если бы я все свои посты совал в одну тему, то кто захотел бы читать около сотни страниц?
Да и как назвать такую тему? "Проблемы от IgorKossak"? wink.gif

Вот это бы был бестселлер! smile.gif
Dog Pawlowa
Цитата(Screw @ Nov 30 2006, 17:34) *
Т.е. из обработчика прерывания вызвать подпрограмму обработки? А МК не будет думать, что этот код относится к обработчику (ну и загнул wink.gif ?

Можно, но увеличится время прерывания. Так делают пацаны smile.gif , когда в одном прерывании много обработчиков событий, а в проекте много файлов. Например, я вот так:
Код
#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB_modul0()
{ KbdService();
  ValveService();
  BackgroundService();
  PumpsService();
  SendByteFromBuffer0();
  ChemCounterSimulation();
  SensorService();
}

(был реальный открытый проект, но на MSP, не обессудьте tongue.gif )
То есть Вам и обработку клавиш можно, как и я, включить в одно прерывание с чем-нибудь. После включения тиристоров до пятницы (следующего прерывания) контроллер абсолютно свободен.

2. По поводу лазанья глубоко и проектика.
Пока кажется, что наоборот, Вы плаваете по поверхности wink.gif
Успехов
bodja74
Цитата(Screw @ Nov 30 2006, 17:49) *
Вообще что-то сильно я вглубь полез.... Есть у меня такое качество.
По сути проект будет делать следующее:
1) есть 2 равноприоритетных прерывания высшего уровня INT0 и INT1. Перехлест их невозможен, происходят они с частотой 50 Гц каждое (нули синусоиды ловлю).
Так же в этом прерывании происходит открытие тиристоров в зависимости от алгоритма и данных с клавиатуры.
2) Есть прерывание от таймера счетчика для опроса клавиатуры. (А надо ли прерывание.... Но как подругому сделать клавиатуру доступной все время - пока непонятно)
3) В основной программе обработка данных с клавиатуры, вывод на LCD.

Вот такой вот проектик. Если у кого есть какие мысли - поделитесь, буду благодарен.


Я так понял симисторами регулируете движок,делал я такое когда у меня контроллер в стиралке здох.

1 По прерываниям выставляете и запускаете таймер ,он и будет управлять симистором,и выходите.
2 С таким же успехом можно и в основной программе опрашивать клаву.

ЗЫ Зачем такие глобальные проблемы решать ,приоритетности,скоростя,синхронизации,для данной задачи у контроллера просто навалом времени.
Насчет стабилитрона на замер сетевой фазы,ставте 100кОм и стабилитрон 5.1в ,будет вам и 0 и 1.
Screw
Спасибо всем за советы - как чего-нибудь надумаю - еще спрошу wink.gif
defunct
Цитата(SasaVitebsk @ Dec 1 2006, 12:37) *
1) Непереводимая игра слов я ответил потому, что она там была. Поясните мне что значит фраза "запутаться" или "нарушить баланс стэка" и какие у Вас проблемы "связанные с синхронизацией данных"?

как минимум две очевидных проблемы:
1. Чтение частично обновленных данных.
2. повторный вход в текущий обработчик прерывания, как следствие - переполнение стека.

Цитата
Ещё раз Вам повторяю. Я с этим работаю постоянно. Никаких проблем нет. По крайней мере у меня.
Спору нет, охотно Вам верю, но применять сложное решение там, где есть более простое - не рационально.

Цитата
2) На счёт "второго уровня", давайте банально обратимся к оборудованию. Если бы это было не нужно, то этого нигде или почти негде небылобы. Но это есть аппаратно в x51 (2 уровня) в ARM (8) в других просто не интересовался.

Аргумент не очень убедительный, т.к. в противовес этому примеру можно поставить AVR'ы, PIC'и где уровней всего один..

Цитата
Приведу простой и по моему доступный пример, - приведите своё решение. У меня идёт сигнал со станции 32 кГц(31.25мкс) (АТС С32) где "0" импульс длительностью 2мкс, "1" - длительностью 4мкс. Ч/з 2мкс от среза мне необходимо выдать ответный импульс длительностью 2мкс. Есть прерывание от таймера и USART. Частота 7.3728.

Через 2us от среза это не строго? Иначе ваша задача нерешаема и с двумя уровнями вложенности, так как просто переход на обработчик прерывания занимает около 11 тактов, что с приведенным кварцем займет примерно ~1.5 us. С учетом вложенности прерываний - "люфт" будет приблизительно равен ~3 us. Первым делом я бы поставил кварц на 14.7456, ну а дальше смотрел бы.. Возможно пришлось бы добавлять на формирование импульсов отдельный MK или внешнюю логику.

Цитата
Всё это на уровне ощущений, как и везде в программировании. Я лишнее никогда не добавляю. Я сразу чуствую что можно, а что лишнее. И если получается как-то не так, то чуствую какой-то дискомфорт.

Есть такое ;>

Цитата
Я понимаю что скорее всего уважаемый defunct чувствует что-то вроде этого. То есть ему просто не нравится данное решение. Кажется ему некрасивым. Но это не так! Надо просто попробовать. Там всё Ok.

Как по мне, то там где многоуровневость действительно нужна, лучше применить упомянутые Вами x51 или ARM в которых многоуровневость поддерживается аппаратно.
SasaVitebsk
Цитата(defunct @ Dec 2 2006, 02:03) *
как минимум две очевидных проблемы:
1. Чтение частично обновленных данных.
2. повторный вход в текущий обработчик прерывания, как следствие - переполнение стека.


Это очевидные "не проблемы". Стек может переполнится и с одним уровнем прерываний и ошибка совместного использования данных - также. Простой пример - проверка свободного остатка кольцевого буфера - а между сравнениями младшего и старшего байта указателя вызов процедуры прерывания от UART с переходом по кольцу. (Я один раз получил - долго искал)
Это не проблемы выбранного метода, - это просто недостаток опыта или знаний у программиста.

Цитата
Аргумент не очень убедительный, т.к. в противовес этому примеру можно поставить AVR'ы, PIC'и где уровней всего один..

Для меня убедительный. Если для x51 я могу выполнить две команды
setb ex1
setb px1
и получу практически то же самое что я делаю здесь софтово, и там никому в голову не придёт меня "осудить" за "неправильное" использование оборудования, то непонимаю как это мне можно пришить здесь.

Цитата
Как по мне, то там где многоуровневость действительно нужна, лучше применить упомянутые Вами x51 или ARM в которых многоуровневость поддерживается аппаратно.

Аппаратно - это громко сказано. Чего Вы боитесь?
Это мне напоминает момент когда я написал свою первую прогу на x48. Вижу - ошибка, найти не могу. И тут ... о ужас ... этот процессор не делает автоматического сохранения PSW (читай SREG) процессора при входе/возврате в/из прерывания.... как дальше жить ... какой бред....
С тех пор прошло много лет. Оказывается земля не рухнула, и всё я это делаю руками. Как то привык и эмоций это у меня не вызывает.

И там тоже нет никаких проблем. Я не делаю ничего крамольного. Я не обращаюсь к стеку и не модифицирую его. В x51 можно переключить банки регистров - в avr можно использовать разные регистры (это при написании на asm). Для Си вообще ничего делать не надо. Компилятор обо всём сам позаботится. Да - нельзя использовать совместные ресурсы в прерывании. Так я этого и так стараюсь не делать во избежание. Я стараюсь чтобы каждый процесс был завершён. Выходные данные одного процесса - входные для другого. А перепинговывание - это просто доп сложности.

В завершение скажу, что допускаю возможность повторного входа в прерывание (если оно грамотно написано). Ну например ситуация: идут нерегулярные прерывания от Int0 со средним временем не более одного прерывания в 200мкс. Обработка его занимает 60мкс. При этом оно может придти в конце интервала или в начале, таким образом минимальный разрыв м/у ними может составлять 10мкс.
Ничего нет сложного в написании данного прерывания без применения дополнительных внешних аппаратных средств. И процедура будеть выглядеть обычно.

Кстати изделие с протоколом описанным в моём топике выше выпускалось серийно с момента появления 4414 (максимальная тактовая частота 8000 поэтому о 14745600 речи не шло). К слову скажу что аналогичное изделие выпускалось в Днепропетровске. И было оно основано на PIC и тоже частота кварца была невысока.


Дальнейший спор на эту тему считаю бессмысленным, так как он просто отражает "пристрастия" авторов. А свои пристрастия, по моему убеждению, каждый должен выбирать себе сам. Так что выбор за Вами.
Сергей Борщ
Пожалуй я тоже вставлю слова, т.к. вложенные прерывания использовал, и как решить ту задачу без них не представляю (при помощи ШИМ генерится огибающая аналогового сигнала, при периоде ШИМ 128 тактов процессора его обработчик прерывания выполняется за 105...120 тактов, а в оставшиеся такты надо за 40 периодов ШИМ подготовить данные для следующих 40 периодов без участия основной программы, т.е. в обработчике другого прерывания).
Цитата(defunct @ Dec 2 2006, 01:03) *
2. повторный вход в текущий обработчик прерывания, как следствие - переполнение стека.
Решается довольно просто:
Код
void Timer1_compA_handler() {
    TIMSK &= ~(1<< OCIE1A);  //запрещаем это прерывание

    __enable_interrupts();        // разрешаем вложенные

    собственно обработчик, вложенные прерывания разрешены

    __disable_interrupts();      // запрещаем вложенные

    TIMSK |= (1<< OCIE1A);    разрешаем это прерывание
}
Резюме - панически бояться вложенных прерываний не нужно. Но тщательно обдумывать любое решение необходимо.
defunct
Цитата(SasaVitebsk @ Dec 2 2006, 23:58) *
Аппаратно - это громко сказано. Чего Вы боитесь?

Гм.. Аппаратно - это не громко, а точно сказано, т.к. имеются средства аппаратуры, которые автоматически блокируют возможность вызова прерываний того же уровня. Чтобы повторить это на AVR, Вам потребуется на входе в прерывание вручную блокировать все прерывания того же уровня, и лишь после этого устанавливать флаг I. Т.о. накладные расходы получатся весьма значительными, а выигрышь от всего этого - практически никаким.

Цитата
Это мне напоминает момент когда я написал свою первую прогу на x48. Вижу - ошибка, найти не могу. И тут ... о ужас ... этот процессор не делает автоматического сохранения PSW (читай SREG) процессора при входе/возврате в/из прерывания.... как дальше жить ... какой бред....
С тех пор прошло много лет. Оказывается земля не рухнула, и всё я это делаю руками. Как то привык и эмоций это у меня не вызывает.

И не надо его сохранять т.к. в x48 одноуровневый КП. Вот интересно, что бы Вы сказали если бы у x51-го PSW не сохранялся.. такой проц можно было бы сразу "фтопку".

Цитата
И там тоже нет никаких проблем. Я не делаю ничего крамольного. Я не обращаюсь к стеку и не модифицирую его.

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

Цитата
Для Си вообще ничего делать не надо. Компилятор обо всём сам позаботится.

Ну-ну.. smile.gif
Компилятор ни о чем не позаботится, ему все равно какие строки переводить в код. Заботиться обо всем нужно разработчику.

Цитата
Да - нельзя использовать совместные ресурсы в прерывании. Так я этого и так стараюсь не делать во избежание. Я стараюсь чтобы каждый процесс был завершён. Выходные данные одного процесса - входные для другого. А перепинговывание - это просто доп сложности.

Вот это и есть та самая забота - по устранению проблем связанных с синхронизацией, которую компилятор за Вас не сделает.

Цитата
В завершение скажу, что допускаю возможность повторного входа в прерывание (если оно грамотно написано).

Ключевое слово "если" wink.gif

Цитата
Ну например ситуация: идут нерегулярные прерывания от Int0 со средним временем не более одного прерывания в 200мкс. Обработка его занимает 60мкс. При этом оно может придти в конце интервала или в начале, таким образом минимальный разрыв м/у ними может составлять 10мкс.

Вопрос, зачем это надо? Ведь после завершения обработки первого прерывания можно спокойно обработать и второе.

Цитата
Кстати изделие с протоколом описанным в моём топике выше выпускалось серийно с момента появления 4414 (максимальная тактовая частота 8000 поэтому о 14745600 речи не шло). К слову скажу что аналогичное изделие выпускалось в Днепропетровске. И было оно основано на PIC и тоже частота кварца была невысока.

Видимо это изделие решает не такую задачу как Вы описали.
На PIC'е подозреваю ребятам тяжко пришлось поизвращаться на асме, причем без прерываний, т.к. ваша задача (в том виде в каком Вы ее поставили) на PIC с 200ns циклом @20Mhz с прерываниями нерешаема вообще.
archi2000
Я думаю, что стабилитрон как ограничитель работать не будет.
Если в сети 220В и резистор 100к то ток будет 2 мА. Нужно смотреть характеристику стабилитрона.
Минимальный ток стабилизации около 20 мА. Он не выходит на обратную ветвь характеристики и получается вместо 5В примерно 2,5В.
Лучше поставить регулируемый стабилитрон TL431.
Alex_Pol
В сети 310 вольт. Амплитудное значение.
xemul
И стабилитроны бывают разные. Есть с нормированием напряжения стабилизации и от 1 мА .
bodja74
Цитата(archi2000 @ Dec 3 2006, 11:56) *
Я думаю, что стабилитрон как ограничитель работать не будет.
Если в сети 220В и резистор 100к то ток будет 2 мА. Нужно смотреть характеристику стабилитрона.
Минимальный ток стабилизации около 20 мА. Он не выходит на обратную ветвь характеристики и получается вместо 5В примерно 2,5В.
Лучше поставить регулируемый стабилитрон TL431.


А вы попробуйте,я же не из пальца это высмоктал,если по вашему то нужно ставить 10кОм,а в ИПБ от 18 до 33КОм хватает не то что для замера ,а для стартовой запитки микросхемы.
Alex_Pol
2 xemul Точно. Были такие 2С133В. Ток стабилизизации от 1 до 30 ма.
archi2000
Автор топика не говорит какой у него стабилитрон.
У меня вот какие мысли по этому поводу.
Чтобы с точностью допустим микросекунды отловить нули сетевого напряжения в двух каналах Int0 и Int1 нужно две цепочки диод резистор стабилитрон. Диоды включить противофазно и выпрямить две разных полуволны. Стабилитрон с большим диапазоном тока стабилизации, например 1 мА - 100 мА.
Каждое прерывание настроить на задний фронт прямоугольного импульса. Прерывания будут срабатывать почти точно в нулях. Как рассчитать резистор? Допустим мах напряжение 310В+20%=370В Ток 100 мА - резистор 370В/0,1А=3,7кОм. Что-то мало для розетки? Не сгорит ли?
Допустим 10 кОм поставим.
Тогда мгновенное напряжение сетевой синусоиды, при котором еще лог.1 на входе Int будет
1 мА*10кОм=10В.
Дальше стабилитрон уже не держит 5В и наступает крутой задний фронт. Я тут никак не учитывал ток через PIN процессора. TL431 имеет ток катода от 1 до 100 мА и регулируемое напряжение стабилизации от 2,5 В до 36 В и с помощью еще двух резисторов по 10 кОм может быть настроен на 5 В. Получим хорошие прямоугольники с крутыми фронтами.
Какие у кого мысли по этому поводу?
demaven
и будем греть плату и все вокруг. Прикинтье кол-во тепла, которое будет выделяться на резисторах и что с этим теплом делать - яйца жарить?

"Допустим 10 кОм поставим."

а резистор на 10 ком поместиться? 220/10 =22ма множим на 220 имеем почти 5 ватт, в пору что-нибудь жарить
archi2000
Поставим 100 кОм.
Но пока не сказано какая точность по времени в разных каналах Int0 и Int1 все равно хочется поставить две цепочки и настроить прерывания по заднему фронту.
Еще вопрос - какая тактовая частота процессора? сколько потребляет процессор, ЖКИ и клавиатура у автора? Как правильно запитать это все без трансформатора, если допустим ток потребления большой?
Допустим 10 мА?
SasaVitebsk
Цитата(defunct @ Dec 3 2006, 02:09) *
Гм.. Аппаратно - это не громко, а точно сказано, т.к. имеются средства аппаратуры, которые автоматически блокируют возможность вызова прерываний того же уровня. Чтобы повторить это на AVR, Вам потребуется на входе в прерывание вручную блокировать все прерывания того же уровня, и лишь после этого устанавливать флаг I. Т.о. накладные расходы получатся весьма значительными, а выигрышь от всего этого - практически никаким.

Как правило, прерываний не десятки а 2-5 и, даже если есть необходимость запрещать прерывания равного уровня накладные расходы не так уж и велики, - 2 такта на каждый запрещённый вектор. Но этого, как правило при 2-ух уровневой системе не требуется. Потому что ничего, фактически не произойдёт, а просто может поменятся порядок обработки событий (см. мой топик выше). А Выигрыш легко виден на осциллограмме в моём примере.

Цитата
Разрешая прерывания глобально, вне зависимости от Вас, идет работа со стеком. (вызовы других обработчиков прерываний).

И что тут страшного? Ну идёт, и что???? На то он и стэк! Это даже замечательно! Проблема может возникнуть как раз если работа идёт не через стек, а обходным путём. Ну например, для экономии в двух равных прерываниях использованы вместо push SREG, mov save_sreg,sreg.

Цитата
Ну-ну.. smile.gif
Компилятор ни о чем не позаботится, ему все равно какие строки переводить в код. Заботиться обо всем нужно разработчику.
...
Вот это и есть та самая забота - по устранению проблем связанных с синхронизацией, которую компилятор за Вас не сделает.
...
Ключевое слово "если" wink.gif

Мы говорили уже на эту тему. В том плане, что "это не проблема реализации, а проблема опытности разработчика". И говоря что "компилятор" обо всём позаботится я имел ввиду начинающих программистов. Проблемы начнуться тогда когда они станут "профи" и начнут запрещать компилятору использовать регистры и использовать вручную, начнутся тогда, когда они начнут вставлять свои куски ассеблерного кода или начнут переписывать обработчики прерываний, начнутся тогда, когда попытаются в прерывание воткнуть пол-головы и начнут м/у прерываниями передавать сложные данные. Иначе ничего не будет. Обычно прерывания логически слабо связаны м/у собой, так как они обрабатывают РАЗНЫЕ события. И, как правило, ничего страшного не происходит если из прерывания, которое формирует временные метки будет вызвано прерывание от USART а из него прерывание от Int0.

На самом деле это что-то сродни обсуждаемому вопросу: "зачем нужна OS". Лучше возможно и не станет, но красивее - точно. Каждый процесс логически закончен! А здесь ещё и выигрыш для конкретного обработчика (проигрыш для остальных).

У меня сейчас - светодиодное панно. Прерывания от USART - 3 (rs485), от таймера (таймаут для rs485), от таймера - регенерация экрана, от таймера (софтовое - каждое девятое прерывание регенерации) - обработка команд и голова приём команд. Высокоуровневое - регенерация. Графика и анимированная графика, полутона и цвет. Никаких специальных приёмов - нет. С максимальной оптимизацией по времени. IAR C. Кстати малейшие девиации при отображении картинки - видны на глаз.

Можно ли написать без этого? Да безусловно! В этом особая прелесть программирования, - творчество и совершенная свобода выбора. Будет ли красивее? Вполне возможно, но уже не мной. К тому же красота - субъективное понятие.
Но главное - у меня всё работает тоже. И я оцениваю своё решение как красивое. Значит моё решение тоже имеет право на жизнь. И я думаю, многие програмисты используют мой подход, так как я ни в коей мере не считаю его "своим изобретением". Возможно он родился раньше меня.

PS: А.Г.Алексенко,А.А.Галицын,А.Д.Иванников "Проектирование радио-электронной аппаратуры на микро-процессорах", Москва "Радио и связь" 1984г. (Когда-то была бестселером по i8080) стр. 51 "Для задания простого приоритетного режима не требуется никаких дополнительных команд, кроме команд инициализации. ... Поэтому для организации многоуровневой системы прерываний необходимо выполнить програмную установку этого тригера командой EI (РАЗРЕШИТЬ ПРЕРЫВАНИЯ) МП. ... Для реализации многоуровневой системы прерываний каждая из п/программ обслуживания должна иметь определённую структуру (рис.1.26)"
(1.26) Начало -- сохр. в стеке исп. регистров -- EI -- тело -- DI -- Сброс разряда регистра прер. (для avr не надо) -- EI -- RET
xemul
Цитата(archi2000 @ Dec 3 2006, 15:05) *
Автор топика не говорит какой у него стабилитрон.
У меня вот какие мысли по этому поводу.
Чтобы с точностью допустим микросекунды отловить нули сетевого напряжения

Прежде, чем допускать эту точность, очень желательно оценить шумы в электрической сети.
Цитата
в двух каналах Int0 и Int1 нужно две цепочки диод резистор стабилитрон. Диоды включить
...

А смысл всего этого мероприятия? Компаратор в AVR'ах удовлетворительно работает около земли. Не проще ли подать сигнал через резистор кил в 500-1000 на вход компаратора (естесно, нужна пара защитных диодов встречно-параллельно на землю; если предполагается использовать SMD-резисторы, то придется ставить последовательно не меньше двух типоразмера 1206), опору повесить на землю, и попытаться порадоваться жизни? Потом огорчиться, обнаружив шумы в сети, и задуматься над проблемой фильтрации этих самых шумов. А вот здесь уже можно будет подумать и про требуемую/желаемую точность определения 0 напряжения.
archi2000
Итак есть ФАЗА и НОЛЬ. Ноль на вывод земли процессора подключим. Дальше пока на внешних прерываниях будем работать.
К ФАЗЕ диод, резистор 30 кОм и стабилитрон 5В. И это подключить к двум выводам МК?
Int0 настроить на передний фронт, а Int1 на задний?
Дальше к стабилитрону подключить развязывающий диод Шоттки и электролит для фильтрации пульсаций и запитать процессор?
Так надеюсь будет работать при токе процессора 10мА.
xemul
Цитата(archi2000 @ Dec 3 2006, 16:38) *
Итак есть ФАЗА и НОЛЬ. Ноль на вывод земли процессора подключим. Дальше пока на внешних прерываниях будем работать.
К ФАЗЕ диод, резистор 30 кОм и стабилитрон 5В. И это подключить к двум выводам МК?
Int0 настроить на передний фронт, а Int1 на задний?
Дальше к стабилитрону подключить развязывающий диод Шоттки и электролит для фильтрации пульсаций и запитать процессор?
Так надеюсь будет работать при токе процессора 10мА.

Если предполагается управлять тиристором, включенным именно по фазе (т.е. нагрузка привязана к нулю), то удобнее Vcc контроллера привязать к фазе, а балласт по питанию включать со стороны Gnd контроллера.
Питание контроллера и цепь z-cross лучше не объединять.
Чем Вы собираетесь занять контроллер, чтобы он начал потреблять 10 мА? Для бестрансформаторного питания, имхо, это многовато.
И в чем цимес использования и INT0, и INT1 для определения 0? Кста, если соберетесь считать погрешности и точности, сравните токи входов контроллера в режимах цифры и аналога.
archi2000
Да, спасибо за ответы.
Я вообще не знаю зачем автору два прерывания. Достаточно выпрямить это диодным мостом, будут полуволны 100 Гц, можно отлавливать один задний фронт одним внешним прерыванием и управлять симистором. Я никогда не делал безтрансформаторное включение - поэтому и спрашиваю.
xemul
Цитата(archi2000 @ Dec 3 2006, 16:59) *
Да, спасибо за ответы.
Я вообще не знаю зачем автору два прерывания. Достаточно выпрямить это диодным мостом, будут полуволны 100 Гц, можно отлавливать один задний фронт одним внешним прерыванием и управлять симистором. Я никогда не делал безтрансформаторное включение - поэтому и спрашиваю.

Если выпрямлять, то симистор (aka симметричный тиристор) не нужен, достаточно обычного. Но при большой мощности нагрузки суммарные потери на тиристоре и выпрямителе будут больше, чем на одном симисторе.
Неудобство без выпрямителя - питание схемы только от одного полупериода, но это не самое большое зло при ее среднем потреблении до 2-3 мА. Чтобы уложиться в такое потребление (тиристорам средней мощности нужно дунуть в управляющий электрод 5-20 мА, чтобы они открылись), имеет смысл открывать тиристор не уровнем, а пачкой коротких импульсов.
archi2000
Я бы такое устройство побоялся покупать без гальванической развязки. Нажимать на кнопки клавиатуры зная, что к контактам внутри кнопки фаза через резистор как-то страшно.
Трансформатор наверное желательно поставить.
xemul
Цитата(archi2000 @ Dec 3 2006, 19:18) *
Я бы такое устройство побоялся покупать без гальванической развязки. Нажимать на кнопки клавиатуры зная, что к контактам внутри кнопки фаза через резистор как-то страшно.
Трансформатор наверное желательно поставить.

У автора треда вопросы про z-cross и про клавиатуру вроде бы разнесены по разным пунктам.
Вы в магазинах электротоваров видели регуляторы яркости лампочек? И наши, и вражеские. Все с сертификатами, но без трансформаторов. А во времена незапамятные "Светлана" (?) делала контроллеры для такого дела вообще с сенсорным управлением, и люди как-то выживали. А вот контроллеры дохлиwink.gif. Так что неизвестно, кому больнее - людям или микросхемам.
Screw
А тема как оказалось очень живая wink.gif

Спасибо всем за обсуждение, пара вопросов отпала сама собой.

Транс стоит - через мост и 7805 запитан контроллер и лсд. Фаза и ноль - пока что подаются через мегаомники напрямую к int0 (было решено проверять PIND.2..... выводы нужны), в дальнейшем можно будет с транса попробовать.....
По поводу симисторов - не мой случай, алгоритм такой, что симисторы не подойдут.

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

Интересен еще один момент - кто как делает развязку силовой части и контроллера? В моем случае надо управлять тиристорами. Хотел поставить высокочастотные трансформаторы - но дорого, объемно, да и нет у нас их в городе.

С оптопарами как-то не имел дело, может вы мне чем поможите...
Тиристоры предполагаются со следующими номиналами: Uобр 400-450 В, рабочий ток до 200мА.

Кстати, имеет ли смысл искать что-то быстродействующее(я про тиристоры)?

Цитата(archi2000 @ Dec 3 2006, 16:59) *
Да, спасибо за ответы.
Я вообще не знаю зачем автору два прерывания. Достаточно выпрямить это диодным мостом, будут полуволны 100 Гц, можно отлавливать один задний фронт одним внешним прерыванием и управлять симистором. Я никогда не делал безтрансформаторное включение - поэтому и спрашиваю.


Мне надо знать какая идет по счету полуволна + надо знать, положительная или отрицательная wink.gif
Не все так просто wink.gif
archi2000
Про оптроны и тиристоры можно тут посмотреть.
http://www.qrx.narod.ru/bp/up.htm
Есть трехквадрантные симисторы, может подойдут
http://www.dectel.ru/dectel_el/publications/3q.shtml
Screw
Да общий принцип-то понятен.... интересует вся обвязка от вывода контроллера до тиристора с номиналами...

Смотрю я в сторону оптотиристоров - но рука по 80 р. за каждый отдавать не поднимается.... а надо 12 штук...
xemul
Цитата(Screw @ Dec 3 2006, 22:24) *
Да общий принцип-то понятен.... интересует вся обвязка от вывода контроллера до тиристора с номиналами...
Смотрю я в сторону оптотиристоров - но рука по 80 р. за каждый отдавать не поднимается.... а надо 12 штук...

MOC3021, MOC3023, MOC3041, MOC3042, MOC3061..3 - стоят 10-20 руб. До 200 мА можно прямо ими, больше - привесить к ним что-нибудь помощнее. Подробности в даташитах.
Screw
Цитата(xemul @ Dec 3 2006, 22:41) *
Цитата(Screw @ Dec 3 2006, 22:24) *

Да общий принцип-то понятен.... интересует вся обвязка от вывода контроллера до тиристора с номиналами...
Смотрю я в сторону оптотиристоров - но рука по 80 р. за каждый отдавать не поднимается.... а надо 12 штук...

MOC3021, MOC3023, MOC3041, MOC3042, MOC3061..3 - стоят 10-20 руб. До 200 мА можно прямо ими, больше - привесить к ним что-нибудь помощнее. Подробности в даташитах.


Спасибо!!! a14.gif
То, что надо!!!

Поторопился с ответом - там симисторы.... Но всеравно спасибо, будем искать wink.gif
demaven
Последние в списке МОСов переключаются ТОЛЬКО при переходе через ноль, для фазного регулирования не подойдут
xemul
Цитата(demaven @ Dec 4 2006, 06:26) *
Последние в списке МОСов переключаются ТОЛЬКО при переходе через ноль, для фазного регулирования не подойдут

Это понятно. Были помянуты для полноты картины. Разные же бывают задачиsmile.gif
defunct
bb-offtopic.gif
Цитата(SasaVitebsk @ Dec 3 2006, 16:02) *
Можно ли написать без этого? Да безусловно! В этом особая прелесть программирования, - творчество и совершенная свобода выбора. Будет ли красивее? Вполне возможно, но уже не мной. К тому же красота - субъективное понятие.

Спасибо за потраченное Вами время!
Было интересно читать Ваши ответы.
К сожалению или к счастью мне нечем возразить на Ваш последний пост.
SasaVitebsk
Цитата(defunct @ Dec 4 2006, 17:49) *
bb-offtopic.gif
Цитата(SasaVitebsk @ Dec 3 2006, 16:02) *

Можно ли написать без этого? Да безусловно! В этом особая прелесть программирования, - творчество и совершенная свобода выбора. Будет ли красивее? Вполне возможно, но уже не мной. К тому же красота - субъективное понятие.

Спасибо за потраченное Вами время!
Было интересно читать Ваши ответы.
К сожалению или к счастью мне нечем возразить на Ваш последний пост.


cheers.gif Взаимно!
Screw
Цитата(demaven @ Dec 4 2006, 06:26) *
Последние в списке МОСов переключаются ТОЛЬКО при переходе через ноль, для фазного регулирования не подойдут


Ошибся я маленько..... 600 милиампер там ток. И-то - не факт. Двигатель УАД-32Ф.... кажется 100 Вт. мощность. Сопротивление одной обмотки 365 Ом, соеденины в звезду.

Питание будет подаваться в разные полуволны на разные обмотки, т.о. хочу получить вращающееся поле и заставить асинхронник ехать wink.gif Как думаете, наивно?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.