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

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

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

 
Опции темы

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

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

у меня всё подключенно последовательно. Идет 60 светодиодов, после них 1 регистр на сегменты и 3 на общий анод(катод).
Реклама:

Последний раз редактировалось miwutka; 20.02.2013 в 15:11.
miwutka вне форума  
Непрочитано 20.02.2013, 15:22  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Код:
//вывод на сдвиговые регистры
void shiftout(char _data){
	PORTB &= ~(1‹‹DATA); //установим ноль на пине данных
	PORTB &= ~(1‹‹ST_CP); //снимем "защелку" 74HC595
	//цикл по битам 74hc595, 0..15 два байта для двух 74HC595
	for (char i=0; i‹=15; i++) {
		if(i‹_data) PORTB |= (1‹‹DATA);
		else PORTB &= ~(1‹‹DATA);
		//обозначим clock
		PORTB |= (1‹‹SH_CP);
		PORTB &= ~(1‹‹SH_CP);
	}
	PORTB |= (1‹‹ST_CP); //установим "защелку" 74HC595
}
вызываем нужное число раз (по колву последовательных регистров), передавая в _data состояние ног регистров от дальнего к ближнему
whoim вне форума  
Непрочитано 20.02.2013, 15:23  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

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

Такое я вставлял в текст, но мк начал ужасно медленно всё это делать... Вставлял текстом а не процедурой... думаю мне лучше подходит по SPI... Надо всётаки с ним разбираться смотрю...
miwutka вне форума  
Непрочитано 20.02.2013, 15:30  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

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

изза чего жэ тогда может так начинать тормозить МК? как думаете? Если я свои 4 кейса заменяю на 4 for'а(и это все в прерывании которое срабатывает каждые 200 мкс, частота 16 МГЦ ядра) то всё тормозит, а отображение на ЖК выводится спустя минуту ))
miwutka вне форума  
Непрочитано 20.02.2013, 15:36  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

приведу логический пример. Еще раз. Но более полно.
1) "Снимаем = ставим в 0" защелку (пин ST_CP всех hc595). Они, сохраняя прежнее состояние выходов, готовы к загрузке новых данных.
2) Передаем байт. Например 0b00001000 -
2.1) ставим data в 0 (передаем первый ноль) - ставим-снимаем CLOCK. Дергание CLOCK дает знать HC595-й о том, что состояние пина data есть бит (в нашем случае первый из байта)
2.2) повторяем 2.1 еще два раза (уходят биты 000 справа-налево)
2.3) ставим data в 1 и дергаем CLOCK (уходит единичка
2.4) передаем как в 2.1 оставшиеся нули

Пункт 2 повторяется то число раз, сколько у нас последовательно hc595-х. Первый посланный байт попадает в дальнюю микросхему, последний - в ближнюю. Они побитно через q7 проталкивают данные "дальше" по конвейеру.

3) ставим защелку. Для всех hc595-х это сигнал - данные загружены, активируем их на ноги.

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

switch (Number_disp) - номер цыфры
switch (Num_segm) - включение сегментов
switch (Number) - это одна группа светодиодов 32 шт
switch (tah_LED) - это вторая 32 шт

я управляю динамикой + 64 светодиода... на индикаторах отображаю счетчики и 2 АЦП. АЦП 250 кГц настроил чтоб быстрее обрабатывал без особой точности на 10 бит.
Сейчас еще попробую ваш код воткнуть.....
miwutka вне форума  
Непрочитано 20.02.2013, 15:46  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

Сообщение от miwutka Посмотреть сообщение
Подскажите...
Я неповерю, что значительно замедлится работа если применить стандартное решение типа нижеследующего (например вывод 30 символов на 24 светодиодный экран)
Код:
const __flash uint8_t symbol[30][3] = {...};

void outsym(uint8_t sym)
{
  const __flash uint8_t *ptr = &symbol[sym];
  uint8_t i, tmp;

  tmp = *ptr++;
  for(i=0; i‹8; i++)
  {
     DATA = tmp & 1;
     tmp ››= 1;
     CLK = 1;
     CLK = 0;
  }
  tmp = *ptr++;
  for(i=0; i‹8; i++)
  {
     DATA = tmp & 1;
     tmp ››= 1;
     CLK = 1;
     CLK = 0;
  }
  tmp = *ptr++;
  for(i=0; i‹8; i++)
  {
     DATA = tmp & 1;
     tmp ››= 1;
     CLK = 1;
     CLK = 0;
  }
}
SasaVitebsk вне форума  
Непрочитано 20.02.2013, 15:49  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: НС595 - помогите оптимизировать код

я тоже не поверил но я вот так и заменил свои 4 кейса как у вас. Только без указателей - я их не понимаю (((
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, время: 12:07.


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