Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 00:27:16
Аlex писал(а): Глобальная переменная нужна только в случае обмена данными между модулями/функциями.
Да и то не обязательно ) Я стремлюсь вообще их поменьше делать.
К@Т писал(а): Уже 2 новых года встречал с герляндой на 56 эфектом с кодом написанной подобным образом(т.е.с одной глобольной переменной) и глюков не было скоро третий будет и интересно когда её заглючит?
Ну если с таким подходом делать что-то другое может и заглючить. Повезло в этот раз не факт что повезет в другой)
Так я так и не понял что это за дикая конструкция вместо обычного цикла?
В чем тайна?
i=0;//вводим i и присваиваем 0
m1:{
rab = 0b10000000; // Сдвиг вправо
while (rab!=0)
{
PORTB=rab^0xFF; // Запись в порт
rab = rab >> 1; // Сдвиг
wait1 (); // Задержка
}
}
i=i+1;//увеличиваем на 1
if i<8 goto m1;//для 8 повторов переход на метку m1
else goto m 2;//переход на другой эфект под меткой m2
К@Т
Говорящий с текстолитом
Сообщения: 1573 Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная
Сообщение
К@Т » Вс ноя 27, 2011 00:34:18
BCluster писал(а):
Так я так и не понял что это за дикая конструкция вместо обычного цикла?
В чем тайна?
В переходах или в счёте?Если про переходы то так удобнее бегать по 56 эфектам,если в счёте то так удобнее считать повторы.Да и хексина маленькая получилась,тоже самое писал по класике си раза в полтора больше хексина получилась(и в камень не поместилась),поэтому пришлось отрабатывать этот манёвр
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 00:41:07
К@Т писал(а): по класике си раза в полтора больше хексина получилась(и в камень не поместилась)
оч сильно сомневаюсь, но проверю )
Переходы ладно еще, но в счете это васче))
К@Т писал(а): (и в камень не поместилась)
это в какой?оО
К@Т
Говорящий с текстолитом
Сообщения: 1573 Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная
Сообщение
К@Т » Вс ноя 27, 2011 01:13:23
BCluster писал(а):
К@Т писал(а): (и в камень не поместилась)
это в какой?оО
PIC16F628A
У кошки 4 ноги и хвост-плюс,минус,вход,выход,а хвост-земля.....Надо переходить с китайской бурды на канифоль.......[url=http://infobar.hsdn.org/][img]http://static.hsdn.org/infobar/350x60.gif[/img][/url]
amirus
Открыл глаза
Сообщения: 63 Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.
Сообщение
amirus » Вс ноя 27, 2011 09:53:51
Подскажите пожалуйста, как добиться эффекта бегущей тени и накапливающихся огней.
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 10:37:27
Делу бы помогло если бы вы описали что это все значит - а может и гирляндостроители ответят )
Аlex
Модератор
Сообщения: 4614 Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:
Сообщение
Аlex » Вс ноя 27, 2011 10:45:08
BCluster писал(а): а может и гирляндостроители ответят )
Ждём от них ответа.
amirus
Открыл глаза
Сообщения: 63 Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.
Сообщение
amirus » Вс ноя 27, 2011 11:01:44
Ну, наверное гирляндостроитель я один наверное, настоящий
. Я это про эффекты писал, примерно так, эффект
1.
Код: Выделить всё
11111110
11111101
11111011
11110111
11101111
11011111
10111111
01111111
ну и эффект 2
Код: Выделить всё
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
10000001
10000010
10000100
10001000
10010000
10100000
11000000
11000001
и так далее пока не загорятся все
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 15:07:07
11111110
11111101
11111011
11110111
11101111
11011111
10111111
01111111
Код: Выделить всё
unsigned char i;
#asm("ldi R16, 0xFE");
for (i=0;i<8;i++)
{
#asm("out 0x05, R16"); //PORTB = 0x05
#asm("rol R16");
wait1();
}
или
Код: Выделить всё
unsigned char i;
unsigned char out=0xFE;
for (i=0;i<8;i++)
{
PORTB=out;
out=(out<<1)|(out>>(8-1));
wait1();
}
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 17:03:51
И второй алгоритм... не претендует на оптимальность но что есть)
Код: Выделить всё
unsigned char l=0,j,i,n=8;
for (j=0;j<=8;j++)
{
out=0x00;
for (i=0;i<n+1;i++)
{
PORTB=out|l;
if (!out) out++;
else out<<=1;
wait1();
}
n--;
l+=0x80/(1<<j);
}
amirus
Открыл глаза
Сообщения: 63 Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.
Сообщение
amirus » Вс ноя 27, 2011 19:38:52
Спасибо.
Первые два "бегущий огонь" т.е бежит один светодиод.
Этот выполняет команду точно, но один раз, при втором круге зависает наглухо.
BCluster писал(а): И второй алгоритм... не претендует на оптимальность но что есть)
Код: Выделить всё
unsigned char l=0,j,i,n=8;
for (j=0;j<=8;j++)
{
out=0x00;
for (i=0;i<n+1;i++)
{
PORTB=out|l;
if (!out) out++;
else out<<=1;
wait1();
}
n--;
l+=0x80/(1<<j);
}
Дабы не морочить Вам голову, выложу свой "безобразны" код.
Вложения
16.rar
(1.14 КБ) 127 скачиваний
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 20:32:28
ну оно и должно выполняться 1 раз. Я ж не знаю сколько раз вам надо выполнить этот эффект) сделайте цикл на столько итераций на сколько нужно и будет счастье...
Первые два это один и тот же алгоритм, просто разные реализации, зачем вы их обеих в код включили?)
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 20:39:50
Ну я подправил код, видимо проблема была в задержке. Выкинул вашу поставил стандартную все работает.
Однако:
1. В таком варианте эффекты будут выполняться один за другим и потом сначала, надеюсь вы понимаете
2.
for(i=0;i<1;i++)
{
зачем цикл если вы выполняете 1 раз?
3. По моему вы совершенно не понимаете что делаете, рекомендовал бы вникать в суть деяний.
Вложения
16.c
(2.15 КБ) 272 скачивания
amirus
Открыл глаза
Сообщения: 63 Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.
Сообщение
amirus » Вс ноя 27, 2011 20:51:16
Понятно. 2 раза включил чтобы посмотреть разницу. Да они выполняют одну и ту-же функцию, но не совсем что хотелось бы. Из Вашего последнего кода удалил вот эти строчки
и программа перестала зависать, не могли бы Вы подсказать, где я ошибся?
p.s Скачал Вашу, залил, снова зависает.
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 21:36:15
amirus писал(а): Да они выполняют одну и ту-же функцию, но не совсем что хотелось бы
я ж не знаю как у вас включены светодиоды! Если на "+" подключен второй вывод - тогда и будет гореть 1 светодиод! В таком случае:
Код: Выделить всё
for(i=0;i<8;i++)
{
PORTB=out^0xFF;
out=(out<<1)|(out>>(8-1));
delay_ms(200);
}
и вторая функция тогда тоже так!
Код: Выделить всё
for (j=0;j<=8;j++)
{
out=0x00;
for (i=0;i<n+1;i++)
{
PORTB=(out|l)^0xFF;
if (!out) out++;
else out<<=1;
delay_ms(200);
}
n--;
l+=0x80/(1<<j);
}
проверил у себя ничего не зависает...
скиньте весь проект в кодвижне
amirus
Открыл глаза
Сообщения: 63 Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.
Сообщение
amirus » Вс ноя 27, 2011 21:57:58
Светодиоды подключены к порту B. Проверяю на STK500. Вот весь проект.
Извините, проглядел. Перезалил.
Вложения
16.rar
(28.81 КБ) 110 скачиваний
Последний раз редактировалось
amirus Вс ноя 27, 2011 23:56:12, всего редактировалось 1 раз.
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Вс ноя 27, 2011 23:44:43
Это не весь проект, а только один его файл.
Притом, я файл исправил, вы упорно используете свою версию?
Ваша версия зависает, моя - не зависает, приложу еще раз ... Уже с инвертированными выходами.
Вложения
16.c
(2.19 КБ) 248 скачиваний
amirus
Открыл глаза
Сообщения: 63 Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.
Сообщение
amirus » Пн ноя 28, 2011 00:02:38
Залил Ваш код, работает, но зависает на повторе.
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Пн ноя 28, 2011 00:06:29
весь проект дайте... там несколько файлов в папке... все их дайте ... а не один ...
на какой частоте мк работает ?
BCluster
Собутыльник Кота
Сообщения: 2512 Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:
Сообщение
BCluster » Пн ноя 28, 2011 00:16:00
Все, ничего не давайте )
вставьте перед циклом этой функции которая зависает
Код: Выделить всё
n=8; l=0;
for (j=0;j<=8;j++)
{
out=0x00;
for (i=0;i<n+1;i++)
{
PORTB=(out|l)^0xFF;
if (!out) out++;
else out<<=1;
delay_ms(200);
}
n--;
l+=0x80/(1<<j);
}