
BASCOM AVR в вопросах и ответах
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
В другой ветке писал, что moc3061, теперь уже другой стоит 

- Реклама
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
zero648 писал(а):Кстати, у тебя MOC3061 с zero-cross, а надо без него, например moc3052
Сейчас moc3041 без детектора нуля...
С уважением,
Алексей.
Алексей.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Как без детектора нуля, только что даташит смотрел moc3014 с zero-cross, я напрмер ставил moc3052.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
zero648 писал(а):Как без детектора нуля, только что даташит смотрел moc3014 с zero-cross, я напрмер ставил moc3052.
Вот цитирую из даташита:
DESCRIPTION
The MOC304_ Series are optically coupled
isolators consisting of a Gallium Arsenide
infrared emitting diode coupled with a monolithic
silicon detector performing the functions
of a zero crossing bilateral triac mounted in a
standard 6 pin dual-in-line package.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
zero648 писал(а):Как без детектора нуля, только что даташит смотрел moc3014 с zero-cross, я напрмер ставил moc3052.
Точно ! Видимо перепутал даташит. А без детектора сейчас нету, получается... Это принципиально ?
Опять придется ЧипДип кормить.
А как насчет синхронизации шима ?... Как это в Баскоме сотворить ?
С уважением,
Алексей.
Алексей.
- Реклама
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Принципиально, так как симистор нужно открывать не вовремя перехода через ноль, а в нужный нам момент фазы, а детектор нуля открывает симистор только во время перехода через ноль и если включен светодиод, допустим светодиод мы включили в момент фазы не равный нулю, в этот момент детектор нам симистор не откроет, он будет ждать только ноль, вот и получается либо на полную горит на максимальной мощности, либо вообще не горит. Моргать может из-за неточного отслеживания положительной и отрицательной полуволн, смотря по какой схеме её отслеживать.
Последний раз редактировалось zero648 Вт июл 31, 2012 10:45:08, всего редактировалось 1 раз.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Gordon Shumway писал(а):... Как это в Баскоме сотворить ?
Я из асмовских, все остальное для меня темный лес

- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Ну если в двух словах, то примерно так, подключаем наш детектор фазы к МК на внешнее прерывание INT0 или INT1, конфигурируем наше внешнее прерывание на срабатывание по изменению логического состояния на нем, т.е. по переднему и заднему фронту. Пишем для него обработчик, отсюда и отталкиваемя, задержка на включение импулься, длительность импульса, для этого можно припахать любой таймер, хоть 8 битный, хоть 16 битный.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
zero648 писал(а):Ну если в двух словах, то примерно так, подключаем наш детектор фазы к МК на внешнее прерывание INT0 или INT1, конфигурируем наше внешнее прерывание на срабатывание по изменению логического состояния на нем, т.е. по переднему и заднему фронту. Пишем для него обработчик, отсюда и отталкиваемя, задержка на включение импулься, длительность импульса, для этого можно припахать любой таймер, хоть 8 битный, хоть 16 битный.
Начал ваять программный шим. Что-то получилось
А как в Баскоме можно менять задержку в waitus ? В хелпе написано, что это константа...
С уважением,
Алексей.
Алексей.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Что константа, не понял?
Логика простая: при активации внешнего рперывания от INT включается обработчик оного, в обработчике задаем задержку через таймер, таймер отрабатывает задержку и включает свое прерывание, обработчик прерывания таймера настраивает таймер на отработку импульса открывания симистора, но до следующего внешнего прерывания импульс нужно отключить, иначе запустишь следующую полуволну на полную мощность.
Ну как то так
Логика простая: при активации внешнего рперывания от INT включается обработчик оного, в обработчике задаем задержку через таймер, таймер отрабатывает задержку и включает свое прерывание, обработчик прерывания таймера настраивает таймер на отработку импульса открывания симистора, но до следующего внешнего прерывания импульс нужно отключить, иначе запустишь следующую полуволну на полную мощность.
Ну как то так
-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: BASCOM AVR в вопросах и ответах
Вот вам на Баскоме управление симистором, через MOC3051
Код: Выделить всё
Z_cross Alias Pind.2 ' нога - вход, от детектора перехода через 0 (INT0)
Dimmer_out Alias Portb.1 ' нога - выход, к оптосимистору на симистор
Config Timer0 = Timer , Prescale = 8 ' конфигурируем таймер 0
Enable Timer0 : Start Timer0
Config Int0 = Change ' Установка прерывания INT0 на изменение сигнала
On Int0 Z_cross_int
Enable Int0 ' Прерывание на вход датчика перехода синусоиды через ноль
Config Timer1 = Timer , Prescale = 8 ' конфигурируем таймер 1
Enable Timer1 : Start Timer1
On Ovf1 Ovf1_my Nosave : Enable Ovf1
'----------
Dimmer_modul: ' ---------- УПРАВЛЕНИЕ ДИММЕРОМ ----------
Reset Watchdog
If Level_dimmer = 0 Then
Dimmer_on = 0
Disable Ovf1
Else
Dimmer_on = 1
If Level_dimmer < 8 Then Enable Ovf1
End If
If Level_dimmer > 7 Then
' Dimmer_delay_w = &HFFFC ' Ярко горит - 230v
Disable Ovf1
Dimmer_out = 1
Level_dimmer = 8 ' <<<<<<<<<<<<<<<<<<<<<<<< ограничитель
End If
If Level_dimmer = 1 Then Dimmer_delay_w = 57900 ' Тускло горит - 25v
If Level_dimmer = 2 Then Dimmer_delay_w = 58300 ' 51v
If Level_dimmer = 3 Then Dimmer_delay_w = 58700 ' 78v
If Level_dimmer = 4 Then Dimmer_delay_w = 59000 ' 85v
If Level_dimmer = 5 Then Dimmer_delay_w = 59400 ' 149v
If Level_dimmer = 6 Then Dimmer_delay_w = 59900 ' 175v
If Level_dimmer = 7 Then Dimmer_delay_w = 61100 ' 189v
Waitus 950
Return
''===============
Ovf1_my:
If Dimmer_on = 1 Then
Dimmer_out = 1
Waitus 90
Dimmer_out = 0
Else
Dimmer_out = 0
End If
Return
' =============== Обработка прерывания по изменению на INT 0 ==================
Z_cross_int:
Timer1 = Dimmer_delay_w
Z_cross_f = 1
Return
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Gordon Shumway писал(а):В хелпе написано, что это константа...
В хелпе написано, что функции задержки должно быть передано постоянное значение, а не переменная.
Код: Выделить всё
Waitus 150
А не
Код: Выделить всё
Dim Temp as Byte
Temp = 150
Waitus Temp
Но очень часто это требование нарушается.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
aleksandr-zh писал(а):Вот вам на Баскоме управление симистором, через MOC3051
Спасибо ! Заняться этим вопросом смогу теперь только в пятницу. Обязательно напишу о результате.
С уважением,
Алексей.
Алексей.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
aleksandr-zh писал(а):Вот вам на Баскоме управление симистором, через MOC3051
Начал разбираться. Назрело несколько вопросов :
Код: Выделить всё
On Ovf1 Ovf1_my Nosave : Enable Ovf1Что такое "Ovf1" ? В хелпе не нашел, но Баском на эту строку не ругается.
Код: Выделить всё
Dimmer_modul: ' ---------- УПРАВЛЕНИЕ ДИММЕРОМ ----------
Reset Watchdog
If Level_dimmer = 0 Then
Dimmer_on = 0
Disable Ovf1
Else
Dimmer_on = 1
If Level_dimmer < 8 Then Enable Ovf1
End If
If Level_dimmer > 7 Then
' Dimmer_delay_w = &HFFFC ' Ярко горит - 230v
Disable Ovf1
Dimmer_out = 1
Level_dimmer = 8 ' <<<<<<<<<<<<<<<<<<<<<<<< ограничитель
End If
If Level_dimmer = 1 Then Dimmer_delay_w = 57900 ' Тускло горит - 25v
If Level_dimmer = 2 Then Dimmer_delay_w = 58300 ' 51v
If Level_dimmer = 3 Then Dimmer_delay_w = 58700 ' 78v
If Level_dimmer = 4 Then Dimmer_delay_w = 59000 ' 85v
If Level_dimmer = 5 Then Dimmer_delay_w = 59400 ' 149v
If Level_dimmer = 6 Then Dimmer_delay_w = 59900 ' 175v
If Level_dimmer = 7 Then Dimmer_delay_w = 61100 ' 189v
Waitus 950
Return
Нельзя ли поподробнее прокомментировать ?
Непонятно про Dimmer_on и Level_dimmer...
И немного не понял, как делается регулировка яркости ? Чем ?
С уважением,
Алексей.
Алексей.
-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: BASCOM AVR в вопросах и ответах
Ovf1 = прерывание по переполнению
даташит на МК надо читать, а не хелп на Баском
регулирует путём "откусывания" части полупериода
симистор можно включить, но нельза отключить
значит, мы его включим тогда, когда нам надо, а отключится он сам при малом токе
надо ярко? - открываем его в самом начале полупериода
надо уменьшить? после появления полупериода мы открываем симистор НЕМНОГО ПОЗЖЕ, т.е., пропустим часть полупериода
Dimmer_on и Level_dimmer...
вроде по названию видно, не плохобы пернвести
первая - триггер, когда она = 0, то диммер выключен и эта часть кода пропускается
вторая задаёт яркость от 1 до 8
даташит на МК надо читать, а не хелп на Баском
регулирует путём "откусывания" части полупериода
симистор можно включить, но нельза отключить
значит, мы его включим тогда, когда нам надо, а отключится он сам при малом токе
надо ярко? - открываем его в самом начале полупериода
надо уменьшить? после появления полупериода мы открываем симистор НЕМНОГО ПОЗЖЕ, т.е., пропустим часть полупериода
Dimmer_on и Level_dimmer...
вроде по названию видно, не плохобы пернвести
первая - триггер, когда она = 0, то диммер выключен и эта часть кода пропускается
вторая задаёт яркость от 1 до 8
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
aleksandr-zh писал(а):Dimmer_on и Level_dimmer...
вроде по названию видно, не плохобы пернвести
первая - триггер, когда она = 0, то диммер выключен и эта часть кода пропускается
вторая задаёт яркость от 1 до 8
С переводом я справился
То есть это просто переменные ?
И я все-таки не понял, чем регулируется яркость ? Грубо говоря - где кнопка ?
Спасибо за помощь !
С уважением,
Алексей.
Алексей.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Для регулировки через кнопку тебе надо написать код, который будет по нажатию кнопки изменять значение переменной Level_dimmer, тогда будет управление через кнопку
Если......
Level_dimmer = 0, то Dimmer_on = 0 ' отключено
Level_dimmer = 1, то Dimmer_on = 1 ' Тускло горит - 25v
Level_dimmer = 2, то Dimmer_on = 1 ' 51v
Level_dimmer = 3, то Dimmer_on = 1 ' 78v
Level_dimmer = 4, то Dimmer_on = 1 ' 85v
Level_dimmer = 5, то Dimmer_on = 1 ' 149v
Level_dimmer = 6, то Dimmer_on = 1 ' 175v
Level_dimmer = 7, то Dimmer_on = 1 ' 189v
Level_dimmer = 8, то Dimmer_out = 1 ' Ярко горит - 230v
Если......
Level_dimmer = 0, то Dimmer_on = 0 ' отключено
Level_dimmer = 1, то Dimmer_on = 1 ' Тускло горит - 25v
Level_dimmer = 2, то Dimmer_on = 1 ' 51v
Level_dimmer = 3, то Dimmer_on = 1 ' 78v
Level_dimmer = 4, то Dimmer_on = 1 ' 85v
Level_dimmer = 5, то Dimmer_on = 1 ' 149v
Level_dimmer = 6, то Dimmer_on = 1 ' 175v
Level_dimmer = 7, то Dimmer_on = 1 ' 189v
Level_dimmer = 8, то Dimmer_out = 1 ' Ярко горит - 230v
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
zero648 писал(а):Для регулировки через кнопку тебе надо написать код, который будет по нажатию кнопки изменять значение переменной Level_dimmer, тогда будет управление через кнопку![]()
Потом уже дошло...
В выходные буду мучить в протеусе, а в понедельник - на железе.
С уважением,
Алексей.
Алексей.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Доброго времени суток !
Возникло несколько вопросов в процессе изучения кода:
1. На какую частоту кристалла рассчитаны таймеры ?
2.
Для чего введена переменная "Z_cross_f" ?
3. Для чего сконфигурирован timer0 ? Не нашел, где он используется...
Спасибо заранее за помощь !
aleksandr-zh писал(а):Вот вам на Баскоме управление симистором, через MOC3051
Возникло несколько вопросов в процессе изучения кода:
1. На какую частоту кристалла рассчитаны таймеры ?
2.
Код: Выделить всё
Z_cross_int:
Timer1 = Dimmer_delay_w
Z_cross_f = 1
ReturnДля чего введена переменная "Z_cross_f" ?
3. Для чего сконфигурирован timer0 ? Не нашел, где он используется...
Спасибо заранее за помощь !
С уважением,
Алексей.
Алексей.
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
Gordon Shumway писал(а):Для чего введена переменная "Z_cross_f" ?
3. Для чего сконфигурирован timer0 ? Не нашел, где он используется...
Здесь очевидно прерывание занимается тем, чем и должно. В частности устанавливает флаг Z_cross_f (это же кусок из программы вероятно далее, где то используется)


