Яркость светодиодов на Tiny2313 и не только

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Пн янв 27, 2014 00:00:49

Сообщение radioPROfan »

Здравствуйте Коты! Вот собрал схему на плате беспаячной. Решил изучать программирование контролеров AVR. Все подключил - программатор и все такое, все шьет. Написал первую маргалку

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

#include <tiny2313.h>
#include <delay.h>

void main (void)
{

DDRB = 0x01;

    while(1)
    {    
        
        PORTB.0 = 1;
        delay_ms(25);
        PORTB.0 = 0;
        delay_ms(25);
        PORTB.1 = 1;
        delay_ms(25);
        PORTB.1 = 0;
        delay_ms(25);
        PORTB.2 = 1;
        delay_ms(25);
        PORTB.2 = 0;
        delay_ms(25);
        PORTB.3 = 1;
        delay_ms(25);
        PORTB.3 = 0;
        delay_ms(25);
        PORTB.4 = 1;
        delay_ms(25);
        PORTB.4 = 0;
        delay_ms(25);
        PORTB.5 = 1;
        delay_ms(25);
        PORTB.5 = 0;
        delay_ms(25);
        PORTB.6 = 1;
        delay_ms(25);
        PORTB.6 = 0;    
        delay_ms(25); 
        
        PORTB.5 = 1;
        delay_ms(25);
        PORTB.5 = 0;
        delay_ms(25);
        PORTB.4 = 1;
        delay_ms(25);
        PORTB.4 = 0;
        delay_ms(25);
        PORTB.3 = 1;
        delay_ms(25);
        PORTB.3 = 0;
        delay_ms(25);
        PORTB.2 = 1;
        delay_ms(25);
        PORTB.2 = 0;
        delay_ms(25);
        PORTB.1 = 1;
        delay_ms(25);
        PORTB.1 = 0;
        delay_ms(25);  
    }
}

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

Сообщение BCluster »

А чего бы им ярко гореть :) Им бы вообще гореть не следовало из-за этого:

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

DDRB = 0x01;
вы только младший (нулевой) бит на выход настроили
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Пн янв 27, 2014 00:00:49

Сообщение radioPROfan »

Вот немного подсказали куда копать. Написал вот это:

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

#include <tiny2313.h>
#include <delay.h>

void main (void)
{
char i = 1;
DDRB = 0x01;

    while(1)
    {    
        PORTB = i;
        delay_ms(50);
        i = i << 1;
        delay_ms(50);
            if (i==64)
            {
                 PORTB = i;
                 delay_ms(50);
                 i = i >> 1;
                 delay_ms(50); 
                    
            }
        
    }
}
Но в одну сторону диоды проходят, а когда обратно, зацикливаются на двух последних диодах. И по прежнему горит ярко только один светодиод.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Пн янв 27, 2014 00:00:49

Сообщение radioPROfan »

Поменял на

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

DDRB = 0xFF;
все стало отлично. Так правильно?
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

А для того чтобы код уменить, надо отказаться от кодвиженовского представления портов. Оно для таких вещей неудобно. Ну вы уже написали почти правильно.

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

for (;;)
{
for (int i = 1; ( i!=(1<<7)); i<<=1)
{
PORTB = i;
delay_ms(25);
PORTB = 0x00;
delay_ms(25);
}

for (int i = (1<<6);  i!=0; i>>=1)
{
PORTB = i;
delay_ms(25);
PORTB = 0x00;
delay_ms(25);
}


}
где-то так
Последний раз редактировалось BCluster Пн мар 10, 2014 23:58:05, всего редактировалось 1 раз.
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

radioPROfan писал(а):Поменял на

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

DDRB = 0xFF;
все стало отлично. Так правильно?
Да, если все 8 пинов порта надо настроить на выход. В вашем случае используется семь - можно было бы написать 0x7F
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Пн янв 27, 2014 00:00:49

Сообщение radioPROfan »

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

Сообщение BCluster »

Если есть базовые знания по Си вообще - то даташит. Смысла в книгах по МК при знании Си - ноль. Если знаний нет, рекомендую озадачится их получением на ПК :)
По Си хороший труд у Богатырева. http://lib.ru/CTOTOR/starterkit.txt
Просто и понятно написано.

На AVR есть переведенные даташиты на гаве. К тому же, AVR вообще простой как три копейки. Успехов в изучении, если что пишите
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Пн янв 27, 2014 00:00:49

Сообщение radioPROfan »

Улыбнуло название книги) Спасибо большое. Если что то будет не ясно, буду отписывать в этой теме :beer:
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 56
Зарегистрирован: Пн янв 27, 2014 00:00:49

Сообщение radioPROfan »

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

Сообщение BCluster »

:)))
http://www.gaw.ru/html.cgi/txt/ic/Atmel ... /about.htm
где-то тут. Но есть и еще источники вроде
Контактная информация:
Ответить

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