Дисплей MT-10S1: управление по LPT

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Сообщение Артур »

Здравствуйте! Нуждаюсь в вашей помощи.
Подключил этот дисплей к LPT порту
Для вывода информации в порт использовал inpout32.dll
Пробовал разные варианты но не могу запустить девайс
То что он сам рабочий знаю на 100% (проверял спец. прогой)
Помогите пожалуйста найти ошибку
Вот сам код

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

#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "h.h"
#include "windows.h"
#include <stdio> 

int Data=888,Control=890;//Port Lpt
int x;
main()
{
//Инициализация дисплея согласно документации
    Out32(Data,48);//DB=00110000
    Sleep(10);
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
Sleep(10);
    Out32(Data,48);//DB=00110000
    Sleep(10);
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
Sleep(1);
    Out32(Data,48);//DB=00110000
    Sleep(10);
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
Sleep(100);	
    Out32(Data,56);//Function_Set
    Sleep(10);
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
Sleep(100);
    Out32(Data,56);//Function_Set
    Sleep(10);
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
Sleep(100);
    Out32(Data,1);//Clear_Display
    Sleep(10);
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
Sleep(4);
    Out32(Data,6);
    Sleep(10);
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
//конец инициализации
//запись в дисплей символа 5 по адресу 0
//выбор адреса памяти
    x=0;
    Out32(Data,128+x);//Set_DDRAM_Address
    Out32(Control,2);//E=1
    Sleep(10);
    Out32(Control,3);//E=0
Sleep(4);
//вывод символа	
    Out32(Data,53);//символ 5
Sleep(4);
    Out32(Control,223);//Write_Data_to_RAM
return(0);
}
Последний раз редактировалось Артур Ср июл 18, 2007 18:45:47, всего редактировалось 1 раз.
Век живи! - Век учись!
ICQ-15B87330h
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Я не работал с inpout32.dll и не знаю, как работает Out32(...,...), но, похоже, когда Вы выводите данные в порт, то изменяете другие биты. А надо устанавливать (или сбрасывать) только определённый бит, а остальные не трогать!
Вот пример, как делал я, когда дёргал индикатор через LPT порт.
(это было из-под DOS-а. компилятор Borland C++ 3,0)

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

// bit 0, line 1 "Strobe"

void lcd_set_e() // Установить строб
{
    extern lpt_base; //base address of LPT port
    extern unsigned char control_byte;
    // устанавливаем в 0 только bit 0,
    // остальные не трогаем!
    control_byte = (control_byte & 254);
    outportb(lpt_base+2, control_byte);
}

void lcd_clear_e() // сбросить строб
{
    extern lpt_base; //base address of LPT port
    extern unsigned char control_byte;
    // устанавливаем в 1 только bit 0,
    // остальные не трогаем!
    control_byte = (control_byte | 1);
    outportb(lpt_base+2, control_byte);
}
И вообще, Вы пробовали своей программой просто помигать светодиодиками через LPT, прежде, чем подключать к нему индикатор?
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Попробуй для управления линиями LPT использовать мою программку Hardware Control
Для того, чтобы разобраться с алгоритмом работы собственно индикатора ее возможностей более чем достаточно. А когда разберешься - напишешь свою прогу, на нормальном языке программирования :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Сообщение Артур »

Барсик, ARV - Спасибо вам! Проблема решена! :)
Век живи! - Век учись!
ICQ-15B87330h
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Хоть бы рассказал, в чем дело было, как нашел, как справился...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Сообщение Артур »

При записи символа надо было делать так:

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

//Очистка дисплея и перемещение курсора влево
Out32(Data,1);//Clear_Display
Out32(Control,2);//E=1
Sleep(1);
Out32(Control,3);//E=0
//Запись символа 
Out32(Data,65);//символ "А"
Out32(Control,7);//E=0 ,AO=1
Out32(Control,6);//E=1 ,AO=1
Sleep(1);
Out32(Control,7);//E=0 ,AO=1
Если вдруг кому нужен рабочий код - выкдадываю, но надо будет почитать о применении библиотеки inpout32.dll
Вложения
MT-10S1_&_LPT.txt
(2.35 КБ) 662 скачивания
Век живи! - Век учись!
ICQ-15B87330h
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Сообщение Артур »

Еще вот сама библиотека со справкой по использованию
Предлагаю закрыть тему!
Вложения
inpout32.rar
(12.05 КБ) 630 скачиваний
Век живи! - Век учись!
ICQ-15B87330h
Ответить

Вернуться в «Интеграция с ПК»