Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LPT. Установить на конкретном контакте, единичку или нолик ) 
:(
    Опции темы
MoZy
  Дата 18.9.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 4.6.2006

Репутация: нет
Всего: 0



Привет всем!

какой бит данных соответствует контакту 2, 3 ,4 ... 9. Другими словами что и почему нужно передавать, чтобы например на 5ом контакте была логическая единица?

пробовал "10" для 3его - проходит. "01" для 2ого - нет, зато "101" проходит.

СУВ.

--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 18.9.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MoZy
Дата 18.9.2006, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 4.6.2006

Репутация: нет
Всего: 0



Romikgy, :\ чаво-то там только табличка и усе.
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
TarasH
Дата 19.9.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 3.9.2004

Репутация: 1
Всего: 1



http://lpt-port.narod.ru/5.html   посмотри сюда smile 
PM MAIL   Вверх
MoZy
Дата 19.9.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 4.6.2006

Репутация: нет
Всего: 0



TarasH, спасибо. хорошая ссылка. я ее давно нашел. но ответа там нет. зато кое-че понял: только первый Дата-контакт из 8ми "тупит", все остальные послушно слушаются (каламбур  smile ) двоичным командам. я на 1ый забил, пользуюсь остальными.
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
smalcom
Дата 20.9.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: 4
Всего: 7



Надо не забыть в биосе включить режим порта ECP,EPP.
Даю на всякий случай сорцы(вариант не идеальный но в моем простом случае работает)
В коде прием-передача данных по линиям DATA0-3
Упраляющий STROBE.
Код

//baselpt.h
/**
@author smalcom
Class for base operation(read, write data, control, status) with parallel port
*/

#define PDATA0        0
#define PDATA1        1
#define PDATA2        2
#define PDATA3        3
#define PDATA4        4
#define PDATA5        5
#define PDATA6        6
#define PDATA7        7
#define PSTROBE        0
#define PREAD        5

class CBaseLpt
{
private:
    uint baseport;
    byte data_r, status_r, control_r;
public:
    bool open;
    void SetData(byte dta);
    void SetDataPin(byte p, bool val);
    byte ReadData();
    byte ReadStatus();
    void SetControlPin(byte p, bool val);
    void Close();
    CBaseLpt();
    ~CBaseLpt();

};
/*************************************************/
//baselpt.cpp
#include "cbaselpt.h"
byte temp;
bool checked = false;

CBaseLpt::CBaseLpt()
{
    baseport = 0x378;
    if(ioperm(baseport, 3, 1))
        open = false;
    else
        open = true;
    //setup port
    outb(0x20, baseport + 2);
    control_r = 0x20;
}


CBaseLpt::~CBaseLpt()
{
}

void CBaseLpt::SetData(byte dta)
{
    outb(dta, baseport);
}

void CBaseLpt::SetDataPin(byte p, bool val)
{
    if(val)
        outb(inb(baseport) | (0x01 << p), baseport);
    else
        outb(inb(baseport) & (0xFF - (0x01 << p)), baseport);
}

void CBaseLpt::SetControlPin(byte p, bool val)
{
    if(val)
    {
        control_r |= 0x01 << p;
        outb(control_r, baseport + 2);
    }
    else
    {
        control_r &= (0xFF - (0x01 << p));
        outb(control_r, baseport + 2);
    };
}

byte CBaseLpt::ReadData()
{
byte temp;

    temp = inb(baseport);
    return temp;
}

byte CBaseLpt::ReadStatus()
{
    return inb(baseport + 1);
}

void CBaseLpt::Close()
{
}
/*************************************************/
//clpt.h
#include "cbaselpt.h"

#define packlen            5

/**
@author smalcom
*/
class CLPT : public QThread
{
private:
    bool setout;
    byte pout[NUM_OF_OUTPUTS];
    bool init;
    CBaseLpt *m_baselpt;
    bool write(byte c);
    bool read();
public:
    byte *rsbuf;
    byte *txbuf;

    bool Init();
    void Close();
    bool Poll();
    virtual void run();

    CLPT();
    ~CLPT();
};
/*************************************************/
//clpt.cpp
#include "clpt.h"
#define STDEL        100

bool run_lock;
struct timeval *ttv;

void ultrasleep(uint ultrasec, struct timeval *timeval_temp)
{
uint tusec, tusec2;

    gettimeofday(timeval_temp, NULL);
    tusec = timeval_temp->tv_usec + ultrasec;
    tusec2 = timeval_temp->tv_usec;
    if(tusec >= 999999)
    {
        tusec -= 999999;
        do
        {
            gettimeofday(timeval_temp, NULL);
        }while(timeval_temp->tv_usec >= tusec2);
    };
    do
    {
        gettimeofday(timeval_temp, NULL);
    }while(tusec > timeval_temp->tv_usec);
}

CLPT::CLPT()
{
    init = false;
    run_lock = false;
    ttv = new struct timeval;
}

CLPT::~CLPT()
{
    if(m_baselpt != NULL)
    {
        m_baselpt->Close();
        delete m_baselpt;
    };
}

bool CLPT::Init()
{
    m_baselpt = new CBaseLpt;
    if(!m_baselpt->open)
    {
        return false;
    };
    rsbuf = new byte[packlen];
    txbuf = new byte[packlen];
    return true;
}

void CLPT::Close()
{
    if(m_baselpt != NULL)
    {
        m_baselpt->Close();
        delete m_baselpt;
    };
    init = false;
}

bool CLPT::Poll()
{
    start();//здесь запускается тред - функция run
    return true;
}

bool CLPT::write(byte c)
{
word temp;

    m_baselpt->SetControlPin(PREAD, false);
    //setup packet for write
    txbuf[0] = 0xAB;
    txbuf[1] = c;
    txbuf[4] = txbuf[1] + txbuf[2] + txbuf[3];
    for(uint bc = 0; bc < packlen; bc++)
    {
        temp = txbuf[bc];
        m_baselpt->SetData((temp & 0x0F) | 0x10);
        m_baselpt->SetControlPin(PSTROBE, true);
        ultrasleep(STDEL, ttv);
        m_baselpt->SetControlPin(PSTROBE, false);
        ultrasleep(STDEL, ttv);

        m_baselpt->SetData((temp >> 4) & 0x0F);
        m_baselpt->SetControlPin(PSTROBE, true);
        ultrasleep(STDEL, ttv);
        m_baselpt->SetControlPin(PSTROBE, false);
        ultrasleep(STDEL, ttv);
    };
    m_baselpt->SetControlPin(PREAD, true);
    return true;
}

bool CLPT::read()
{
word temp;

    for(uint bc = 0; bc < packlen; bc++)
    {
        m_baselpt->SetControlPin(PSTROBE, true);
        ultrasleep(STDEL, ttv);
        rsbuf[bc] = m_baselpt->ReadData() & 0x0F;
        m_baselpt->SetControlPin(PSTROBE, false);
        ultrasleep(STDEL, ttv);

        m_baselpt->SetControlPin(PSTROBE, true);
        ultrasleep(STDEL, ttv);
        rsbuf[bc] += ((m_baselpt->ReadData() & 0x0F) << 4);
        m_baselpt->SetControlPin(PSTROBE, false);
        ultrasleep(STDEL, ttv);
    };
    temp = rsbuf[1] + rsbuf[2] + rsbuf[3];
    if(temp == rsbuf[4])
        return true;
    else
        return false;
}

void CLPT::run()
{

    if(!init)
    {
        txbuf[2] = 0x00;
        txbuf[3] = 0x00;
        write(CMD_INIT);
        //read answer
        if(read())
        {
            init = true;
            goto run_end;
        };
    }
    else
    {
        txbuf[2] = 0x00;
        txbuf[3] = 0x00;
        write(CMD_POLL);
        if(read())
        {
            txbuf[3] = 0x00;
            write(CMD_ACK);
        };
    };
    return;
}


Это сообщение отредактировал(а) smalcom - 20.9.2006, 09:46


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.