Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
Diod_Sytimsi
0 / 0 / 0
Регистрация: 01.03.2011
Сообщений: 14
1

Вопрос по сдвиговым регистрам

09.04.2014, 01:37. Просмотров 3833. Ответов 2
Метки нет (Все метки)

Всем привет! Заранее прошу не смеяться над моей нубской реализацией вопроса, но вот какое дело. Для того чтобы была возможность зажигать отдельный светодиод с помощью сдвигового регистра 74HC164 я набросал некую адресацию, да медленную, да жрущую память, но больше в голову ничего не пришло. Адреса имеют вид:
Код
const unsykned long tid[32] = {
0b10000000000000000000000000000000,
0b01000000000000000000000000000000,
0b00100000000000000000000000000000,
0b00010000000000000000000000000000,
0b00001000000000000000000000000000,
0b00000100000000000000000000000000,
0b00000010000000000000000000000000,
0b00000001000000000000000000000000,
0b00000000100000000000000000000000,
0b00000000010000000000000000000000,
0b00000000001000000000000000000000,
0b00000000000100000000000000000000,
0b00000000000010000000000000000000,
...
Как вы уже догадались 32 светодиода... И чтобы зажечь светодиод используется функция:
Код
void tid_on(int LED){
for (int i=0; i<32; i++){
if (LED&(1<<i)){
HIGH;
PORTA &= ~_BV(5);
_delay_us(1);
PORTA |= _BV(5);
}
else
{
LOW;
PORTA &= ~_BV(5);
_delay_us(1);
PORTA |= _BV(5);
}
}
}
Проверяется в адресе каждый бит и если 1 то выставляется высокий уровень и дергается ножка клок в регистре, и с 0 точно так же только уровень низкий. Все хорошо работает когда светодиодов 16, но когда 32... пишешь
Код
tid_on(tid[5]);
и ничего, а вот
Код
tid_on(tid[19]);
сработает как надо.
День ковырялся, да ничего не наковырял, прошу помощи... Исходники и файл протеуса прикрепляю, мк tiny44.

[51.28 Кб]
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 01:37
Ответы с готовыми решениями:

Доступ к "дальним" регистрам ATmega48
Столкнулся со странной проблемой: не инициализируется счетчик Timer/Counter2. Как известно, его...

Обращение к 16 -ричным регистрам ATmega 328
Смутно помню, что на asm к I/O регистрам (с &quot;большими адресами) можно было обращаться через хитрые...

Два вопроса по сдвиговым регистрам.
Итак, вопрос первый: 1. Если нужна динамическая индикация (частоты не менее 50гц), подойдут ли для...

Запрос по регистрам
Уважаемые профи, решите пожалуйста ребус, теоретически должно работать, а не работает. Методом...

Запрос к регистрам 7.7
Народ, помогите плиз. Ситуация следующая. Решил поизучать запросы. Создал пустую базу. Написал...

2
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
09.04.2014, 02:34 2
Тут
void tid_on (int LED){.....
надо поменять на
void tid_on (long LED){.....

И вообще эта функция сводит сума толи компилятор толи камень...
поменяй на такую...
Код
void tid_on(long LED)
{
for (i=0; i<32; i++){

if (LED & 1){
HIGH;
PORTA &= ~_BV(5);
_delay_us(1);
PORTA |= _BV(5);
}

else{
LOW;
PORTA &= ~_BV(5);
_delay_us(1);
PORTA |= _BV(5);
}

LED >>= 1;
}
}
0
Diod_Sytimsi
0 / 0 / 0
Регистрация: 01.03.2011
Сообщений: 14
09.04.2014, 08:52 3
Спасибо! Вчера написал пост перед сном и когда спать лег понял, что переменная LED не того типа и заменить нужно на unsykned long, а вот про
Код
if (LED & 1){
я бы уже и не догадался... :)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 08:52

Движение по регистрам
Что такое движение по регистрам?

Вопросы по регистрам GPIO
Здравствуйте уважаемые форумчане. Начал изучение stm32f4, имея на руках платку discovery. Решил...

помогите с проведением по 2 регистрам
помогите с проведением по 2 регистрам


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru