Меню

 

Форум

Список форумов :: ЖК-индикаторы :: Помогите найти ошибку при работе с MT-10S1
fAL
31 октября 2006 19:25

Id сообщения: 2448
Помогите найти ошибку при работе с MT-10S1
Распаял по схеме приведенной в примере. Выдает тестовую строку при помощи вашей программы. А вот моя программа ни хочет работать (при запуске тестовая строка с экрана пропадает, т.е. на порт что то выходит). Пожалуйста посмотрите код:


#include <stdio.h>
#include
#include
#include

#include "h.h"
int x;
int main(){



//инициализация, устанавливаем разрядность интерфейса (3 раза)
Out32(888,48); //D(7...0) 00110000
Out32(889,0); //E=1 (с учетом инверсии порта), A0=0
Sleep(10);//задержка в миллисекундах
Out32(889,1); //E=0 (с учетом инверсии порта), A0=0


Sleep(10);


Out32(889,0);//E=1 (с учетом инверсии порта), A0=0
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0


Sleep(10);


Out32(889,0);//E=1 (с учетом инверсии порта), A0=0
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0
Out32(888,0);//D(7...0) 00000000

Sleep(10);//установка параметров

Out32(888,56);//установка разрядности интерфейса D(0...7) 00111000
Out32(889,0);//E=1 (с учетом инверсии порта), A0=0
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0
Out32(888,0);//D(7...0) 00000000
Sleep(10);

Out32(888,8);//выключение дисплея D(7...0) 00001000
Out32(889,0);//E=1 (с учетом инверсии порта), A0=0
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0
Out32(888,0);//D(7...0) 00000000
Sleep(10);


Out32(888,1);//очистка дисплея D(7...0) 00000001
Out32(889,0);//E=1 (с учетом инверсии порта), A0=0
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0
Out32(888,0);//D(7...0) 00000000
Sleep(10);

Out32(888,6);//установка направления сдвига D(7...0) 00000110
Out32(889,0);//E=1 (с учетом инверсии порта), A0=0
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0
Out32(888,0);//D(7...0) 00000000
Sleep(10);
//инициализация завершена


Out32(888,128);//установка адреса памяти для записи в DDRAM D(7...0) 10000000
Out32(889,0);//E=1 (с учетом инверсии порта), A0=0
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0
Out32(888,0);//D(7...0) 00000000
Sleep(10);


//начинаем запись

for (x=0; x<10;x++){
Out32(888,48);//выводим на порт символ 0 (код 30h) D(7...0) 00110000
Out32(889,5);//E=1 (с учетом инверсии порта), A0=1
Sleep(10);
Out32(889,1);//E=0 (с учетом инверсии порта), A0=0
Out32(888,0);//D(7...0) 00000000
Sleep(10);
}



return 0;
}

Петухов
01 ноября 2006 04:53

Id сообщения: 2462

Извините, я не стал детально разбираться в этом огромном листинге (времени жалко), вижу минимум одну ошибку (как мне кажется): адреса портов должны быть 888 и 890 (0x378 и 0x37A), а не 888 и 889 (0x378 и 0x379)!
Ещё, в нашей программе (которая как Вы говорите работает нормально) управляющие сигналы выводятся значениями 2 и 3 (для команд) и 6 и 7 (для данных). А у Вас - 0, 1, 5. Ошибка это или нет не знаю, проверьте сами.
Остальное вроде на первый взгляд правильно.
fAL
01 ноября 2006 09:40

Id сообщения: 2466

Спасибо, действительно с портом ошибся.
"Ещё, в нашей программе (которая как Вы говорите работает нормально) управляющие сигналы выводятся значениями 2 и 3 (для команд) и 6 и 7 (для данных). А у Вас - 0, 1, 5. "
А этот аспект можно поподробнее?
Петухов
01 ноября 2006 15:41

Id сообщения: 2469

Что тут подробнее? Я посмотрел нашу программу для тестирования индикаторов через LPT порт, там выводятся значения 2,3,6,7 в порт 0x37A, а у Вас - 0,1,5. Важно ли это отличие я не знаю, потому и сказал Вам. Будет интересно - разберётесь, не будет - оставьте как работает. Я просто уже не помню почему у нас сделано именно так, давно это было.
fAL
01 ноября 2006 23:02

Id сообщения: 2472

ЗАРАБОТАЛО! не знаю где я вычитал такую дурь как инверсия в C0, но вообщем поменял и ЗАРАБОТАЛО :))) если надо, могу дать листинг что бы будующие поколения не так мучались ))
Головин_Сергей
02 ноября 2006 11:25

Id сообщения: 2475

Вот и мы тоже думаем, почему каждый, даже зная, что все уже было написано раньше и при том не раз, тем не менее продолжает мучаться самостоятельно СНОВА и СНОВА :=)
Петухов
02 ноября 2006 11:56

Id сообщения: 2476

Листинг спасибо, но не надо. Тем более если он такой же как выше. Обычно выдачу команд и данных в индикатор оформляют отдельной процедуркой: и ошибок меньше, и модифицировать легче, и разбираться, и программа яснее. Не зря же придумали такую штуку как процедура.

А вот про инверсию... В нашей программе сигнал E выдаётся командами: Out(0x37A,2); Sleep(); Out(0x37A,3); (для команд). Т.е. тоже инверсно. Откуда Вы взяли "дурь" про инверсию - не знаю. А взять осциллограф (или хоть вольтметр) и посмотреть на реальный сигнал не судьба?
Arturian
15 июля 2007 16:23

Id сообщения: 3912

FAL - Дайте пожалуйста листинг на мыло arturian@inbox.ru


Код подтверждения:
Для зарегистрированых:
Логин
Пароль
Забыл пароль Регистрация Поиск


Телефоны офиса компании МЭЛТ:
тел: (495) 662-4414
e-mail: sales@melt.com.ru
ICQ: 221-319-648
Skype имя: melt-mos

Фактический адрес: 111024, Москва, Андроновское шоссе, д.26

Adress: 111024, Moscow, Andronovskoe highway, 26.

Адрес для корреспонденции: 109145, г. Москва, а/я 37, ООО "МЭЛТ".

Address for mail:  109145, Moscow, post box 37, MELT Ltd..

Продукция | Печатные платы | Сборочно-монтажные услуги | Документация | Цены | Новости | Контакты | Купить | Форум
создание - prorock web-soft