Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

Закрытая тема
Опции темы
Непрочитано 20.02.2013, 13:39   #1
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 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   #2
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

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

Наверно проще... Я както еще с ним не работал, но видел что его используют... А можно кусочек кода с библиотекой на СПИ? Или принцып как по порядку надо делать..... Пишу в кодевижне
miwutka вне форума  
Непрочитано 20.02.2013, 14:33   #4
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 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   #5
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

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

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

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

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

Сообщение от omercury Посмотреть сообщение
или зацепить их последовательно.
Если динамика - скажность слишком большой получается.
_guardianangel вне форума  
Непрочитано 20.02.2013, 14:57   #10
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 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, время: 02:54.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot