Проблема мега 8 и 74hc595!!

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 14
Зарегистрирован: Сб янв 12, 2008 00:01:59

Сообщение adruha »

Помогите решить проблему, уже второй день бьюсь!
Прога проста мега восемь плюс две 74hc595 и матрица из светодиодов 7х5
в общем вывожу букву она стоит как положено
начинаю двигать все мерцает безбожно, скорее всего гдето ошибка а найти не могу! Буду очень признателен за помощь.!

code.txt
(2.27 КБ) 226 скачиваний
Последний раз редактировалось adruha Вс дек 19, 2010 14:47:32, всего редактировалось 1 раз.
Реклама
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Код нужно оформлять вложением. Исправляйте, иначе тема будет удалена.
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

тебе нужен "экранный буфер", из которого по прерыванию будут загружаться 595регистры. это будет происходить не зависимо от основной программы, и никаких мерцаний не будет. А в основной программе уже можешь делать с "экранным буфером" что тебе надо, - выводить буквы, двигать их, да хоть вращать вокруг своей оси.
KIT
Контактная информация:
Открыл глаза
Сообщения: 44
Зарегистрирован: Чт янв 31, 2008 15:51:25
Откуда: прим. край

Сообщение oleg-him »

здрасть! собрал я схему (прикреплена ниже) и есть подозрения что собрал неправильно. поэтому появился вопрос, что должен показывать индикатор если к hc595 на вход ничего не подключено? вроде должен все восьмёрки засветить, а он непонятно что кажет, полубуквы полуцифры, корявки разные.. когда атмегу подключаю такая-же фигня...
Вложения
подключение дисплея013.gif
(10.57 КБ) 340 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 14
Зарегистрирован: Сб янв 12, 2008 00:01:59

Сообщение adruha »

С мерцанием вроде разобрался все светится стабильно (не знаю все ли правильно сделал.). Но вот теперь проблема другая как сдвигать текст и как подгружать следующий символ не пойму. Если не трудно помогите примером как это решить?
code.txt
(3.57 КБ) 280 скачиваний
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

я же написал, вам нужен экранный буфер. С помощью прерываний инфа из него будет постоянно выводится на индикаторы, и это будет не зависеть от того что вы делаете в основной программе. а вот в основной вы можете загружать буквы в буфер, двигать их, и вообще делать что хотите.
в качестве экранного буфера можно использовать массив. Вы хотите выводить на матрицу 5*7. значит можно использовать char массив из 5 элементов.
и еще, нужен знакогенератор. могу поделится.
Пример как двигать тоже могу дать, но он специфичный и под матрицу 24*8, вряд ли из него что то поймете.

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

//ЗНАКОГЕНЕРАТОР
 unsigned char  simvol    [][5]= {{ 0x3E, 0x51, 0x49, 0x45, 0x3E },  // 0
                                 { 0x00, 0x42, 0x7F, 0x40, 0x00 },  // 1
                                 { 0x42, 0x61, 0x51, 0x49, 0x46 },  // 2
                                 { 0x21, 0x41, 0x45, 0x4B, 0x31 },  // 3
                                 { 0x18, 0x14, 0x12, 0x7F, 0x10 },  // 4
                                 { 0x27, 0x45, 0x45, 0x45, 0x39 },  // 5
                                 { 0x3C, 0x4A, 0x49, 0x49, 0x30 },  // 6
                                 { 0x01, 0x71, 0x09, 0x05, 0x03 },  // 7
                                 { 0x36, 0x49, 0x49, 0x49, 0x36 },  // 8
                                 { 0x06, 0x49, 0x49, 0x29, 0x1E },  // 9	
   { 0x7C, 0x12, 0x12, 0x7C, 0xAA },  // А
	{ 0x7E, 0x4A, 0x4A, 0x32, 0xAA },  // Б
	{ 0x7E, 0x4A, 0x4A, 0x34, 0xAA },  // В
	{ 0x7E, 0x02, 0x02, 0xAA, 0x00 },  // Г
	{ 0x60, 0x3C, 0x22, 0x3E, 0x60 },  // Д
	{ 0x7E, 0x4A, 0x4A, 0xAA, 0x00 },  // Е
	{ 0x4A, 0x4A, 0x7E, 0xAA, 0x00 },  // З
	{ 0x66, 0x18, 0x7E, 0x18, 0x66 },  // Ж
	{ 0x7E, 0x10, 0x08, 0x7E, 0xAA },  // И
	{ 0x7C, 0x11, 0x09, 0x7C, 0xAA },  // И        
	{ 0x7E, 0x18, 0x24, 0x42, 0xAA },  // К
	{ 0x78, 0x04, 0x02, 0x7E, 0xAA },  // Л
	{ 0x7E, 0x04, 0x08, 0x04, 0x7E },  // М
	{ 0x7E, 0x08, 0x08, 0x7E, 0xAA },  // Н
	{ 0x3C, 0x42, 0x42, 0x3C, 0xAA },  // О
	{ 0x7E, 0x02, 0x02, 0x7E, 0xAA },  // П
	{ 0x7E, 0x12, 0x12, 0x0C, 0xAA },  // Р
	{ 0x3C, 0x42, 0x42, 0x24, 0xAA },  // С
	{ 0x02, 0x7E, 0x02, 0xAA, 0x00 },  // Т
	{ 0x4E, 0x50, 0x50, 0x3E, 0xAA },  // У
	{ 0x0C, 0x12, 0x7E, 0x12, 0x0C },  // Ф
	{ 0x66, 0x18, 0x18, 0x66, 0xAA },  // Х
	{ 0x7E, 0x40, 0x40, 0x7E, 0xC0 },  // Ц
	{ 0x0E, 0x10, 0x10, 0x7E, 0xAA },  // Ч
	{ 0x7E, 0x40, 0x7E, 0x40, 0x7E },  // Ш
	{ 0x7E, 0x40, 0x7E, 0x40, 0xFE },  // Щ
	{ 0x02, 0x7E, 0x48, 0x30, 0xAA },  // Ъ
	{ 0x7E, 0x48, 0x30, 0x00, 0x7E },  // Ы
	{ 0x7E, 0x48, 0x30, 0xAA, 0x00 },  // Ь
	{ 0x24, 0x42, 0x4A, 0x3C, 0xAA },  // Э
	{ 0x7E, 0x08, 0x3C, 0x42, 0x3C },  // Ю
	{ 0x4C, 0x32, 0x12, 0x7E, 0xAA },  // Я

только все 0xAA замените на 0х00.
KIT
Контактная информация:
Реклама
Родился
Сообщения: 14
Зарегистрирован: Сб янв 12, 2008 00:01:59

Сообщение adruha »

да с буфером мне все более менее понятно он у меня лежит эт я пока все тестирую... вот мне бы уразуметь как двигать!?
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

Элементарно. в первый столбец экрана записываешь то что было во втором. во второй, то что было в третьем. и так далее. в последний столбец загружаешь новое значение.

вдруг поможет. вот функция, которая двигает по экрану текст. текст загружается в функцию в виде массива символов.

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

//________________бегущая строка_____________________
void beg_stroka (unsigned char x[],)
{
  unsigned char temp;
  #asm("cli")
  for (temp=0; temp<23; temp++)  {  ekran[temp]=ekran[temp+1]; } 
  if ((z==5)||(simvol[x[z1]][z]==0xAA)) {ekran[23]=0; z=0; z1++; if (x[z1]==255) z1=0;} else  {ekran[23]=simvol[x[z1]][z]; z++;} 
  #asm("sei")
  }   
это для матрицы 24*8
KIT
Контактная информация:
Родился
Сообщения: 14
Зарегистрирован: Сб янв 12, 2008 00:01:59

Сообщение adruha »

Как мне это реализовать в моем коде?
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

как реализовать я уже написал, а вот готовый код за вас никто писать не будет.
KIT
Контактная информация:
Родился
Сообщения: 14
Зарегистрирован: Сб янв 12, 2008 00:01:59

Сообщение adruha »

Не совсем понятно, вот и прошу объяснить! Писать за меня не надо ... :-) я и сам пописать могу.
Родился
Сообщения: 14
Зарегистрирован: Сб янв 12, 2008 00:01:59

Сообщение adruha »

Можно весь исходник 24х8 посмотреть?
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

функцию которая двигает текст я приводил выше. весь исходник бросил в личку(мне не жалко), но врядли это тебе чтото даст.

двигаю я текст так. например у тебя есть массив из 5 элементов. его можно представить как 5*8, т.е. пять столбцов по 8 точек(лямпочек). вывел в этот массив любой знак. дальше, если нужно двигать, то записываешь в первый элемент массива, то что хранится во втором. во второй то что хранится в третьем. и т.д. В последний элемент массива загружаешь новую информацию. ждешь некоторое время, и повторяешь процедуру. в итоге у тебя по экрану будет бежать текст(или любая другая информация)
KIT
Контактная информация:
Родился
Сообщения: 14
Зарегистрирован: Сб янв 12, 2008 00:01:59

Сообщение adruha »

Спасибо !! Теперь более понятнее! Но только текст у меня двигается не в строке а вверх !?? :dont_know:
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

ну считайте элемент не "первым" а "нижним". смысл от этого не меняется.
KIT
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»