|
Dot Matrix 5x7 (светодиодный точечный индикатор), Нужна помощь,консультация |
|
|
|
May 17 2015, 10:33
|

Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985

|
Доброго всем дня ! Вот написал таки я программу для вывода символа на индикатор... Но ! Когда я перебираю строки матрицы, выставляя данные на столбцы, то все нормально, а когда наоборот... То получается такая ерунда: Когда выставлена минимальная задержка, то на индикаторе скажим так ничего не отображается, а когда большая, то отображается таже буква, только медленно соответственно. Как решить данную проблему ? Вразумите, чем эти переборы строк отличаются от перебора столбцов ? Ниже текст программы, во вложенияи исходник и модель в Протеусе, а также проект целиком на ATMEL STUDIO 6.2. CODE #include <avr/io.h> #include <util/delay.h>
unsigned char k; //unsigned char arr[7]={0x07, 0x09, 0x11, 0x1F, 0x11, 0x11, 0x11}; //A перебераем строки, выставля данные на столбцы. //unsigned char arr[5]={0x60, 0x5F, 0x3F, 0x3F, 0x00};//A перебераем столбцы, выставля данные на строки. unsigned char arr[5]={0x60, 0x57, 0x37, 0x37, 0x00};//A перебераем столбцы, выставля данные на строки.
int main(void) {
PORTA=0xFF; DDRA=0xFF;
PORTB=0xFF; DDRB=0xFF;
while (1) { /*for(k=0;k<=6;k++) //Перебераем строки Данные выставляем на столбцы. { //PORTB=0x00; PORTA=arr[k]; //PORTB=0xFF; PORTB&=~(1<<k); _delay_ms(1); PORTB=0xFF; }*/ for(k=0;k<=4;k++) //Перебераем столбцы Данные выставляем на строки. { //PORTB=0x00; PORTB=0xFF; PORTA=arr[k]; PORTB&=~(1<<k); PORTB=~PORTB; //_delay_ms(100); //PORTB=0xFF; _delay_ms(1000); //При такой задержке более или менее адекватно выводится символ. } } }
Сообщение отредактировал IgorKossak - May 17 2015, 19:04
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Прикрепленные файлы
1.rar ( 17.1 килобайт )
Кол-во скачиваний: 9
matrix5x7.rar ( 83.85 килобайт )
Кол-во скачиваний: 11
|
|
|
|
|
 |
Ответов
|
Jun 15 2015, 11:36
|

Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985

|
Цитата(controller_m30 @ May 18 2015, 14:53)  Сначала надо разобраться с выводом неподвижного символа. и только потом переходить к бегущей строке  Ну вот разобрался с выводом символов, подключил сдвиговые регистры еще. А вот с бегущей строкой никак пока. Прикрепил проект, в который находится еще и модель в Протеусе (папка 1\1\model) 5.DSN. А также схема в ПДФ.
Прикрепленные файлы
5.PDF ( 248.09 килобайт )
Кол-во скачиваний: 98
1.7z ( 212.56 килобайт )
Кол-во скачиваний: 8
|
|
|
|
|
Jun 15 2015, 11:47
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(uzzzer @ Jun 15 2015, 14:36)  А вот с бегущей строкой никак пока. Когда выводите "неподвижную" строку, то всегда вывод начинается с одного и того же места - с начала строки. А для "бегущей", сделайте указатель на текущую позицию вывода "бегущей". И сделайте таймер, по которому этот указатель смещается на следующую позицию выводимого текста. Таймер, скажем на 1/4 или 1/2 или на 1 сек... А остальное, тоже как и в неподвижной. Сделайте вывод строки, как функцию, в которой передается начало строки и вся строка выводится, но не до конца строки, а до конца и потом до того места, откуда она начинается... Как бы круговой буфер... А над этой функцией надстройте ту, которая работает с таймером и меняет положение указателя начала...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Jun 15 2015, 12:17
|

Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985

|
Цитата(iosifk @ Jun 15 2015, 14:47)  Когда выводите "неподвижную" строку, то всегда вывод начинается с одного и того же места - с начала строки. А для "бегущей", сделайте указатель на текущую позицию вывода "бегущей". И сделайте таймер, по которому этот указатель смещается на следующую позицию выводимого текста. Таймер, скажем на 1/4 или 1/2 или на 1 сек... А остальное, тоже как и в неподвижной. Сделайте вывод строки, как функцию, в которой передается начало строки и вся строка выводится, но не до конца строки, а до конца и потом до того места, откуда она начинается... Как бы круговой буфер... А над этой функцией надстройте ту, которая работает с таймером и меняет положение указателя начала... Я пытался реализовать нечто подобное, все упирается в реализацию того самого кругового буфера. Как его организовать ? Дело в том, что у меня схема немного специфичная, у меня происходит управление перебором столбцов, а данные пишутся через регистры в столбцы. Если все наоборот делать (таких примеров в сети туча !), то проблема решается просто побитывым сдвигом строк (ну типа вертикальной развертки), а у меня получается, что двигать нужно не битики, а элементы массива, вот тут я и спотыкаюсь.
Сообщение отредактировал uzzzer - Jun 15 2015, 12:18
|
|
|
|
Сообщений в этой теме
uzzzer Dot Matrix 5x7 (светодиодный точечный индикатор) May 17 2015, 10:33 controller_m30 Нельзя ли выложить схему картинкой (если она конеч... May 17 2015, 19:29 uzzzer Цитата(controller_m30 @ May 17 2015, 22:2... May 18 2015, 00:39 controller_m30 Моё предложение такое.
В программу надо добавить е... May 18 2015, 09:03 uzzzer Цитата(controller_m30 @ May 18 2015, 12:0... May 18 2015, 11:02    iosifk Цитата(uzzzer @ Jun 15 2015, 15:17) Я пыт... Jun 15 2015, 13:06     uzzzer Цитата(iosifk @ Jun 15 2015, 16:06) Сдела... Jun 17 2015, 12:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|