Мигалка на 2313

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб июн 23, 2012 11:19:11

Сообщение 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).
Заранее благодарен!
Реклама
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев

Сообщение kobzar »

Я не совсем понял что вы просите? вам надо мигалка на 4 светодиода или как? и как они должны мигать?
код котрый вы показали избыточен
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб июн 23, 2012 11:19:11

Сообщение SICBOY »

kobzar писал(а):Я не совсем понял что вы просите? вам надо мигалка на 4 светодиода или как? и как они должны мигать?
код котрый вы показали избыточен
Если он избыточен укажите пожалуйста что необходимо оптимизировать.
Из гигалки необходимо. Что бы зажигались поочередно с одной интенсивностью одна пара светодиодов. Вторая пара с другой интенсивностью перемигивались. Перемигивались или просто медленно тухли на сколько это возможно.
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев

Сообщение kobzar »

ТЗ сильно размыто! Давайте вы уточните конкретно чего вы хотите!
ЧТО бы мигало по два светодиода сразу или по одному? Я так понимаю ето будут перединие и задние фары
Вобщем - четко напишите как что и где должно мигать - и код набросаем - ето не сложно! Просто надо понять что "бросать"
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

SICBOY писал(а):... или просто медленно тухли на сколько это возможно.
Это возможно, только прийдётся использовать ШИМ
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб июн 23, 2012 11:19:11

Сообщение 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 миллисекунд

}

Так же в отдельном цикле работала вторая пара с другой интенсивностью. Пока вот так.
Реклама
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев

Сообщение kobzar »

Поздравляю вам удалось меня окончательно запутать!
Давайте так ! есть две пару (два по два) светодиодов! Условно разделим их на передние и задние фары!
Вопрос:
Должны ли мигать перение и задние фары одновременно?
Должны ли перединие или задние фары моргать по очереди или сразу обе
Должна ли передняя мигающая фара мигать в такт с задней или они должны быть не связанны?
Сколько раз и как долго должна мигать каждая из фар?
Или фары должны мигать по кругу по одной? или наискосок?
Будьте любехны - потратьте 5 минут времени и опишите что вам конкретно нужно!
В противном случае никто вам не поможет!
Я и так пошел вам уже на встречу самостоятельно написав основные вопросы !
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Тут проще задать массив, и в цикле выводить его в порт. А автор пусть сам там биты расставит как захочет :)
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб июн 23, 2012 11:19:11

Сообщение SICBOY »

Верно, так будет гораздо проще. Благодарю за терпение!
Грызет канифоль
Сообщения: 278
Зарегистрирован: Вт дек 03, 2013 11:04:04
Откуда: Киев

Сообщение kobzar »

ploop писал(а):Тут проще задать массив, и в цикле выводить его в порт. А автор пусть сам там биты расставит как захочет :)
проще массив для мигалки человеку который не может софрмулировать вопрос?
Ну что ж - пишите господа :)
Я пасс
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение 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:
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб июн 23, 2012 11:19:11

Сообщение SICBOY »

kobzar писал(а):Поздравляю вам удалось меня окончательно запутать!
Давайте так ! есть две пару (два по два) светодиодов! Условно разделим их на передние и задние фары!
Вопрос:
"Должны ли мигать перение и задние фары одновременно?" - В отдельном цикле
"Должны ли перединие или задние фары моргать по очереди или сразу обе" - Не зависят друг от друга
"Должна ли передняя мигающая фара мигать в такт с задней или они должны быть не связанны?" - Нет
"Сколько раз и как долго должна мигать каждая из фар?" - Просто перемигиватся, я ведь видео в 1-вом посте приложил.
Или фары должны мигать по кругу по одной? или наискосок? - В моём варианте это был как стобоскоп, в начале 2 светодиода по 500мс. потом вторых 2 светодиода так же по 500 мс. в цыкле.
Будьте любехны - потратьте 5 минут времени и опишите что вам конкретно нужно!
В противном случае никто вам не поможет!
Я и так пошел вам уже на встречу самостоятельно написав основные вопросы !
Спасибо.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Добавил пример выше. Смотрите.
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб июн 23, 2012 11:19:11

Сообщение SICBOY »

ploop писал(а):Добавил пример выше. Смотрите.
Я библиотеки от тини 2313 использовал. Реально ли с вашим кодом? Ах да, еще компилятор лишь CodeVisionAVR.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Реально ли с вашим кодом?
Так проверьте :)
Писал на коленке, но должен быть рабочий (если только очепятался где)
Код для GCC. Как там в CodeVision массив задать, думаю, быстро нагуглите.
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Пт ноя 01, 2013 14:52: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
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Сб июн 23, 2012 11:19:11

Сообщение 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. ищу опятть же помощи.
Ответить

Вернуться в «AVR»