Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
20.02.2013, 13:39
|
#1
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
НС595 - помогите оптимизировать код
Есть код. Немогу сообразить как его оптимизировать. Может кто подскажет?..... Суть такова. Переменная которая в кейсе изменяеться по энкодеру например. И загораеться шкала из 30 светодиодов. Код этот в атмеге 16 занимает аж 10-15% памяти. Но у меня таких два. Как его можно укоротить без вреда к быстродействию? Пробовал for, if - замедлилась работа мк ужасно. У меня подключено 60 светодиодов к регистрам сдвига и на них еще сидит 24 сегментника для вывода цыфр+ ЖК к атмеге. Все работает. Вывод в регистры происходит в прерывании таймера 0 каждые 200 мкс. Модет чтото неправильно? Подскажите...
|
|
|
|
20.02.2013, 13:54
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
А не проще использовать аппаратный SPI, а в каком регистре выводить выбирать посредством отдельных пинов, подключенных к выводам 12 (RCK) HC595? Тогда код сократиться до функции вывода по SPI и функции выбора регистра. Вывод сразу во все регистры, а латчите только в нужном. Ежель с пинами напряг - добавте еще один 595 и латче его. А уж его выходы на RCK остальных.
|
|
|
|
20.02.2013, 13:58
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
Наверно проще... Я както еще с ним не работал, но видел что его используют... А можно кусочек кода с библиотекой на СПИ? Или принцып как по порядку надо делать..... Пишу в кодевижне
|
|
|
|
20.02.2013, 14:33
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
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 регистр
}
} |
|
|
|
|
20.02.2013, 14:50
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
Спасибо. Сейчас после обеда буду разбираться. А функции стандартные кодевижна или ваши в тексте?
"4 регистра, управляются младшей тетрадой одного из портов" - как понять младшая тетрада?... На простятском языке плиз
|
|
|
|
20.02.2013, 14:53
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
Сообщение от miwutka
|
У меня подключено 60 светодиодов к регистрам сдвига
|
Почему не 64?
Сообщение от miwutka
|
...и на них еще сидит 24 сегментника для вывода цыфр+ ЖК к атмеге. Все работает.
|
Раз динамичка уже есть, может туда и светодиоды добавить?
Или нет?
Сообщение от _guardianangel
|
А не проще использовать аппаратный SPI, а в каком регистре выводить выбирать посредством отдельных пинов, подключенных к выводам 12 (RCK) HC595?
|
или зацепить их последовательно.
|
|
|
|
20.02.2013, 14:55
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
Мои, кстати я пишу под avr-gcc. Так что возможно придется сменить типы данных с uint8_t на unsigned char. Тетрада - 4 бита, младшая тетрада - биты с 0 по 3.
|
|
|
|
20.02.2013, 14:55
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
Сообщение от miwutka
|
как понять младшая тетрада?
|
Цитата:
|
tetrados — четвёрка
|
4 бита, нибл.
|
|
|
|
20.02.2013, 14:57
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
Сообщение от omercury
|
или зацепить их последовательно.
|
Если динамика - скажность слишком большой получается.
|
|
|
|
20.02.2013, 14:57
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: НС595 - помогите оптимизировать код
Дурной вопрос - ваш пример кода для последовательно подключенный регистров? малоли... ))
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:54.
|
|