|
|
  |
Много вопросов накопилось... Сильно не глумитесь, ATMega16 & etc |
|
|
|
Dec 3 2006, 15:38
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 30-09-05
Пользователь №: 9 098

|
Поставим 100 кОм. Но пока не сказано какая точность по времени в разных каналах Int0 и Int1 все равно хочется поставить две цепочки и настроить прерывания по заднему фронту. Еще вопрос - какая тактовая частота процессора? сколько потребляет процессор, ЖКИ и клавиатура у автора? Как правильно запитать это все без трансформатора, если допустим ток потребления большой? Допустим 10 мА?
Сообщение отредактировал archi2000 - Dec 3 2006, 15:58
|
|
|
|
|
Dec 3 2006, 16:02
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(defunct @ Dec 3 2006, 02:09)  Гм.. Аппаратно - это не громко, а точно сказано, т.к. имеются средства аппаратуры, которые автоматически блокируют возможность вызова прерываний того же уровня. Чтобы повторить это на AVR, Вам потребуется на входе в прерывание вручную блокировать все прерывания того же уровня, и лишь после этого устанавливать флаг I. Т.о. накладные расходы получатся весьма значительными, а выигрышь от всего этого - практически никаким. Как правило, прерываний не десятки а 2-5 и, даже если есть необходимость запрещать прерывания равного уровня накладные расходы не так уж и велики, - 2 такта на каждый запрещённый вектор. Но этого, как правило при 2-ух уровневой системе не требуется. Потому что ничего, фактически не произойдёт, а просто может поменятся порядок обработки событий (см. мой топик выше). А Выигрыш легко виден на осциллограмме в моём примере. Цитата Разрешая прерывания глобально, вне зависимости от Вас, идет работа со стеком. (вызовы других обработчиков прерываний). И что тут страшного? Ну идёт, и что???? На то он и стэк! Это даже замечательно! Проблема может возникнуть как раз если работа идёт не через стек, а обходным путём. Ну например, для экономии в двух равных прерываниях использованы вместо push SREG, mov save_sreg,sreg. Цитата Ну-ну.. Компилятор ни о чем не позаботится, ему все равно какие строки переводить в код. Заботиться обо всем нужно разработчику. ... Вот это и есть та самая забота - по устранению проблем связанных с синхронизацией, которую компилятор за Вас не сделает. ... Ключевое слово "если"  Мы говорили уже на эту тему. В том плане, что "это не проблема реализации, а проблема опытности разработчика". И говоря что "компилятор" обо всём позаботится я имел ввиду начинающих программистов. Проблемы начнуться тогда когда они станут "профи" и начнут запрещать компилятору использовать регистры и использовать вручную, начнутся тогда, когда они начнут вставлять свои куски ассеблерного кода или начнут переписывать обработчики прерываний, начнутся тогда, когда попытаются в прерывание воткнуть пол-головы и начнут м/у прерываниями передавать сложные данные. Иначе ничего не будет. Обычно прерывания логически слабо связаны м/у собой, так как они обрабатывают РАЗНЫЕ события. И, как правило, ничего страшного не происходит если из прерывания, которое формирует временные метки будет вызвано прерывание от USART а из него прерывание от Int0. На самом деле это что-то сродни обсуждаемому вопросу: "зачем нужна OS". Лучше возможно и не станет, но красивее - точно. Каждый процесс логически закончен! А здесь ещё и выигрыш для конкретного обработчика (проигрыш для остальных). У меня сейчас - светодиодное панно. Прерывания от USART - 3 (rs485), от таймера (таймаут для rs485), от таймера - регенерация экрана, от таймера (софтовое - каждое девятое прерывание регенерации) - обработка команд и голова приём команд. Высокоуровневое - регенерация. Графика и анимированная графика, полутона и цвет. Никаких специальных приёмов - нет. С максимальной оптимизацией по времени. IAR C. Кстати малейшие девиации при отображении картинки - видны на глаз. Можно ли написать без этого? Да безусловно! В этом особая прелесть программирования, - творчество и совершенная свобода выбора. Будет ли красивее? Вполне возможно, но уже не мной. К тому же красота - субъективное понятие. Но главное - у меня всё работает тоже. И я оцениваю своё решение как красивое. Значит моё решение тоже имеет право на жизнь. И я думаю, многие програмисты используют мой подход, так как я ни в коей мере не считаю его "своим изобретением". Возможно он родился раньше меня. PS: А.Г.Алексенко,А.А.Галицын,А.Д.Иванников "Проектирование радио-электронной аппаратуры на микро-процессорах", Москва "Радио и связь" 1984г. (Когда-то была бестселером по i8080) стр. 51 "Для задания простого приоритетного режима не требуется никаких дополнительных команд, кроме команд инициализации. ... Поэтому для организации многоуровневой системы прерываний необходимо выполнить програмную установку этого тригера командой EI (РАЗРЕШИТЬ ПРЕРЫВАНИЯ) МП. ... Для реализации многоуровневой системы прерываний каждая из п/программ обслуживания должна иметь определённую структуру (рис.1.26)" (1.26) Начало -- сохр. в стеке исп. регистров -- EI -- тело -- DI -- Сброс разряда регистра прер. (для avr не надо) -- EI -- RET
|
|
|
|
|
Dec 3 2006, 16:14
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(archi2000 @ Dec 3 2006, 15:05)  Автор топика не говорит какой у него стабилитрон. У меня вот какие мысли по этому поводу. Чтобы с точностью допустим микросекунды отловить нули сетевого напряжения Прежде, чем допускать эту точность, очень желательно оценить шумы в электрической сети. Цитата в двух каналах Int0 и Int1 нужно две цепочки диод резистор стабилитрон. Диоды включить ... А смысл всего этого мероприятия? Компаратор в AVR'ах удовлетворительно работает около земли. Не проще ли подать сигнал через резистор кил в 500-1000 на вход компаратора (естесно, нужна пара защитных диодов встречно-параллельно на землю; если предполагается использовать SMD-резисторы, то придется ставить последовательно не меньше двух типоразмера 1206), опору повесить на землю, и попытаться порадоваться жизни? Потом огорчиться, обнаружив шумы в сети, и задуматься над проблемой фильтрации этих самых шумов. А вот здесь уже можно будет подумать и про требуемую/желаемую точность определения 0 напряжения.
|
|
|
|
|
Dec 3 2006, 16:38
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 30-09-05
Пользователь №: 9 098

|
Итак есть ФАЗА и НОЛЬ. Ноль на вывод земли процессора подключим. Дальше пока на внешних прерываниях будем работать. К ФАЗЕ диод, резистор 30 кОм и стабилитрон 5В. И это подключить к двум выводам МК? Int0 настроить на передний фронт, а Int1 на задний? Дальше к стабилитрону подключить развязывающий диод Шоттки и электролит для фильтрации пульсаций и запитать процессор? Так надеюсь будет работать при токе процессора 10мА.
|
|
|
|
|
Dec 3 2006, 16:54
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(archi2000 @ Dec 3 2006, 16:38)  Итак есть ФАЗА и НОЛЬ. Ноль на вывод земли процессора подключим. Дальше пока на внешних прерываниях будем работать. К ФАЗЕ диод, резистор 30 кОм и стабилитрон 5В. И это подключить к двум выводам МК? Int0 настроить на передний фронт, а Int1 на задний? Дальше к стабилитрону подключить развязывающий диод Шоттки и электролит для фильтрации пульсаций и запитать процессор? Так надеюсь будет работать при токе процессора 10мА. Если предполагается управлять тиристором, включенным именно по фазе (т.е. нагрузка привязана к нулю), то удобнее Vcc контроллера привязать к фазе, а балласт по питанию включать со стороны Gnd контроллера. Питание контроллера и цепь z-cross лучше не объединять. Чем Вы собираетесь занять контроллер, чтобы он начал потреблять 10 мА? Для бестрансформаторного питания, имхо, это многовато. И в чем цимес использования и INT0, и INT1 для определения 0? Кста, если соберетесь считать погрешности и точности, сравните токи входов контроллера в режимах цифры и аналога.
|
|
|
|
|
Dec 3 2006, 16:59
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 30-09-05
Пользователь №: 9 098

|
Да, спасибо за ответы. Я вообще не знаю зачем автору два прерывания. Достаточно выпрямить это диодным мостом, будут полуволны 100 Гц, можно отлавливать один задний фронт одним внешним прерыванием и управлять симистором. Я никогда не делал безтрансформаторное включение - поэтому и спрашиваю.
|
|
|
|
|
Dec 3 2006, 17:24
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

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

Группа: Новичок
Сообщений: 38
Регистрация: 30-09-05
Пользователь №: 9 098

|
Я бы такое устройство побоялся покупать без гальванической развязки. Нажимать на кнопки клавиатуры зная, что к контактам внутри кнопки фаза через резистор как-то страшно. Трансформатор наверное желательно поставить.
|
|
|
|
|
Dec 3 2006, 20:33
|

Частый гость
 
Группа: Свой
Сообщений: 149
Регистрация: 29-11-06
Из: Барнаул
Пользователь №: 22 916

|
А тема как оказалось очень живая  Спасибо всем за обсуждение, пара вопросов отпала сама собой. Транс стоит - через мост и 7805 запитан контроллер и лсд. Фаза и ноль - пока что подаются через мегаомники напрямую к int0 (было решено проверять PIND.2..... выводы нужны), в дальнейшем можно будет с транса попробовать..... По поводу симисторов - не мой случай, алгоритм такой, что симисторы не подойдут. Фактически, вся программа была сведена к одному прерыванию - датчику нуля. Так что весь тред по-поводу многоуровневом прерывании был затеян, как выяснилось, зря. Интересен еще один момент - кто как делает развязку силовой части и контроллера? В моем случае надо управлять тиристорами. Хотел поставить высокочастотные трансформаторы - но дорого, объемно, да и нет у нас их в городе. С оптопарами как-то не имел дело, может вы мне чем поможите... Тиристоры предполагаются со следующими номиналами: Uобр 400-450 В, рабочий ток до 200мА. Кстати, имеет ли смысл искать что-то быстродействующее(я про тиристоры)? Цитата(archi2000 @ Dec 3 2006, 16:59)  Да, спасибо за ответы. Я вообще не знаю зачем автору два прерывания. Достаточно выпрямить это диодным мостом, будут полуволны 100 Гц, можно отлавливать один задний фронт одним внешним прерыванием и управлять симистором. Я никогда не делал безтрансформаторное включение - поэтому и спрашиваю. Мне надо знать какая идет по счету полуволна + надо знать, положительная или отрицательная  Не все так просто
Сообщение отредактировал Screw - Dec 3 2006, 20:31
|
|
|
|
|
Dec 3 2006, 22:57
|

Частый гость
 
Группа: Свой
Сообщений: 149
Регистрация: 29-11-06
Из: Барнаул
Пользователь №: 22 916

|
Цитата(xemul @ Dec 3 2006, 22:41)  Цитата(Screw @ Dec 3 2006, 22:24)  Да общий принцип-то понятен.... интересует вся обвязка от вывода контроллера до тиристора с номиналами... Смотрю я в сторону оптотиристоров - но рука по 80 р. за каждый отдавать не поднимается.... а надо 12 штук...
MOC3021, MOC3023, MOC3041, MOC3042, MOC3061..3 - стоят 10-20 руб. До 200 мА можно прямо ими, больше - привесить к ним что-нибудь помощнее. Подробности в даташитах. Спасибо!!! То, что надо!!! Поторопился с ответом - там симисторы.... Но всеравно спасибо, будем искать
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|