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

Здравствуйте уважаемые разработчики!!!

помогите пожалуста начинающему

делаю бегущие огни

прошивку почти написал

но проблема в том, что когда я ставлю delay_ms(...) то время указанное в скобках будет не такое, а будет хаотично (при подключенной переменке) и все будет норм если просто подключен светодиод

мк - attiny2313

частота внутренняя 1 МГц

суть устройства: мк управляет с помощью симисторов цепями лампочек которые мигают, медленно включаются и выключаются в определенной последовательности

схема питания - блок питания на выходе 10 вольт - конденсатор 470 мкф 25 вольт на землю - кренка - кондер 22 мкф на 63 вольта на землю - кондер 0,1 мкф на землю - сам мк

схема управления - нога мк - резистор 330 ом - оптопара moc3021 - симистор - с одной стороны цепь лампочек с другой вывод переменки и на лампочке еще 1 вывод переменки

схема обнаружения 0 на переменке (ну чтоб определить момент когда мгновенное напряжение в переменке равна 0) - фаза переменки - резистор 560 ком - диод 1n4107 - нога мк...

 

помогите пожалуйста!!!! я уже с этим около месяца копошусь!!!

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

Поделиться сообщением


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

но проблема в том, что когда я ставлю delay_ms(...) то время указанное в скобках будет не такое, а будет хаотично (при подключенной переменке) и все будет норм если просто подключен светодиод

А можно код увидеть? И как Вы используете пересечение нуля?

Может от него и надо плясать?

И почему собственно глюки МК?

Поделиться сообщением


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

.....

с помощью этого кода я хочу узнать как плавно лампочку загорать

 

Moderator:

Воспользуйтесь форматированием кода.

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

Поделиться сообщением


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

#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;};

с помощью этого кода я хочу узнать как плавно лампочку загорать

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

Такой алгоритм будет работать только в синхронном режиме с частотой сети.

Нольпересечение у Вас обрабатывается в цикле и с какого момента лампочка начинает гореть - предсказать невозможно, такое моё видение

Поделиться сообщением


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

#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);};}

- вот так?

извините но если не так

а переход через нуль использую для включения канала - чтоб не было помех

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

Поделиться сообщением


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

Это не глюк, а помехи от включения симистора.

Ставишь транс по питанию, по выходу опторазвязка,

а переход через 0 делаешь - гальванически соединяешь с фазой???

 

И вообще, схемку бы.

Обычно переход фиксируют по прерыванию.

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

Поделиться сообщением


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

Посмотрите здесь

 

AVR182: Zero Cross Detector

AVR040: EMC Design Considerations

 

По крайней мере, детектирование нуля Атмел предлагает делать немного иначе.

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

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

Поделиться сообщением


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

транс - трансформатор?

у меня самодельный блок питания на трансворматоре

при переходи через 0 у меня включается канал лампочек чтоб помех не было

а по выходу опторазвяка была!

Поделиться сообщением


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

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

 

Если в 0 включать симисторы, то выключатся они только при следующем 0.

Поделиться сообщением


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

у меня нет никакого счетчика

Счетчик есть он програмный (delay_ms(30);- вот например)

и включать его надо в момент перехода через 0.

Поделиться сообщением


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

а напишите мне пожалуйста буквально 3 строчки кодла как это будет выглядеть

Поделиться сообщением


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

К сожалению с СИ я на ВЫ,

а на словах-

таймер в реж. ШИМ синхронизируется (сбрасывается в 0) переходом через 0,

в OCR0x записываешь число соответствующее нужной яркости, вывод OC0x на вых. - управление симистором, чтобы максимально использовать таймер нужно чтобы частота ШИМ была близка к 100Гц-

подстройка через OSCCAL , можно автоматически , можно вручную.

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

Поделиться сообщением


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

если вы с СИ на вы то я с ним незнаком...

учился на курсе avr

 

можно поподробнее а то для меня это ничего не значится

или где об этом почитать

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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