Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

Возврат из прерывания INT0, очевидно задумывалось так. Хотя, конечно, разбираться в бейсике - удовольствие на любителя, движок форума со мной согласен и испоганил подсветку синтаксиса.

Может я считать не умею, но прерывание должно возникать с частотой 100 Гц (частота перехода сетевого напряжения через ноль, без учета дребезга), то есть раз в 10 мс. А прерывание обрабатывается от нескольких тактов, что можно считать 0, до 0.9 мс * 256 = 230,4 мс, то есть регулировка будет заметна при Level в диапазоне 0 - 11.

Не говоря о том, что, скорее всего, ошибка в электронике, а не только программировании.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Спасибо за ответы. Фото плат и схему прилагаю. Да, Return возврат из INT0. Оптопара - 4N25.

В протеусе все отрабатывает правильно, дело не в прошивке. Тут именно аппаратная проблема, абсолютно не понятная.

На схеме и плате есть "лишние" элементы, они не используются сейчас вообще.

aefbed5d9ccf.jpghe765ca253d7d.jpg

86eb94c7cd2e.jpg

Изменено пользователем Anonim
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

По железу без схемы тоже много сказать нельзя. Приведена схема цифровой / низковольтной части, а нужна еще высоковольтная и определение перехода через нуль. На платке вон установлены два диодных моста, какое напряжение туда подается - неизвестно. По имеющемуся куску: что такое D2 - диод или все-таки стабилитрон? Для чего нужен Q2, включенный эмиттерным повторителем? Входное сопротивление вывода микросхемы достаточно велико, чтобы не приходилось извращаться с многокаскадным усилением тока, там бы и резистивного делителя хватило.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Два вопроса, которые я так и не успел проверить (прежде чем свернуть занятия с электроникой). PIC16F628A, на схеме коммутации встроенных компараторов есть вариант - когда ответвление от выхода компаратора выводится на один из пинов, и помечено как цифровой выход. Что будет, если попытаться создать обратную связь? Т.е. использовать компаратор не по назначению, как усилитель, чтобы внешний не ставить?

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

Буду проверять это, когда вернусь к этому делу, но в ближайшее время не ожидается. А любопытство подтачивает узнать :)

Изменено пользователем tcoder
Ссылка на комментарий
Поделиться на другие сайты

Судя по тому что схема питается напряжением со входа детектора нуля
Да не похоже, иначе зачем там два диодных моста? Логично было бы предназначить один для питания, а второй - для выделения нуля. В аналогичной ситуации я делал детектор нуля на оптопаре, которая была включена большую часть времени. Считая сигнал симметричным, просто определял середину "выключенного" участка - с достаточной точностью это и есть нуль.
Вообще ,я бы для этих целей использовал бы таймер а не задержку.
Абсолютно и на 100% согласен. Ставить в обработчик задержку на четверть секунды это в любом случае плохая идея. Настроить таймер на режим ШИМ с запасом по частоте (герц 90 например) и по внешнему прерыванию сбрасывать счетчик. Если же автору сильно не хочется нагружать таймеры (не особо в это верится, но мало ли), ловить внешнее прерывание и обрабатывать задержку лучше в основном цикле:

#define DTIME 1000000/100/256 //1000000 - число микросекунд в секунде, 100 - сетевая частота (Гц), 256 - разрядность счетчика.
#define OUT_ON() PORTD &=~(1<<4)
#define OUT_OFF() PORTD |= (1<<4)
...
while(1){ //бесконечный цикл
if(GIFR & (1<<INTF0)){ //если прерывание наступило (обработчик при этом, разумеется, не нужен)
 GIFG |= (1<<INTF0); //сбрасываем флаг
 OUT_ON();
 for(unsigned char i=0;i<time;i++)_delay_us(DTIME); //задержка
 OUT_OFF();
}
...
}

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

С пиками не знаком, поэтому предположение основано на общих соображениях. Скорее всего на выходе встроенного компаратора возникнет дребезг, как если бы он был внешним. Соответственно и прерывание будет вызвано неоднократно.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Скорее всего на выходе встроенного компаратора возникнет дребезг, как если бы он был внешним. Соответственно и прерывание будет вызвано неоднократно.

Да вот на графике и показан дребезг. Но неясно, чем определяется его частота. На графике отдельных пиков (всмысле вершин сигнала) не видно - сплошной фон. Любопытный момент. Это очень плохо, если оно будет вызываться беспрерывно... А если частота этих колебаний выше частоты работы всего кристалла.... а ну впринципе все равно сплошной вызов выходит....

Ссылка на комментарий
Поделиться на другие сайты

О каком беспрерывном вызывании идёт речь ?

Всё зависит от "качества" подаваемого сигнала на входы, а не от компаратора.

Если Вы будете подавать на вход "дрожащий" сигнал, естественно, он таковым и будет на выходе. При чётком подъёме/спуске сигнала любой крутизны, Вы будете на выходе иметь чёткие фронты.

Ссылка на комментарий
Поделиться на другие сайты

А какой будет эта частота для дискретного компаратора? Зависит от сигнала и шума, то есть предсказать ее практически невозможно, дребезг он дребезг и есть. Если частота выше тактовой контроллера - не страшно (хотя часть мусорных импульсов и не будет контроллером замечена). Если я правильно понимаю механизм прерываний, при первом переходе через нуль будет выставлен флаг прерывания и он будет висеть, пока не закончится обработчик прерывания или флаг не будет сброшен программно. Сколько бы раз напряжение за это время ни изменилось, на флаг это не повлияет.

Например, скорость обработки прерывания 10 мкс, частота дребезга пусть 1 ГГц (не важно сколько, главное что больше времени обработки прерывания, как обычно и бывает), а длительность 55 мкс. Тогда прерывание отработает 6 раз.

Надеюсь, достаточно хорошо сформулировал мысль.

О каком беспрерывном вызывании идёт речь ?

Всё зависит от "качества" подаваемого сигнала на входы, а не от компаратора.

Мы говорим о случае, когда разность сигналов на входах комаратора меньше его чувствительности. Скажем, сигнал разряда батарейки, не знаю для чего tcoder хочет его использовать. В этой "мертвой зоне" на результат будут оказывать влияние все шумы, который компаратор только сможет поймать, включая внутренние.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Флаг прерывания снимается как только будет вызван обработчик. Если во время обработки "сработает" условие прерывания, флаг будет установлен вновь и на выходе из обработчика выполнится одна команда основной программы и снова в обработчик прерывания, отрабатывать прерывание.

Да, сам вход прерывания синхронный, его состояние защелкивается по тактовой частоте контроллера и сравнивается с предыдущим значением - так отлавливаются фронты сигнала, и это же является недостатком поскольку существует минимальная длительность импульса на который может гарантировано отреагировать контроллер, более короткие могут остаться незамеченными, а могут и "сработать".

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Поймал прерывание - первым делом измени порог компаратора (ПОС). Использовать компараторы как ОУ (не по назначению), думаю, не получится. Отличие - компараторы выполняются выходным каскадом с открытым коллектором (несимметричным).

Ссылка на комментарий
Поделиться на другие сайты

Поймал прерывание - первым делом измени порог компаратора (ПОС).

Имеется ввиду изменить опорное напряжение, чтобы он перестал "трясьтись"? Не уверен, что эта операция достаточно быстро произойдёт. Надо получше мне изучить механизм прерываний.

компараторы выполняются выходным каскадом с открытым коллектором

В данном случае только один выполнен, как открытый сток, а второй просто выведен, и помечен D - т.е. цифровой как бы. Другое вот на этой схеме напрягает: почему то объединены неинвертирующие выводы, а инвертирующие раздельно. Хотя не имеет значения, куда я буду опорное напряжение подавать, а куда измеряемое? :) (ну разве что внутренний сигнал инвертируется из за этого)

post-159698-0-00139900-1413442923.png

Ну и "трясучка" на всякий случай

post-159698-0-83536000-1413442975.png

*кстати флаг прерывания походу из обработчика должен сниматься программно.

Изменено пользователем tcoder
Ссылка на комментарий
Поделиться на другие сайты

А Вы уверены, что это нарисована именно "трясучка", а не какой-нибудь гистерезис ?

По поводу флага. Не "походу", а программно. Сбрасывать флаг нужно самостоятельно.

Ссылка на комментарий
Поделиться на другие сайты

Стандартная картинка работы компаратора. Без обратной связи велика вероятность многократных переключений.

Изменено пользователем BerZerKku
Ссылка на комментарий
Поделиться на другие сайты

А Вы уверены, что это нарисована именно "трясучка", а не какой-нибудь гистерезис ?

Не уверен. Но что бы в данном случае значил гестерезис?

Ссылка на комментарий
Поделиться на другие сайты

Имеется ввиду изменить опорное напряжение, чтобы он перестал "трясьтись"? Не уверен, что эта операция достаточно быстро произойдёт. Надо получше мне изучить механизм прерываний.

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

В данном случае только один выполнен, как открытый сток, а второй просто выведен, и помечен D - т.е. цифровой как бы.

Выход CMOS не годится для создания усилителя.

В даташите не усмотрел ничего про гистерезис.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Код вообще не мой, а с http://avrprojects.info/avr-projects/digital-dimmer-using-atmega8/, и немного поправленный для себя. Питание схемы и детектора нуля отдельное.

В прошивке немно изменен принцип управления: если в оригинале мы от импульса пересечения 0 отсчитываем нужное время, и потом открываем тиристор, то у меня сделано наоброт - мы сначала открываем тиристор, держим его включеным сколько надо и потом убираем напряжение с управляющего вывода.

Таймеры для этого использовать не хочу, у меня на них есть другие планы в будущем.

Ссылка на комментарий
Поделиться на другие сайты

Скорее, все же "трясучка". Гистерезис реализовать сложнее, к тому же регулировать его потом, если будет маленький - пропустит мощную помеху, если большой - не заметит слабый сигнал. А дребезг характерен и для дискретных компараторов. Кроме того, на графике гистерезис изображается белым прямоугольником, а не черным, то есть при одном значении переключился туда, при другом обратно. А черный означает, что переключиться может при любом значении внутри диапазона.

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

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

Ну а "скорее всего" и "непонятки" в сторону компаратора просто веселят. Откройте что-ли того же Хорвица и Хилла, там вы увидите точно такой же рисунок и даже найдете в тексте свою "трясучку".

Ссылка на комментарий
Поделиться на другие сайты

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

и... тиристор остается открытым до конца периода (даже со снятым управляющим током). Это нормальная работа тиристора.

Ссылка на комментарий
Поделиться на другие сайты

если в оригинале мы от импульса пересечения 0 отсчитываем нужное время, и потом открываем тиристор, то у меня сделано наоброт - мы сначала открываем тиристор, держим его включеным сколько надо и потом убираем напряжение с управляющего вывода.
жесть :rake:
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...