Страница 1 из 1

Мигалка на 2313

Добавлено: Вт янв 21, 2014 00:01:10
SICBOY
Добрый вечер. Наведался за помощью к знающим. Я не очень силен в программировании, так код поправить смогу но написать с нуля будет тяжело, так вот необходимо коллеге помочь разработать мигалку на RC авто. Моя наработка выглядит так: http://www.youtube.com/watch?v=AitiIBQD ... tQ&index=9
Спойлер#include <mega8.h> //Включаем библиотеку для работы с микроконтроллером ATMega8
#include <delay.h> //Включаем библиотеку для организации задержек
void main(void)
{

int i; // описание переменной "і" как целое число Int - (Integer)

PORTD=0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD=0xFF; //Делаем порт D, как выход, чтобы на выходах порта было напряжение 5В

while (1) //Организовываем бесконечный цикл

{

for (i = 0; i<4 ; i++) // Цикл мигание первого светодиода, 4 раза
{
PORTD.0=1; //Включаем светодиод на 0 выходе порта D.0

delay_ms(50); //Делаем задержку на 50 миллисекунд

PORTD.0=0; //Выключаем светодиод на 0 выходе порта D.0

delay_ms(50); //Делаем задержку на 50 миллисекунд
}

//----------------------------------------------------------//

delay_ms(200); // Задержка между мерцаниями, 200 мс

//---------------------------------------------------------//
for (i = 0; i<4 ; i++) // Мигание второго светодиода, 4 раза
{
PORTD.1=1; //Включаем светодиод на 0 выходе порта D.1

delay_ms(50); //Делаем задержку на 50 миллисекунд

PORTD.1=0; //Выключаем светодиод на 0 выходе порта D.1

delay_ms(50); //Делаем задержку на 50 миллисекунд
}

delay_ms(200); // Задержка между мерцаниями, 200 мс
};

}

источник http://my-avr.at.ua/publ/1-1-0-7
Мой исходник где-то на рабочем компьютере, не столь важно. На деле хочу добавить несколько свето-диодов не зависящих друг от друга, но проблема в том что этот код выполняется в одном цикле.
Необходимо создать как минимум 4 независимых цыкла с подобными эффектами как в коде. Естественно указав необходимые аналог. порты мк (attiny2313).
Заранее благодарен!

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 00:11:55
kobzar
Я не совсем понял что вы просите? вам надо мигалка на 4 светодиода или как? и как они должны мигать?
код котрый вы показали избыточен

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 00:20:49
SICBOY
kobzar писал(а):Я не совсем понял что вы просите? вам надо мигалка на 4 светодиода или как? и как они должны мигать?
код котрый вы показали избыточен
Если он избыточен укажите пожалуйста что необходимо оптимизировать.
Из гигалки необходимо. Что бы зажигались поочередно с одной интенсивностью одна пара светодиодов. Вторая пара с другой интенсивностью перемигивались. Перемигивались или просто медленно тухли на сколько это возможно.

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 10:38:29
kobzar
ТЗ сильно размыто! Давайте вы уточните конкретно чего вы хотите!
ЧТО бы мигало по два светодиода сразу или по одному? Я так понимаю ето будут перединие и задние фары
Вобщем - четко напишите как что и где должно мигать - и код набросаем - ето не сложно! Просто надо понять что "бросать"

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 11:03:40
Dr. Alex
SICBOY писал(а):... или просто медленно тухли на сколько это возможно.
Это возможно, только прийдётся использовать ШИМ

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 14:31:50
SICBOY
kobzar писал(а):ТЗ сильно размыто! Давайте вы уточните конкретно чего вы хотите!
ЧТО бы мигало по два светодиода сразу или по одному? Я так понимаю ето будут перединие и задние фары
Вобщем - четко напишите как что и где должно мигать - и код набросаем - ето не сложно! Просто надо понять что "бросать"
Абсолютно верно! Необходимо оставить две пары светодиодов которые висят на портах 1-4 и выполнялись в цикле:
Спойлерfor (i = 0; i<5 ; i++) // 1
{
PORTD.0=1; //Включаем светодиод на 0 выходе порта D.0

delay_ms(200); //Делаем задержку на 1 миллисекунд


PORTD.0=0; //Выключаем светодиод на 0 выходе порта D.0

delay_ms(200); //Делаем задержку на 200 миллисекунд

}

Так же в отдельном цикле работала вторая пара с другой интенсивностью. Пока вот так.

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 14:53:41
kobzar
Поздравляю вам удалось меня окончательно запутать!
Давайте так ! есть две пару (два по два) светодиодов! Условно разделим их на передние и задние фары!
Вопрос:
Должны ли мигать перение и задние фары одновременно?
Должны ли перединие или задние фары моргать по очереди или сразу обе
Должна ли передняя мигающая фара мигать в такт с задней или они должны быть не связанны?
Сколько раз и как долго должна мигать каждая из фар?
Или фары должны мигать по кругу по одной? или наискосок?
Будьте любехны - потратьте 5 минут времени и опишите что вам конкретно нужно!
В противном случае никто вам не поможет!
Я и так пошел вам уже на встречу самостоятельно написав основные вопросы !

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:08:39
ploop
Тут проще задать массив, и в цикле выводить его в порт. А автор пусть сам там биты расставит как захочет :)

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:19:49
SICBOY
Верно, так будет гораздо проще. Благодарю за терпение!

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:27:57
kobzar
ploop писал(а):Тут проще задать массив, и в цикле выводить его в порт. А автор пусть сам там биты расставит как захочет :)
проще массив для мигалки человеку который не может софрмулировать вопрос?
Ну что ж - пишите господа :)
Я пасс

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:33:20
ploop
Для четырёх каналов - да, проще. В любом случае.

Код: Выделить всё

const uint8_t array[] PROGMEM =
    {0b00000000, 0b00000000, 0b00000000, 0b00000000,};

// Внутри цикла
for (uint8_t i = 0; i<4 ; i++) 
{
  uint8_t b = pgm_read_byte(&array,i);
  PORTD = b;
  delay_ms(200);
}
Только единички расставить где надо. Или количество циклов увеличить, если какие-то сдвиги нужны

зы:

Код: Выделить всё

#include <mega8.h> //Включаем библиотеку для работы с микроконтроллером ATMega8
Тема: Мигалка на 2313
Я чего-то не понимаю? :shock:

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:40:23
SICBOY
kobzar писал(а):Поздравляю вам удалось меня окончательно запутать!
Давайте так ! есть две пару (два по два) светодиодов! Условно разделим их на передние и задние фары!
Вопрос:
"Должны ли мигать перение и задние фары одновременно?" - В отдельном цикле
"Должны ли перединие или задние фары моргать по очереди или сразу обе" - Не зависят друг от друга
"Должна ли передняя мигающая фара мигать в такт с задней или они должны быть не связанны?" - Нет
"Сколько раз и как долго должна мигать каждая из фар?" - Просто перемигиватся, я ведь видео в 1-вом посте приложил.
Или фары должны мигать по кругу по одной? или наискосок? - В моём варианте это был как стобоскоп, в начале 2 светодиода по 500мс. потом вторых 2 светодиода так же по 500 мс. в цыкле.
Будьте любехны - потратьте 5 минут времени и опишите что вам конкретно нужно!
В противном случае никто вам не поможет!
Я и так пошел вам уже на встречу самостоятельно написав основные вопросы !
Спасибо.

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:42:14
ploop
Добавил пример выше. Смотрите.

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:52:56
SICBOY
ploop писал(а):Добавил пример выше. Смотрите.
Я библиотеки от тини 2313 использовал. Реально ли с вашим кодом? Ах да, еще компилятор лишь CodeVisionAVR.

Re: Мигалка на 2313

Добавлено: Вт янв 21, 2014 15:56:18
ploop
Реально ли с вашим кодом?
Так проверьте :)
Писал на коленке, но должен быть рабочий (если только очепятался где)
Код для GCC. Как там в CodeVision массив задать, думаю, быстро нагуглите.

Re: Мигалка на 2313

Добавлено: Пт фев 07, 2014 19:25:41
tourniquet
http://youtu.be/u4aCwS9TmTY вот что получилось у меня
Спойлер

Код: Выделить всё

.include	"tn2313adef.inc"
.list

.def	temp	= R16
.def	loop	= R17

.equ	kdel    = 300  

; -----

		.cseg
		.org	0

; -----

		ldi	temp, RAMEND
		out	SPL, temp

; -----

		ser	temp
		out	DDRB, temp
		out	DDRD, temp
		out	PortB, temp
		out	PortD, temp
		
; -----

		ldi	temp, 0x80
		out	ACSR, temp

; -----

		ldi	temp, 0x04
		out	TCCR1B, temp

; -----

Main:
		ldi	loop, 2

FirstLight:
		cbi	PortD, 0
		rcall 	Timer
		sbi	PortD, 0
		cbi	PortD, 1
		rcall 	Timer
		sbi	PortD, 1
		dec	loop

		brne	FirstLight

		ldi	loop, 2

SecondLight:
		cbi	PortD, 2
		rcall	Timer
		sbi	PortD, 2
		cbi	PortD, 3
		rcall	Timer
		sbi	PortD, 3
		dec	loop

		brne	SecondLight
		
		rjmp	Main
		
Timer:
		push	loop

		ldi	temp, 0
		out	TCNT1H, temp
		out	TCNT1L, temp

TimerLoop:
		in 	temp, TCNT1L
		cpi	temp, low(kdel)
		brlo	TimerLoop

		in 	temp, TCNT1H
		cpi	temp, high(kdel)
		brlo 	TimerLoop

		pop loop
		ret

Re: Мигалка на 2313

Добавлено: Пт фев 21, 2014 11:22:21
SICBOY
tourniquet писал(а):http://youtu.be/u4aCwS9TmTY вот что получилось у меня
Спойлер

Код: Выделить всё

.include	"tn2313adef.inc"
.list

.def	temp	= R16
.def	loop	= R17

.equ	kdel    = 300  

; -----

		.cseg
		.org	0

; -----

		ldi	temp, RAMEND
		out	SPL, temp

; -----

		ser	temp
		out	DDRB, temp
		out	DDRD, temp
		out	PortB, temp
		out	PortD, temp
		
; -----

		ldi	temp, 0x80
		out	ACSR, temp

; -----

		ldi	temp, 0x04
		out	TCCR1B, temp

; -----

Main:
		ldi	loop, 2

FirstLight:
		cbi	PortD, 0
		rcall 	Timer
		sbi	PortD, 0
		cbi	PortD, 1
		rcall 	Timer
		sbi	PortD, 1
		dec	loop

		brne	FirstLight

		ldi	loop, 2

SecondLight:
		cbi	PortD, 2
		rcall	Timer
		sbi	PortD, 2
		cbi	PortD, 3
		rcall	Timer
		sbi	PortD, 3
		dec	loop

		brne	SecondLight
		
		rjmp	Main
		
Timer:
		push	loop

		ldi	temp, 0
		out	TCNT1H, temp
		out	TCNT1L, temp

TimerLoop:
		in 	temp, TCNT1L
		cpi	temp, low(kdel)
		brlo	TimerLoop

		in 	temp, TCNT1H
		cpi	temp, high(kdel)
		brlo 	TimerLoop

		pop loop
		ret
Скажите на милость, чет от моего проекта отличается? Та же линейность.
Пользователь прислал тему http://radiokot.ru/cherdak/03/ не могу разобрать код, компилятор code vision. ищу опятть же помощи.