_Ivan_33
Apr 20 2008, 11:10
Здравствуйте уважаемые разработчики!!!
помогите пожалуста начинающему
делаю бегущие огни
прошивку почти написал
но проблема в том, что когда я ставлю delay_ms(...) то время указанное в скобках будет не такое, а будет хаотично (при подключенной переменке) и все будет норм если просто подключен светодиод
мк - attiny2313
частота внутренняя 1 МГц
суть устройства: мк управляет с помощью симисторов цепями лампочек которые мигают, медленно включаются и выключаются в определенной последовательности
схема питания - блок питания на выходе 10 вольт - конденсатор 470 мкф 25 вольт на землю - кренка - кондер 22 мкф на 63 вольта на землю - кондер 0,1 мкф на землю - сам мк
схема управления - нога мк - резистор 330 ом - оптопара moc3021 - симистор - с одной стороны цепь лампочек с другой вывод переменки и на лампочке еще 1 вывод переменки
схема обнаружения 0 на переменке (ну чтоб определить момент когда мгновенное напряжение в переменке равна 0) - фаза переменки - резистор 560 ком - диод 1n4107 - нога мк...
помогите пожалуйста!!!! я уже с этим около месяца копошусь!!!
Цитата(_Ivan_33 @ Apr 20 2008, 14:10)

но проблема в том, что когда я ставлю delay_ms(...) то время указанное в скобках будет не такое, а будет хаотично (при подключенной переменке) и все будет норм если просто подключен светодиод
А можно код увидеть? И как Вы используете пересечение нуля?
Может от него и надо плясать?
И почему собственно глюки МК?
_Ivan_33
Apr 20 2008, 11:26
.....
с помощью этого кода я хочу узнать как плавно лампочку загорать
Moderator:
Воспользуйтесь форматированием кода.
Цитата(_Ivan_33 @ Apr 20 2008, 14:26)

#include <tiny2313.h>
#include <delay.h>
void main(void) {DDRB=4;
DDRA.1=0;
while(1) {
PORTB=4;
delay_ms(3000);
if (PINA.1==0x00)
{PORTB=0;};
с помощью этого кода я хочу узнать как плавно лампочку загорать
С помощью этого кода не получится, алгоритм не верный.
Такой алгоритм будет работать только в синхронном режиме с частотой сети.
Нольпересечение у Вас обрабатывается в цикле и с какого момента лампочка начинает гореть - предсказать невозможно, такое моё видение
_Ivan_33
Apr 20 2008, 11:37
Код
#include <tiny2313.h>
#include <delay.h>
void main(void) {DDRB=4;
DDRA.1=0;
while(1) {
PORTB=4;
delay_ms(3000);
if (PINA.1==0x00)
{PORTB=0;};
delay_ms(20);
if (PINA.1==0x00)
{PORTB=4;};
delay_ms(250);
if (PINA.1==0x00)
{PORTB=0;};
delay_ms(20);
if (PINA.1==0x00)
{PORTB=4;};
delay_ms(350);
if (PINA.1==0x00)
{PORTB=0;};
delay_ms(30);
if (PINA.1==0x00)
{PORTB=4;}
delay_ms(450);
if (PINA.1==0x00)
{PORTB=0;}
delay_ms(20);
if (PINA.1==0x00)
{PORTB=4;};
delay_ms(550);
if (PINA.1==0x00)
{PORTB=0;};
delay_ms(20);
if (PINA.1==0x00)
{PORTB=4;};
delay_ms(700);};}
- вот так?
извините но если не так
а переход через нуль использую для включения канала - чтоб не было помех
domowoj
Apr 20 2008, 11:39
Это не глюк, а помехи от включения симистора.
Ставишь транс по питанию, по выходу опторазвязка,
а переход через 0 делаешь - гальванически соединяешь с фазой???
И вообще, схемку бы.
Обычно переход фиксируют по прерыванию.
Посмотрите
здесьAVR182: Zero Cross Detector
AVR040: EMC Design Considerations
По крайней мере, детектирование нуля Атмел предлагает делать немного иначе.
В принципе, для детектирования нуля можно цепляться к напряжению вторичной обмотки трансформатора - так безопасней будет
_Ivan_33
Apr 20 2008, 11:53
транс - трансформатор?
у меня самодельный блок питания на трансворматоре
при переходи через 0 у меня включается канал лампочек чтоб помех не было
а по выходу опторазвяка была!
Amper25
Apr 20 2008, 12:01
При переходе через 0 не надо включать лампы. При переходе, надо сбрасывать счетчик, который считает время до включения.
Если в 0 включать симисторы, то выключатся они только при следующем 0.
_Ivan_33
Apr 20 2008, 12:04
у меня нет никакого счетчика
domowoj
Apr 20 2008, 12:11
Цитата(_Ivan_33 @ Apr 20 2008, 19:04)

у меня нет никакого счетчика
Счетчик есть он програмный (delay_ms(30);- вот например)
и включать его надо в момент перехода через 0.
_Ivan_33
Apr 20 2008, 12:15
а напишите мне пожалуйста буквально 3 строчки кодла как это будет выглядеть
domowoj
Apr 20 2008, 12:34
К сожалению с СИ я на ВЫ,
а на словах-
таймер в реж. ШИМ синхронизируется (сбрасывается в 0) переходом через 0,
в OCR0x записываешь число соответствующее нужной яркости, вывод OC0x на вых. - управление симистором, чтобы максимально использовать таймер нужно чтобы частота ШИМ была близка к 100Гц-
подстройка через OSCCAL , можно автоматически , можно вручную.
_Ivan_33
Apr 20 2008, 12:59
если вы с СИ на вы то я с ним незнаком...
учился на курсе avr
можно поподробнее а то для меня это ничего не значится
или где об этом почитать
Иван, а у Вас какая тактовая частота МК?
_Ivan_33
Apr 20 2008, 13:20
Цитата(_Ivan_33 @ Apr 20 2008, 15:10)

мк - attiny2313
частота внутренняя 1 МГц
Ага, тогда предлагаю сделать так: Вы пробуете сделать свою штуку на tiny2313, а я попробую на 90S8535 (нету у меня модели tiny2313 для Протеуса)
domowoj
Apr 20 2008, 13:47
Цитата(_Ivan_33 @ Apr 20 2008, 19:59)

если вы с СИ на вы то я с ним незнаком...
учился на курсе avr
можно поподробнее а то для меня это ничего не значится
или где об этом почитать
Пользуюсь ASM(издревле повелось) да и код компактней,
а почитать
http://lord-n.narod.ru/walla.htmlГолубцов М.С.
Микроконтроллеры AVR:
от простого к сложному.
Цитата(tazik @ Apr 20 2008, 20:28)

Ага, тогда предлагаю сделать так: Вы пробуете сделать свою штуку на tiny2313, а я попробую на 90S8535 (нету у меня модели tiny2313 для Протеуса)
Тини2313 более "продвинутая" , а в Протеусе 7.2.2 у 8535 глюки с прерываниями.
_Ivan_33
Apr 20 2008, 13:48
в протеусе вообще нет модели тини2313 тока 90s2313 полный аналог
штуку то тестировали в протеусе - все норм
тока не я тестил...
domowoj
Apr 20 2008, 13:55
Цитата(_Ivan_33 @ Apr 20 2008, 20:48)

в протеусе вообще нет модели тини2313 тока 90s2313 полный аналог
штуку то тестировали в протеусе - все норм
тока не я тестил...
Вопервых далеко не полный аналог,
а во вторых какую штуку.
_Ivan_33
Apr 20 2008, 14:00
бегущие огни без медленного загорания и отключения
Цитата(_Ivan_33 @ Apr 20 2008, 22:00)

штуку то тестировали в протеусе - все норм
тока не я тестил...
Хм, тогда не знаю.
Спасибо про прерывания - не знал
_Ivan_33
Apr 20 2008, 14:11
ну так значит что может служить помехами?? включение тиристора ???
а насчет того что переход через 0 и мк будет включать порт на следующий переход имхо неверно так как там стоит диод и все значения лог0 от 0 до 1 вольта пройдет очень много времени если считать что команду он обрабатывает в 1 цикл мк
Цитата(_Ivan_33 @ Apr 20 2008, 22:11)

ну так значит что может служить помехами?? включение тиристора ???
а насчет того что переход через 0 и мк будет включать порт на следующий переход имхо неверно так как там стоит диод и все значения лог0 от 0 до 1 вольта пройдет очень много времени если считать что команду он обрабатывает в 1 цикл мк
Хорошо, а почему бы сначала не взять лампочку, скажем, на 12В и запитать ее через Ваше устройство от трансформатора блока питания - чтобы определиться, что сбои происходят из-за помех.
Если Вы точно знаете, что из-за помех, то выше были приведены application notes от атмела. То есть на сброс - подтягивающий резистор с конденсатором, питание через LC-фильтр.
_Ivan_33
Apr 20 2008, 14:26
я брал светодиод и у меня все было нормально...
аплиуху сейчас посмотрю
а на сбросе у меня стоит резюк на 750 ом
domowoj
Apr 20 2008, 14:30
Ничего не понял,
учись правильно выражать свои мысли и писать по русски.
ШИМ должен быть синхронным с сетью и =100Гц ,
а длительность импульса соответствует яркости.
Каждый ПОЛУпериод тиристор(симистор) включается в
момент определяемый длительностью имп.- фазовое управление называется.
Вообще в нете много инфы - почитай.
Цитата(_Ivan_33 @ Apr 20 2008, 22:26)

я брал светодиод и у меня все было нормально...
аплиуху сейчас посмотрю
а на сбросе у меня стоит резюк на 750 ом
Хорошо, когда работал светодиод, синхронизация от сети осуществлялась?
_Ivan_33
Apr 20 2008, 14:37
я отключил силовую часть (симисторы и поставил на ногу светодиод) поморгал им и все оказалось нормально, мк соблюдал время счетчика
в этом устройстве шим не используется - просто включить ногу мк (цепь лампочек на определенное время и выключить ну максимум сделать так чтоб цепь плавно загоралась( или вы в этом моменте указываете на использование ШИМ?)
когда работал светодиод переменка хоть как то к мк подключена не была
Laksus
Apr 20 2008, 14:40
1- Непонятно как можно сделать бегущий огонь используя один вывод?
2- Насколько я понял, у Вас симистор открывается при нуле на выводе микроконтролера?
3- Чтобы привязать открывание тиристора к переменному току надо не проверять наличие нуля,
а проверять момент перехода с единицы на ноль (или наоборот).
Удобно сделать с помощью прерывания INT0 INT1 или PCINT.
А еще есть симисторы с встроенной схемой включения при переходе через ноль - MOC3061-M MOC3062-M MOC3063-M MOC3162-M MOC3163-M.
А если, как у Вас, делать не по моменту изменения, а по нулю и использовать симистор с произвольным моментом открытия, то фаза открытия непредсказуема. И будет хаотичное мигание.
_Ivan_33
Apr 20 2008, 14:46
1)я использовал один вывод чтоб
- проверить на светодиоде
- узнать промежутки включения порта(открывания симистора) чтоб сделать плавное загорание лампочки и ее плавное отключение - но их как раз и не узнал из-за помех
2) этот вывод подключен к диоду и резистору чтоб узнать когда на переменке 0 и в этот момент включить цепь лампочек
3)почему именно переход? ведь если допустим было 0 а будет 1 то напряжение будет 3 вольта и выше а на переменке будет еще больше вольт
а мне то нужно чтоб помех было меньше...
Хорошо. А если подключить силовую часть и просто попробовать помигать гирляндой - без всякой привязки к полупериодам?
domowoj
Apr 20 2008, 15:04
Цитата(_Ivan_33 @ Apr 20 2008, 21:46)

- узнать промежутки включения порта(открывания симистора) чтоб сделать плавное загорание лампочки и ее плавное отключение - но их как раз и не узнал из-за помех
2) этот вывод подключен к диоду и резистору чтоб узнать когда на переменке 0 и в этот момент включить цепь лампочек
3)почему именно переход? ведь если допустим было 0 а будет 1 то напряжение будет 3 вольта и выше а на переменке будет еще больше вольт
а мне то нужно чтоб помех было меньше...
Сейчас разговор не помехах, у вас не работает устройство по определению,
читайте предыдущие посты , вникайте.
Сначала нужно научить ШИМ работать синхронно с сетью.
И что за нули и единицы у переменки? Какие 3 Вольта?
Вам предлагали эксперимент с 12В лампочкой на переменке с тиристором - вперед.
_Ivan_33
Apr 20 2008, 15:28
а если помигать без привязки к полупериодам одной лампочкой то тоже не получается
Цитата(_Ivan_33 @ Apr 20 2008, 23:28)

а если помигать без привязки к полупериодам одной лампочкой то тоже не получается
Даже так... Тогда тут трудно сказать что-либо конкретное. Очень многое определяется той же разводкой. И рекомендации носят общий характер. Спасение утопающего - по большей части его личное дело ( Извиняйте (((
_Ivan_33
Apr 20 2008, 16:01
кароче пипец забрасываю это дело - поступлю в вуз там все обяъснят
спасибо за консультации
хотя все-таки дайте книгу чтоб прям была библией по микроконтроллерам
Laksus
Apr 20 2008, 16:37
В первом вопросе написано "медленно включаются и выключаются" я сразу представил себе,
что речь идет о плавном управлении яркостью лампы с помощью фазы открывания симистора.
Но из дальнейшого обсуждения (и из кода) выясняется, что Вы хотите сделать не плавное, а мгновенное включение и выключение лампы.
Глядя на код не могу понять, что Вы хотите от ламп. Судя по коду:
Выключена 3.7сек-включилась на один период (20мсек)-
выключена 0.25сек-включилась на один период (20мсек)-
выключена 0.35сек-включилась на полтора периода (30мсек)-...и так далее
Но для диода включение его на 20...30 мсек с отключением на четверть секунды вполне заметны. А для лампы я смутно представляю как это будет выглядеть из-за ее инерционности.
Опишите пожалуйста подробнее, что Вы хотите от лампы и что она делает.
3)почему именно переход?
В "AVR182: Zero Cross Detector" описано с рисунками.
Если проверять не момент перехода с 1 на 0 (или с 0 на 1), а наличие ноля, то представьте
-Вы включаете схему, это происходит в случайный момент фазы от 0 до 360градусов фазы.
Если включили во время отрицательного полупериода, то при проверке на выводе будет обнаружен ноль и будет открыт симистор. Но напряжение на симисторе в этот момент может быть любое от 0 до 310В (если в сети 220В).
_Ivan_33
Apr 20 2008, 16:57
я как бы порциями даю энергию лампочке(цепи) причем порции становятся все больше и тем самым медленно повышается яркость света
а насчет апноута я посмотрел и ничего не понял - не рублю я в техническом английском - мне всего 15 лет ...
стоп
как работать с шим???
domowoj
Apr 20 2008, 16:58
Учиться,
Учиться,
Учиться, и еще раз учиться
(почти по Ленину ?!).
Нахрапом не получится
читайте буквари и не только по МК.
Главное у вас есть желание.
Omen_13
Apr 20 2008, 17:05
Ёп...

Вот это смена подрастает!
На ВУЗ не особо расчитывай, пока доберёшься до специализации пара лет пройдет. В данном вопросе ничего сложного нет, главное не бросать.
Схему в тексте ниасилил, в удобочитаемом виде нет?
Цитата(_Ivan_33 @ Apr 21 2008, 00:57)

а насчет апноута я посмотрел и ничего не понял - не рублю я в техническом английском - мне всего 15 лет ...
А, да ничего страшного. Мне еще второй год в 7 классе учиться. Гы
_Ivan_33
Apr 20 2008, 17:13
к сожалению нет и сегодня не будет
завтра пробный экзамен по математике
хотя... щас попробую
Omen_13
Apr 20 2008, 17:23
ШИМ это широтно-импульсная модуляция. Если вкратце - из периода T часть времени t на нагрузку идёт напряжение. Увеличивая или уменьшая t соответственно увеличиваем или уменьшаем среднее напряжение на нарузке. (T>=t) Отношения T к t называют скважиностью
______/-----\______/-----\ (а)
___/---------\___/---------\ (б)
________/--\________/--\ (в)
t = время от
/ до
\ T = время от
/ до
/ Контрольный вопрос:
У какого из графиков (а-в) наибольшее и наименьшее напряжение на нагрузке (
_ напряжение =0,
- напряжение U)?
_Ivan_33
Apr 20 2008, 17:41
б-наибольшее
в-наименьшее
схемка прилагается
так как сделать ШИМ!?
все в 22 00 ухожу
в схеме первый прямоугольник это кренка второй мк а еще не сделал токограничительный резистор до оптопары
Omen_13
Apr 20 2008, 17:47
Иди пока, выспись перед экзаменом.
Схема ужОс, есть пара ошибок. Нарисую в удобочитаемом виде выложу и накидаю алгоритм как надо сделать ШИМ.
ПС "не пуха"
_Ivan_33
Apr 20 2008, 17:50
к черту...
всем спокойной ночи без прерываний
а то есть мне можно получается и менять яркость лампочки ШИМ и делать плавное загорание и погасание?
Omen_13
Apr 20 2008, 21:27
Цитата(_Ivan_33 @ Apr 20 2008, 23:50)

а то есть мне можно получается и менять яркость лампочки ШИМ и делать плавное загорание и погасание?
Всё будет! НО:
1. Набраться терпения и не торопиться
2. Соблюдать акуратность - перепаивать по нескольку раз из-за простой невнимательности радости мало + в магазин за деталями бегать
3. Внимательно слушать и задавать вопросы - обратная связь приветствуется
4. Читать умные и хорошие книги
5. Выкладывать схемы, фото и т.п. в формате jpg и т.п. - bmp очень неудачный выбор
6. Давай договоримся что с 220В будем работать очень акуратно и пока начнем с более безопасного напряжения (одного заземлят а другого посадят) и нам понадобится понижающий трансформатор на 12В и лампочка 12В для карманного фонаря.
Сначала схема, потом выложу алгоритмы. Заранее предупреждаю что буду оставлять место для твоего творчества в небольшом пространстве - хуже от этого не будет.
Я не специалист по AVR и C - потребуется помощь со стороны (ну и своей головой думать очень полезно).
Нажмите для просмотра прикрепленного файла1. Для начала дорисуй недостающие фрагменты схемы (блок питания и обвязку МК), хотя-бы для себя.
2. Посмотри описание на оптосимистор
http://www.fairchildsemi.com/ds/MO/MOC3021-M.pdf и оптопару
http://www.fairchildsemi.com/ds/H1/H11L1-M.pdf для общего развития
3. На схеме есть одна специальная ошибка, постарайся её найти (ищи вокруг VU1)
Элементы на схеме:
VU1 - H11L1
VU2 - MOC3021
VD1 - любой диод на ток до 100мА, например КД522
Резисторы могут быть импортными, главное мощность (можно ставить более мощный но не наоборот) и сопротивление (по возможности указанное, если таких нет +-10% от указанного номинала).
Конденсатор С1 электролит на 6.3В любой импортный, С2 и С3 любые керамические
DD1 твой микропроцессор, Int - вход прерывания Out - выход включения лампы (+5 и общий не показаны - нарисуешь сам)
И самое главное - от ресурса А*В*Р*один*два*три шарахаться как от огня. Это не шутка
domowoj
Apr 21 2008, 02:00
Почти согласен.
А для начала реши простую задачку без зажигания лампочек:
выведи на один из выходов сигнал на входе,
т.е. задача посмотреть момент перехода через 0 входной
синусоиды.
INTn пусть работает по любому изменению сигнала.
_Ivan_33
Apr 21 2008, 04:17
йа блондинко
только сегодня заметил что когда я вчера подключал лампочку 12 вольт накаливания - она была подключена постоянным током о_О ... а я вот думаю почему она не работает...
есть у меня какой-то транс от блока питания принтера - вот приду после двух посмотрю...
и почемувывод на кренке 5 вольт он 4-ий?
и почему не подключена земля к мк?
_Ivan_33
Apr 21 2008, 13:49
if (PINA.1==0){
if (PINA.1==1){
PORTB=4;};};
[else {if (PINA.1==0){if (PINA.1==1){
PORTB=4;};];
чета типа того но почему ругается компилятор?
ЗЫ: это алгоритм перехода через 0
domowoj
Apr 21 2008, 14:18
Нет. Переход лучше ловить используя внешние прерывания,
например INT0, настроенный в MCUCR на срабатывание по изменению сигнала, т.е.
прерывания возникнут как по переднему так и по заднему фронту INT0.
А пока прерывания нет - хочешь спи или что-то делай.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.