Страница 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
Я чего-то не понимаю?

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