Проблема со сдвиговым регистром

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Родился
Сообщения: 15
Зарегистрирован: Вт апр 03, 2012 21:13:33

Сообщение Nubik »

Здравствуйте. Разбираюсь со сдвиговым регистром. Вроде все понятно, что да как делать с ним. Решил затестить. Написал программку, подключил в протеусе - не работает. Не пойму в чем дело, по логике должно работать.
Пишу в Студии 5й, Протеус - 7.10

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

#include <avr/io.h>
#include <util/delay.h>
#define SH PINA0
#define DATA PINA1
#define WRITE PINA2

void send_data(int numb)
{
	while (numb != 0)
	{
		
		if (numb%2)
		{
			PORTA &= ~_BV(SH);
			PORTA |= _BV(DATA);  
			PORTA |= _BV(SH);
			
		} 
		else
		{
			PORTA &= ~_BV(SH);
			PORTA &= ~_BV(DATA);
			PORTA |= _BV(SH);
			
		};
		numb = numb/2;
		
		PORTA |= _BV(WRITE);
		
		_delay_ms(30);
	}
}

int main(void)
{
	DDRA = 0xFF;
	PORTA = 0xFF;
	int numb = 173;
	
	send_data(numb);
    while(1)
    {
        //TODO:: Please write your application code 
    }
}
Буду благодарен за любую помощь и подсказку.
Вложения
11.jpg
Подключение в протеусе
(116.52 КБ) 500 скачиваний
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Во-первых, 10-ую ножку на плюс, 13-ую на минус подтянуть.
Во-вторых. А где спад сигнала WRITE?

Как говориться, по моему скромному мнению...
(numb%2) - "взятие" младшего бита обычно делается через битовую операцию (numb & 1)
numb = numb/2 - это делается битовым сдвигом вправо numb = numb >> 1 или numb >>= 1
Из конструкции с условным оператором можно вынести одинаковые операторы - будет меньше прошивка.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

тематические ответы только в форуме, в приват не пишите
Встал на лапы
Аватара пользователя
Сообщения: 131
Зарегистрирован: Пт апр 01, 2011 20:59:47
Откуда: Саратов

Сообщение Кефир »

Kavka писал(а):Во-первых, 10-ую ножку на плюс, 13-ую на минус подтянуть.
:D
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 15
Зарегистрирован: Вт апр 03, 2012 21:13:33

Сообщение Nubik »

kalobyte писал(а):http://kalobyte.com/upravlenie-registrami-74hc595-i-4094-s-7-segmentnymi-indikatorami
Спасибо, помогло.
Kavka писал(а):Во-первых, 10-ую ножку на плюс, 13-ую на минус подтянуть.
В Протеусе это не нужно.
Kavka писал(а): (numb%2) - "взятие" младшего бита обычно делается через битовую операцию (numb & 1)
Про взятие младшего бита не знал, спасибо)
Реклама
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Про взятие младшего бита не знал, спасибо)
Еще один финт - можно объединить счетчик и маску. :wink: Я так люблю делать. :)

Например, хотим вывести байт:

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


uint8_t mask;

for (mask=0x80; mask; mask=mask >> 1)
{
  if (byte & mask)
  {
    //выводим единицу
  }
  else
  {
    //выводим ноль
  }
}


То же самое можно написать и для uint16_t, и uint32_t. Автоматом получаем вывод двух/четырех байт. Понятно, переменные mask и byte должны быть одного типа.
В Протеусе это не нужно.
А я бы подтянул. Кто знает, что там по умолчанию...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Реклама
Родился
Сообщения: 15
Зарегистрирован: Вт апр 03, 2012 21:13:33

Сообщение Nubik »

YS писал(а):
А я бы подтянул. Кто знает, что там по умолчанию...
Там даже ножек нет под это на МК))))
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

10-я и 13-я - это ~MR и ~OE на сдвиговом регистре.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

YS писал(а):Еще один финт - можно объединить счетчик и маску. :wink: Я так люблю делать. :)
годный метод :)))
тематические ответы только в форуме, в приват не пишите
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Nubik писал(а):Там даже ножек нет под это на МК))))
Мыслить надо ширше и гибчее. :)) :)) :)) :)) :))
Советы-то помогли? Разобрались? Заработало?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Ответить

Вернуться в «Периферия»