Страница 1 из 1

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

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

code.txt
(2.27 КБ) 226 скачиваний

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

Добавлено: Чт дек 16, 2010 23:31:32
Aheir
Код нужно оформлять вложением. Исправляйте, иначе тема будет удалена.

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

Добавлено: Пт дек 17, 2010 00:32:13
O-LED
тебе нужен "экранный буфер", из которого по прерыванию будут загружаться 595регистры. это будет происходить не зависимо от основной программы, и никаких мерцаний не будет. А в основной программе уже можешь делать с "экранным буфером" что тебе надо, - выводить буквы, двигать их, да хоть вращать вокруг своей оси.

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

Добавлено: Пт дек 17, 2010 13:03:34
oleg-him
здрасть! собрал я схему (прикреплена ниже) и есть подозрения что собрал неправильно. поэтому появился вопрос, что должен показывать индикатор если к hc595 на вход ничего не подключено? вроде должен все восьмёрки засветить, а он непонятно что кажет, полубуквы полуцифры, корявки разные.. когда атмегу подключаю такая-же фигня...

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

Добавлено: Вс дек 19, 2010 14:54:16
adruha
С мерцанием вроде разобрался все светится стабильно (не знаю все ли правильно сделал.). Но вот теперь проблема другая как сдвигать текст и как подгружать следующий символ не пойму. Если не трудно помогите примером как это решить?
code.txt
(3.57 КБ) 280 скачиваний

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

Добавлено: Вс дек 19, 2010 16:20:48
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.

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

Добавлено: Вс дек 19, 2010 17:51:40
adruha
да с буфером мне все более менее понятно он у меня лежит эт я пока все тестирую... вот мне бы уразуметь как двигать!?

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

Добавлено: Вс дек 19, 2010 18:14:14
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

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

Добавлено: Вс дек 19, 2010 20:24:43
adruha
Как мне это реализовать в моем коде?

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

Добавлено: Вс дек 19, 2010 20:41:22
O-LED
как реализовать я уже написал, а вот готовый код за вас никто писать не будет.

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

Добавлено: Пн дек 20, 2010 00:09:11
adruha
Не совсем понятно, вот и прошу объяснить! Писать за меня не надо ... :-) я и сам пописать могу.

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

Добавлено: Пн дек 20, 2010 20:03:53
adruha
Можно весь исходник 24х8 посмотреть?

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

Добавлено: Пн дек 20, 2010 20:27:21
O-LED
функцию которая двигает текст я приводил выше. весь исходник бросил в личку(мне не жалко), но врядли это тебе чтото даст.

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

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

Добавлено: Пн дек 20, 2010 22:08:01
adruha
Спасибо !! Теперь более понятнее! Но только текст у меня двигается не в строке а вверх !?? :dont_know:

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

Добавлено: Пн дек 20, 2010 22:35:05
O-LED
ну считайте элемент не "первым" а "нижним". смысл от этого не меняется.