Переключатель гирлянд на Atmega16

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Программа на atmega16

Сообщение BCluster »

А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
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

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
Откуда: Молдова, Кишинев
Контактная информация:

Re: Программа на atmega16

Сообщение BCluster »

К@Т писал(а):по класике си раза в полтора больше хексина получилась(и в камень не поместилась)
оч сильно сомневаюсь, но проверю )
Переходы ладно еще, но в счете это васче))
К@Т писал(а):(и в камень не поместилась)
это в какой?оО
Аватара пользователя
К@Т
Говорящий с текстолитом
Сообщения: 1573
Зарегистрирован: Сб окт 09, 2010 12:33:48
Откуда: Незалежная

Re: Программа на atmega16

Сообщение К@Т »

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.

Re: Программа на atmega16

Сообщение amirus »

Подскажите пожалуйста, как добиться эффекта бегущей тени и накапливающихся огней.
Реклама
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Программа на atmega16

Сообщение BCluster »

Делу бы помогло если бы вы описали что это все значит - а может и гирляндостроители ответят )
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Программа на atmega16

Сообщение Аlex »

BCluster писал(а):а может и гирляндостроители ответят )
:)))
Ждём от них ответа. :))
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Re: Программа на atmega16

Сообщение amirus »

Ну, наверное гирляндостроитель я один наверное, настоящий :). Я это про эффекты писал, примерно так, эффект
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
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение BCluster »

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
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение 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);
        }
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Re: Переключатель гирлянд на Atmega16

Сообщение amirus »

Спасибо.
Первые два "бегущий огонь" т.е бежит один светодиод.
Этот выполняет команду точно, но один раз, при втором круге зависает наглухо.
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);
        }
Дабы не морочить Вам голову, выложу свой "безобразны" код. :dont_know:
Вложения
16.rar
(1.14 КБ) 127 скачиваний
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение BCluster »

ну оно и должно выполняться 1 раз. Я ж не знаю сколько раз вам надо выполнить этот эффект) сделайте цикл на столько итераций на сколько нужно и будет счастье...
Первые два это один и тот же алгоритм, просто разные реализации, зачем вы их обеих в код включили?)
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение BCluster »

Ну я подправил код, видимо проблема была в задержке. Выкинул вашу поставил стандартную все работает.


Однако:
1. В таком варианте эффекты будут выполняться один за другим и потом сначала, надеюсь вы понимаете
2.
for(i=0;i<1;i++)
{
зачем цикл если вы выполняете 1 раз?
3. По моему вы совершенно не понимаете что делаете, рекомендовал бы вникать в суть деяний.
Вложения
16.c
(2.15 КБ) 272 скачивания
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Re: Переключатель гирлянд на Atmega16

Сообщение amirus »

Понятно. 2 раза включил чтобы посмотреть разницу. Да они выполняют одну и ту-же функцию, но не совсем что хотелось бы. Из Вашего последнего кода удалил вот эти строчки

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

n--;     
l+=0x80/(1<<j);
и программа перестала зависать, не могли бы Вы подсказать, где я ошибся?
p.s Скачал Вашу, залил, снова зависает.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение BCluster »

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.

Re: Переключатель гирлянд на Atmega16

Сообщение amirus »

Светодиоды подключены к порту B. Проверяю на STK500. Вот весь проект.
Извините, проглядел. Перезалил.
Вложения
16.rar
(28.81 КБ) 110 скачиваний
Последний раз редактировалось amirus Вс ноя 27, 2011 23:56:12, всего редактировалось 1 раз.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение BCluster »

Это не весь проект, а только один его файл.
Притом, я файл исправил, вы упорно используете свою версию?
Ваша версия зависает, моя - не зависает, приложу еще раз ... Уже с инвертированными выходами.
Вложения
16.c
(2.19 КБ) 248 скачиваний
Аватара пользователя
amirus
Открыл глаза
Сообщения: 63
Зарегистрирован: Пт авг 07, 2009 06:55:32
Откуда: Asia.

Re: Переключатель гирлянд на Atmega16

Сообщение amirus »

Залил Ваш код, работает, но зависает на повторе.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение BCluster »

весь проект дайте... там несколько файлов в папке... все их дайте ... а не один ...
на какой частоте мк работает ?
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Переключатель гирлянд на Atmega16

Сообщение BCluster »

Все, ничего не давайте )

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

n=8; l=0;
вставьте перед циклом этой функции которая зависает

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

    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);
        }
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»