Например TDA7294

Форум РадиоКот • Просмотр темы - МК "AT89C51" и LCD "LM016L". Не могу разобраться с кодом.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 06:05:15

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: МК "AT89C51" и LCD "LM016L". Не могу разобраться с кодом.
СообщениеДобавлено: Пт янв 26, 2018 06:40:56 
Родился

Зарегистрирован: Пт янв 26, 2018 04:13:28
Сообщений: 5
Рейтинг сообщения: 0
Код пишу в: Kell uVision
Тестирую в: PROTEUS
Исходники все ниже

Ни как не могу понять почему код не работает на МК хотя спокойно компилируется.
На сколько я понял код просто зависает на одном из циклов и не движется дальше.

Сам код: (Урезанный немного)
Спойлерsbit P1_0 = 0x90;
sfr P0 = 0x80;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TH0 = 0x8C;
sfr Data = 0xA0;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit RS = 0xB5;
sbit RW = 0xB6;
sbit E = 0xB7;

timer()
{
TMOD = 0x01;
TH0 = 60136 >> 8;
TL0 = 60136;
TR0=1;
while(!TF0);
TF0=0;
}

cmd(char command)
{
RS=0;
RW=0;
E=1;
Data=command;
E=0;
timer();
}

symbol(char command)
{
RS=1;
RW=0;
E=1;
Data=command;
E=0;
timer();
}

intilization()
{
int i;
for (i = 0; i < 3; i++)
{
timer();
RS = 0;
RW = 0;
Data = 0x30;
}
timer();
cmd(60); // начальные установки
cmd(14); // Курсор
cmd(1); // Отчистка дисплея
cmd(6); // Режим ввода
}

//***********************************************
//***********************************************


int mass[8][5] = {
{1,0,0,0,1,},
{0,0,0,0,0,},
{0,1,1,1,0,},
{0,1,0,1,0,},
{0,1,0,1,0,},
{0,1,1,1,0,},
{0,0,0,0,0,},
{1,0,0,0,1,}};

void video();
void main(void)
{
P1_0 = 0; // Погасить лампочки
intilization(); // Инцилизация дисплея
cmd(0x01); // отчистка дисплея

video(); // Вывод масива на экран

// cmd(0x40); // Установка адреса
// cmd(0x80); // превод на 0 позицию.
// cmd(0xC0); // Перевод на другую строку
while(1);
}



void video() // Вывод масива на экран
{
int line[8] = {0}; // Делим весь массив на строчки
int i,a,p = 0, y = 0;

for (i = 0; i < 8; i++) // Переписываем весь двумерный массив в массив line
{
for(a = 0; a < 5; a++) // Пробегаемся по каждым 5 битам
{
cmd(0x80+a);symbol(0x30); // По идее должны написаться 5 подряд нулей.
line[i] = line[i] + mass[y][a]; // строка | столбец
if (a < 4)
line[i] = line[i] << 1; // записываем все в 1 ячейку

}
while(1);
y++; // С каждым циклом переходим на строку ниже
}
for (i = 0; i < 8;i++) // Добавляем бит (10 000) каждому значению в массив line
{
line[i] = line[i] + 512;
}
// Тест.
cmd(0x40); // Команда Установка адреса CGRAM
for (i = 0; i < 8; i++)
{
symbol(line[i]); // Запись в CGRAM
}

cmd(0x80); // Установка курсора на 1 строку
symbol(0x00); // Вывод первого символа
while(1);
}

Насколько я понял, ошибка появляется именно в этом цикле:
Код:
for (i = 0; i < 8; i++)            // Переписываем весь двумерный массив в массив line
   {
      for(a = 0; a < 5; a++)         // Пробегаемся по каждым 5 битам
      {   
         cmd(0x80+a);symbol(0x30);      // По идее должны написаться 5 подряд нулей.
         line[i] = line[i] + mass[0][a];   // строка | столбец
         if (a < 4)
            line[i] = line[i] << 1;         // записываем все в 1 ячейку
            
      }
      while(1);
      y++;                           // С каждым циклом переходим на строку ниже
   }

после цикла FOR ниже специально поставил бесконечный цикл Что бы проверить остановится ли весь процесс
НО получается так что он почему то бесконечно бегает внутри цикла FOR и даже не доходит до цикла while(1);
что бы убедиться в этом внутри цикла FOR поставил 2 команды
Цитата:
cmd(0x80+a);
symbol(0x30);
на вывод символа "0" и переход на следующую ячейку. Соответственно никакого перехода нету.
СпойлерИзображение

А если убрать две строки:
Код:
      line[i] = line[i] + mass[0][a];   // строка | столбец
         if (a < 4)
            line[i] = line[i] << 1;   

То все работает как нужно!
Хотя они даже никак не влияют на вывод символа ноль
СпойлерИзображение

...
Вообщем я не понимаю почему с ними ничего не работает

Вообще программа заключается не ввыводе ноликов на экран :))
Это небольшой пример проблемы.


Вложения:
Proteus.rar [42.63 KiB]
Скачиваний: 128
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: МК "AT89C51" и LCD "LM016L". Не могу разобраться с кодом
СообщениеДобавлено: Пт янв 26, 2018 12:08:54 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Этот участок кода
Спойлер
Код:
   // Тест.
   cmd(0x40);                  // Команда Установка адреса CGRAM                           
   for (i = 0; i < 8; i++)
   {
      symbol(line[i]);         // Запись в CGRAM
   }
Изменить на
Спойлер
Код:
   // Тест.
for (i = 0; i < 8; i++)
   {
   cmd(0x40+i);            // Команда Установка адреса CGRAM
        symbol(line[i]);      // Запись в CGRAM
   }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: МК "AT89C51" и LCD "LM016L". Не могу разобраться с кодом
СообщениеДобавлено: Пт янв 26, 2018 12:50:20 
Родился

Зарегистрирован: Пт янв 26, 2018 04:13:28
Сообщений: 5
Рейтинг сообщения: 0
Этот участок кода
Спойлер
Код:
   // Тест.
   cmd(0x40);                  // Команда Установка адреса CGRAM                           
   for (i = 0; i < 8; i++)
   {
      symbol(line[i]);         // Запись в CGRAM
   }
Изменить на
Спойлер
Код:
   // Тест.
for (i = 0; i < 8; i++)
   {
   cmd(0x40+i);            // Команда Установка адреса CGRAM
        symbol(line[i]);      // Запись в CGRAM
   }


Какой смысл? Если код не может дойти даже до этого участка.
Он застревает в обычном цикле FOR и повторяется в нем бесконечно.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: МК "AT89C51" и LCD "LM016L". Не могу разобраться с кодом
СообщениеДобавлено: Пт янв 26, 2018 14:45:32 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Попробуйте так
Спойлер
Код:
char mass_2 [7] = {0x11,0x00,0x0E,0x0A,0x0E,0x00,0x11};

void zagrus_mass_2 (void) {
 char i;
    for (i = 0; i < 8; i++)
   {
         cmd(0x40+i);
         symbol(mass_2[i]);         // Запись в CGRAM
   }
}


zagrus_mass_2();
   cmd(0x80);            //
   symbol(0x00);          // Вывод первого символа


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: LCD "LM016L". Объяснит мне в чем отличие?
СообщениеДобавлено: Сб янв 27, 2018 06:31:39 
Родился

Зарегистрирован: Пт янв 26, 2018 04:13:28
Сообщений: 5
Рейтинг сообщения: 0
Код пишу в: Kell uVision
Тестирую в: PROTEUS
МК "AT89C51"
LCD "LM016L".

Столкнулся с одной интересной проблемой которая мне мешает дальше что то делать.
Собственно сам код:
Код:
void main(void)
{   
   int AA[5] = {1,0,0,0,1};   // Массив пикселей.
   int S = 0;   

   intilization();       // Инцилизация дисплея
   cmd(0x01);        // отчистка дисплея
   S = S + AA[0];          // 0 + 1 = 1
   cmd(0x40);          // Установка адреса CGRAM
   symbol(512+S);      // Прибавляем биты 10 000
   symbol(512);
   cmd(0x80);            // Установка адреса на 1 ячейку
   symbol(0x00);      // Вывод символа
   while(1);
}

и результат:
СпойлерИзображение

По идее должен загореться 1 пиксель на экране.
НО если в строчке S = S + AA[0]; заменить АА прпосто на значение 1 то все работает.
СпойлерИзображение


Я не понимаю просто почему так происходит. Ведь значение элемента массива AA[0] и так равно 1.


Вложения:
Proteus.rar [38.8 KiB]
Скачиваний: 130
Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: LCD "LM016L". Объяснит мне в чем отличие?
СообщениеДобавлено: Сб янв 27, 2018 06:46:39 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
symbol() какой параметр обрабатывает? Приведите эту функцию.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: МК "AT89C51" и LCD "LM016L". Не могу разобраться с кодом
СообщениеДобавлено: Сб янв 27, 2018 06:58:05 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Denzell, зачем плодите темы, состоящие из нескольких постов и одинаковые по смыслу ?
Перенёс сообщения из другой темы сюда.

PS: И не цитируйте полностью предыдущие сообщения, иначе отправлю читать правила.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y