Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

НС595 - помогите оптимизировать код

Непрочитано 20.02.2013, 13:39  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
Восклицание НС595 - помогите оптимизировать код

Есть код. Немогу сообразить как его оптимизировать. Может кто подскажет?..... Суть такова. Переменная которая в кейсе изменяеться по энкодеру например. И загораеться шкала из 30 светодиодов. Код этот в атмеге 16 занимает аж 10-15% памяти. Но у меня таких два. Как его можно укоротить без вреда к быстродействию? Пробовал for, if - замедлилась работа мк ужасно. У меня подключено 60 светодиодов к регистрам сдвига и на них еще сидит 24 сегментника для вывода цыфр+ ЖК к атмеге. Все работает. Вывод в регистры происходит в прерывании таймера 0 каждые 200 мкс. Модет чтото неправильно? Подскажите...
Вложения:
Тип файла: txt Новый текстовый документ (3).txt (112.8 Кб, 45 просмотров)
Реклама:
miwutka вне форума  
Непрочитано 20.02.2013, 13:54  
_guardianangel
Почётный гражданин KAZUS.RUN
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

А не проще использовать аппаратный SPI, а в каком регистре выводить выбирать посредством отдельных пинов, подключенных к выводам 12 (RCK) HC595? Тогда код сократиться до функции вывода по SPI и функции выбора регистра. Вывод сразу во все регистры, а латчите только в нужном. Ежель с пинами напряг - добавте еще один 595 и латче его. А уж его выходы на RCK остальных.
_guardianangel вне форума  
Непрочитано 20.02.2013, 13:58  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Наверно проще... Я както еще с ним не работал, но видел что его используют... А можно кусочек кода с библиотекой на СПИ? Или принцып как по порядку надо делать..... Пишу в кодевижне
miwutka вне форума  
Непрочитано 20.02.2013, 14:33  
_guardianangel
Почётный гражданин KAZUS.RUN
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Для примера
4 регистра, управляются младшей тетрадой одного из портов
один вызов функции Indicate - вывод в один регистр.
Если нужно одним вызовом вывести во все регистры. то в функцию надо переписать
в качестве параметра ucData использовать указатель на массив с данными и выводить все по SPI в цикле.
Код:
void SPI_MasterTransmit(uint8_t ucData)
{
	/* Start transmission */
	SPDR = cData;
	/* Wait for transmission complete */
	while(!(SPSR & (1‹‹SPIF)));
}

void Indicate(uint8_t ucNumberRegister, uint8_t ucData)
{
	uint8_t ucTemp;
	SPI_MasterTransmit(ucData); // Посылаем то что надо вывести
	switch(ucNumberRegister)
	{
		case 0: // вывод в 1 регистр
			ucTemp = PORT_REGISTER_LATCH; // считываем состояние регистра выхода порта
			ucTemp &= 0xF0; // обнуляем младшую тетраду
			ucTemp |= 0b00000001; // для примера перый регистр на 0 порту
			PORT_REGISTER_LATCH = ucTemp; // выводим, содержимое старшей тетрады не изменилось
			break;
		case 1:
			ucTemp = PORT_REGISTER_LATCH; // считываем состояние регистра выхода порта
			ucTemp &= 0xF0; // обнуляем младшую тетраду
			ucTemp |= 0b00000010; //
			PORT_REGISTER_LATCH = ucTemp; // выводим, содержимое старшей тетрады не изменилось
			break;	// вывод в 2 регистр
		case 2:
			ucTemp = PORT_REGISTER_LATCH; // считываем состояние регистра выхода порта
			ucTemp &= 0xF0; // обнуляем младшую тетраду
			ucTemp |= 0b00000100; //
			PORT_REGISTER_LATCH = ucTemp; // выводим, содержимое старшей тетрады не изменилось
			break;	// вывод в 3 регистр
		case 3:
			ucTemp = PORT_REGISTER_LATCH; // считываем состояние регистра выхода порта
			ucTemp &= 0xF0; // обнуляем младшую тетраду
			ucTemp |= 0b00001000; //
			PORT_REGISTER_LATCH = ucTemp; // выводим, содержимое старшей тетрады не изменилось
			break;	// вывод в 4 регистр
	}
}
_guardianangel вне форума  
Непрочитано 20.02.2013, 14:50  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Спасибо. Сейчас после обеда буду разбираться. А функции стандартные кодевижна или ваши в тексте?
"4 регистра, управляются младшей тетрадой одного из портов" - как понять младшая тетрада?... На простятском языке плиз
miwutka вне форума  
Непрочитано 20.02.2013, 14:53  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Сообщение от miwutka Посмотреть сообщение
У меня подключено 60 светодиодов к регистрам сдвига
Почему не 64?
Сообщение от miwutka Посмотреть сообщение
...и на них еще сидит 24 сегментника для вывода цыфр+ ЖК к атмеге. Все работает.
Раз динамичка уже есть, может туда и светодиоды добавить?
Или нет?
Сообщение от _guardianangel Посмотреть сообщение
А не проще использовать аппаратный SPI, а в каком регистре выводить выбирать посредством отдельных пинов, подключенных к выводам 12 (RCK) HC595?
или зацепить их последовательно.
omercury вне форума  
Непрочитано 20.02.2013, 14:55  
_guardianangel
Почётный гражданин KAZUS.RUN
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Мои, кстати я пишу под avr-gcc. Так что возможно придется сменить типы данных с uint8_t на unsigned char. Тетрада - 4 бита, младшая тетрада - биты с 0 по 3.
_guardianangel вне форума  
Непрочитано 20.02.2013, 14:55  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Сообщение от miwutka Посмотреть сообщение
как понять младшая тетрада?
Цитата:
tetrados — четвёрка
4 бита, нибл.
omercury вне форума  
Непрочитано 20.02.2013, 14:57  
_guardianangel
Почётный гражданин KAZUS.RUN
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Сообщение от omercury Посмотреть сообщение
или зацепить их последовательно.
Если динамика - скажность слишком большой получается.
_guardianangel вне форума  
Непрочитано 20.02.2013, 14:57  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Дурной вопрос - ваш пример кода для последовательно подключенный регистров? малоли... ))
miwutka вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите оптимизировать прогу для ШИМа... miwutka Микроконтроллеры, АЦП, память и т.д 10 27.06.2012 14:19
С код помогите решить проблему 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 33 25.01.2011 16:29
Помогите расшифровать код dizzy Цифровые сигнальные процессоры 7 27.05.2009 20:55
преобразователь код-код zazan111 TTL и CMOS логика 18 05.01.2009 06:11
Помогите переводить код с pic16f84 в 18f242! nhudan Микроконтроллеры, АЦП, память и т.д 12 14.08.2007 13:36


Часовой пояс GMT +4, время: 17:45.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.