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

Помигаем светодиодами


Krik99

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

Доброго времени суток.

Помогите написать програму на Си для гирлянды на АVR (у меня есть ATMega8, но потом могу переделать на какойто ATiny).Три канала. Пару эфектов я придумал.Но у меня появились вопросы. :unsure:

1вопрос.Как сделать чтобы можно было переключать все програмы одной кнопкой.

2вопрос.Как соединить эти все програмы.

3вопрос.Как сделать чтобы один канал плавно зажигался ,а другой плавно затухал.

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

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

а тебе именно на СИ? глянь тему http://forum.cxem.net/index.php?showtopic=12666

я там прогу свобю выложил как раз то что тебе надо. плавно затухает. только с АВРами я ещё на работал. я программатор то собрал дня 3 назад. Но вобщем программа рабочая и суть уловить можно по ней.

но у меня задача посложнее 4 светодиода. и эффектов хочу штук 10... пока для самых основных проги написал. И вот ещё загвоздка чтобы все это переключалось одной кнопкой. Надо как то так сделать... пальцем же кнопу замыкаешь миллисикунд в лучшем случае на 200 и при этом может смениться не один а несколько эффектов. Вот надо как то сделать чтобы только сделующий эффект был. есть пара идей но пока не начал в этом копаться... да и в ассемблере знания не глубокие у меня

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

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

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

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

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

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

Нашёт кнопки я могу подсказать.Для кнопки после програмы обработки самой кнопки надо писать паузу гдето так на 1сек.

Если хочеш могу на Си написать.Так как я вооообще не знаю не Бейсик не Асемблер.

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

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

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

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

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

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

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

а про прерывания вы забыли?

пишите прсотенькое прерывание при нажатии инкремент константы..

в зависимости от константы выбирается подпрограмма

плавное изменение спомощью ШИМ делаете?

у мну етсь подлая идея сделать плавную регулировку света в комнате .. вот думаю как организовать :)

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

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

Duhas -есле не трудно напишите пример на Си желательно.Заранние спасибо.

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

к сож-ю.. моему и наверно вашему, не пишу на си под МК.. тока на PC... пишу на асме.. выглядит следующим образом

.org 0x02

rjmp <имя подпрограммы>

<имя подпрограммы>:

inc stat <- инкремент константы.. нада только еще ограничить его кол-вом эффектов

reti <- выход из прерывания

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

пасмарел.. вопщем..

#pragma interrupt_handler (название функции обработчика) : (номер прерывания по ДШ) так поределяем обработчик прирывания

#pragma interrupt_handler timer0_ovf_isr:7

void timer0_ovf_isr(void)

{ //TIMER0 has overflowed

TCNT0 = 0xB8; //обновить число начал счета

}

тут прерывание переполнения таймера.. но никто не мешает переделать его в прерывания изменения состояния одной из I/O линий...

тоесть по идее будет так

#pragma interrupt_handler change:2 /* я юзаю 32-ю мегу... 2 - прерывание INT0.. ну с этим я думаю разберетесь...*/

void change(void) /*вот хз нада ли вводить нашу константу в функцию.. я си уже забываю :( может не не void а int stat - ну тут тоже разберетесь*/

{

if(stat < <кол-во эффектов>)

stat++;

else stat=0;

}

ну и в общем цикле делаем проверку типа

switch (stat)

и вызываем подпрограммы...

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

http://forum.cxem.net/ вам в помощь

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

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

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

насчет света в комнате наткнулся на одну интересную конструкцию. именно как раз плавное зажигание и и гашение и все это с сенсором. но там на пике12ц508. если интересно ссылку могу кинуть как за компом окажусь.

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

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

в прирываниях ничего сложного .. разрешил их для начала.. указал векторы.. работает.. толко вот есть детали.. к примеру я сначала не догнал в чом суть проблемы.. жму калвишу а срнабатывает 2 раза или 1 или 3 када как.. думал дребезг .. ага .. не он а другое.. выставил прерывание по изменению лог уровня.. а башка деревяшка не додумалась сроазу что при нажатии происходит 2 изменения ...

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

http://www.kursovik.net/electronic.html

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

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

Уважаемый Krik99, Вы разобрались с регулировкой яркости??? Просто я делал бегущие огни на АТ2051, получилось около 100 эффектов на 8 гирлянд, а вот с яркостью заглох. Если есть какието идеи помогите пожалуйста.

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

делается на скоклько я знаю и понмаю широтно импульсной модуляцией... нада ярче делаем импульсы шире, а паузе меньше... нада меньше яркости увеличиваем паузы пропорционально уменьшая ширину импульса ...

скора могет буду писать такую приблуду... если соберсь выкину код ..

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

Если изменять только яркость светодиода, то нужно делать именно задержкой, а если нагрузкой использую симмистр??? Тут уже нужна привязка к нулю, вот сама эта привязка и интересна, как её правильно определить по фронту или по спаду???

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

я к сожалению не силен в теории из области симисторов.. вазьми эмулятор типа протеуса.. и вперед..

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

я пол ночи просидел над гемором включить релюшку при 0 или 1 на вводе мк.. схема с 1 транзюком тупо открывается а закрываться не хочет ... в итоге дожил до оптопары :)))) зато работает

Ж)

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

  • 2 недели спустя...

Я никак не могу разобраться с прирываниями кто разбираеться в прирываниях напишите (если не трудно) простую програму на Си чтобы она мигала двумя светодиодами (при этом используя прирывание).

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

напиши в личку конкретную задачу... т.е. к примеру при прерывании переключаться с мигания одного на мигание другова.. при новом прерывании снова переключаться и тд ...

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

А мне лижбы два светодиода мигало.1 светодиод зажогся, 2 светодиод потух,2 светодиод зажогся , 1 светодиод потух. И так далие.Кокую программу вам лехче написать, такую и пишите мне просто надо изучить на примере прерывание в МК ATmega8 на Си.

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

Вот пример кода, мигающего светодиодами по очереди (написано в среде IAR Embedded Workbench).

За работоспособность на Mega не очень ручаюсь, у меня она в прерываниях не могла i++ сделать. Но пока другой контроллер лень воткнуть в плату, хотя он есть :) сессия :)

Точно могу утверждать, что эту же задачу этим же способом успешно решал, когда учился азам на основе AT89C51RC.

#include "iom8.h"
#include "inavr.h"
#include "math.h"

char WDT_FLAG=0xA5;
unsigned int i=0;

//------------------------------------//								
__C_task void main(void)		
{							   
__disable_interrupt();//отключение прерываний		 

// что-то с watchdog таймером
WDTCR=0x18;	// 0001 1000  change enable
WDTCR=0x0F;	// 0000 1111  watchdog set 2048 ms

__watchdog_reset();

comparator_off;	// отключение компаратора (чтоб наверняка)

// тут что-то со вторым таймером. пока не надо.
TCCR2=0x19;			// FOC2=0 WGM20=0 COM21=0 COM20=1 WGM21=1 CS22=0 CS21=0 CS20=1
OCR2=(73728/38)/20-1;		// Timer2: setting ADC frecuency(ADC_FREC) (вроде настройка ШИМ)

TCCR0=0x05;	// предварительный делитель тамера 0 1/1024 CK
							// тактовая частота 7200 Гц (кварц 7.3728 МГц)
TCNT0=0xB7;	// период следования прерываний 0.01 c (100 Гц)
TIMSK=(TOIE0);	// прерывания по переполнению таймера-счетчика 0

// инициализация портов ввода-вывода //
DDRB=0xff;	 // PORTB весь выход
DDRC=0xff;	 // PORTC весь выход
DDRD=0xff;	 // PORTD весь выход

PORTB=0x00;				   
PORTC=0x00;				   
PORTD=0xc0;				   

TCCR1B=7;					  

__enable_interrupt();	 //запуск прерываний

PORTB=0x55;	 //0101 0101

for(;;)
{
 __watchdog_reset();

// 1 раз в секунду инвертируем PORTB
 if(i==99)
 {
i=0;
PORTB=!PORTB;
 }   


 WDT_FLAG=0xA5;  
}
}

// прерывания по переполнению таймера-счетчика 0 //
#pragma optimize=0
#pragma vector=TIMER0_OVF_vect

__interrupt void Timer0_Overflow(void)
{
 TCNT0=0xB7;  //частота прерываний 100 Гц

 i++;

 if(WDT_FLAG==0xA5){__watchdog_reset();WDT_FLAG=0;}
}

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

73 de R9FDJ ex. UB8FCG | QTH LO88AA, PM-03, Пермь | RCWC #1256

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

вопщем я вапще не ощущаю на кой хрен в мигании 2-мя диодами нужно прерывание :)

миганите мона на асме сделать в разы проще Ж)

не используя ни одного таймера.. все задержки делаются оч легко ...

тут моск нада включать а не городить кучу текста

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

не, это то понятно.. просто раз Krik99 пытается разобраться в прерываниях и просит показать работу с ними на каком-либо примере... название темы навевает пример вполне четко.. и эта прога написана очень и очень давно, на шаблоне от промышленного измерителя температуры, потому и текста много :)

понятно, что лучше в прерываниях посерьезнее замутить что-либо. по крайней мере, кроме i++ у меня в них еще индикация включается с частотой 72 Гц (или около того)

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

73 de R9FDJ ex. UB8FCG | QTH LO88AA, PM-03, Пермь | RCWC #1256

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

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

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

Duhas

А если например мигать двумя светодиодами и например таймер на 2часа с регулировкой времени.То мне кажеться что всётаки понадобиться прирывания.

Да и если хтото напишет желательно под компилятор WinAVR.А в журналах Радиоаматор 2005 нет случайно чего нибудь про прирывания в AVR.

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

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

ладна, прочитаем краткий курс по МК, хотя не считаю седя достаточно квалифицированным для этого...

МК выполняет заложенную в него программу стартя с адреса 0х0000

,этот адрес является адресом вектора прерывания reset, которое происоходит при самом прерывании и всключении МК.. далее идут адреса других перываний... после адреса 0х0050 можно писать свой код, вот как рас этот код и выпоняет мк после включения.. из-за манипуляции вида:

пишу на асме, ибо в си все по идее вроще, все это само по себе делается по идее..

.org 0

rjmp START

.org 0x02

rjmp tonoff /вот это уже переходы к меткам иначе говоря вектора прерываний

.org 0x04

rjmp light

.org 0x20

rjmp ADCE

.org 0x50

START:

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

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

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

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

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

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

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

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

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

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

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

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