Página 1 de 2

Auxilio - Porta Paralela

MensagemEnviado: 31 Jul 2007 16:38
por gilbert_SS
Olá pessoal.

Tentando fazer alguns projetos basicos para aprendizado meu com porta paralela, ao perceber erro nos comandos outportb e inportb fui a busca na net e compreendi que isto eh devido ao windows xp ter algumas proteções que impedem acesso direto.

Fiz de tudo que encontrei, tem um site p/ baixar uma dll; alem do bem conhecido portal do Rogercom tb tras uma esplicação boa, mas nada resolveu!!

não consigo compilar estas instruções. Ja tentei no Visual C++ e no Dev-C++.

Alguem ai poderia de dar uma ajuda, uma descrição de como resolver esta dificuldade?

Fico grato.
Valeu.
Gilberto Kummerloewe.

MensagemEnviado: 01 Ago 2007 12:52
por __JEREK__
dá uma olhadinha no site do Rogercom que lá mostra como fazer isso.

abraços!

MensagemEnviado: 01 Ago 2007 13:57
por chipselect

MensagemEnviado: 01 Ago 2007 14:49
por andre_luis
Voce pode executar o aplicativo Userport para desbloquear, porém o mais indicado é usar uma .DLL encontrada na Web para isso, nao lembro do nome, mas todo mundo usa.

+++

MensagemEnviado: 02 Ago 2007 16:38
por mrtabs
eh isso ai que o andre falou.
Nos sistemas que o acesso a hardware eh protegido (Win 2k, XP etc), voce tem que usar um device driver para isso.
Porem, ha uma dll, que eu tb nao lembro o nomem que en capsula um device driver e consegue acessar diretamente os pinos da paralela.

falow

MensagemEnviado: 02 Ago 2007 16:58
por B-EAGLE
gilbert, estava fazendo um projetinho usando a porta paralela tempos atrás, e você tem de fazer o seguinte:

em primeiro lugar, utilizar o UserPort ou o PortTalk, como o chipselect sugeriu, porém utilizei somente o UserPort:

Pegue o UserPort aqui:
http://www.4shared.com/network/search.j ... e=userport

Após descompactar, copie o arquivo UserPort.sys para o diretório x:\WINDOWS\SYSTEM32\DRIVERS

Após isto execute o UserPort.exe, selecione todos os intervalos que já estão ali adicionados (200 - 37F; 3BC - 3BF e 3E8 - 3FF), nos dois lados, e delete-os.

Depois adicione os endereços que você quer manipular, por exemplo 378-37A, dos dois lados novamente.

Após adicionar estes dois intervalos, dê um Start, pronto, a porta paralela está acessível agora, pode fechar o userport e não abri-lo mais.


Quando a questão de você não conseguir compilar as funções outportb e inportb, realmente estes dois compiladores que você citou dão erros quando vão compilar, consegui compilar usando o Borland C++ 3.11 e o 4.5.

Abraço.

O nome

MensagemEnviado: 05 Abr 2008 00:27
por Budweiser
Pessoal, o nome da bendita dll é "impout.dll"...
Serve tanto no C quanto no Delphi...

Abraços!

Re: O nome

MensagemEnviado: 05 Abr 2008 09:13
por Jorge_Francisco
Usa só a dll, é mais pratico.

Re: O nome

MensagemEnviado: 05 Abr 2008 21:14
por andre_luis
Então...

O mais profissional seria usar API do windows para isso, sem ter que adicionar alguma DLL, pois assim todo o programa estaria encapsulado num unico arquivo executável.

E sem ter a necessidade de executar algum programa que desbloqueasse estaticamente as portas do windows.

No tópico abaixo, postei uma rotina que faz isso :

http://www.asm51.eng.br/phpbb/viewtopic.php?t=4792&start=15

A vantagem dessa filosofia é que se pode usar nas portas LPT nao convencionais ( emuladas ), cujo endereço-base é desconhecido.


+++

Re: O nome

MensagemEnviado: 05 Abr 2008 22:45
por Jorge_Francisco
Mas andré, dentro da dll as funções foram feitas em C usando a API do Windows, a vantagem da dll é que pode ser reutilisada em vários projetos em qualquer linguagem.

Abraço

Re: O nome

MensagemEnviado: 06 Abr 2008 17:45
por andre_luis
Jorge,

Ok, o programa pode ficar mais limpo e fácil de trabalhar ao plugar uma DLL pronta. É uma idéia que seduz. Se não for um caso crítico, o melhor mesmo é usar algo pronto e terminar logo o trabalho; mas quando se tem o código fonte, fica mais fácil debugar, além de que se pode otimizar o funcionamento do driver, retirando ou incluindo funcionalidades. Além de que ( creio eu ) ficaria mais difícil alocar essa DLL em uma thread específica, se quizesse atribuir algum nível de prioridade diferenciado à ela.

Eu, pessoalmente, prefiro trabalhar com DLL´s apenas quando elas já estão prontas e fazem parte do sistema operacional, e não criá-las. Prefiro que o usuário final tenha que lidar com apenas 1 arquivo; mas cada caso é um caso, realmente.

+++

MensagemEnviado: 07 Abr 2008 07:19
por CCandido
impout.dll se não for de 32k de tamanho não funciona.....

MensagemEnviado: 07 Abr 2008 10:46
por Jorge_Francisco
CCandido escreveu:impout.dll se não for de 32k de tamanho não funciona.....


A minha tem 32KB e funciona perfeitamente, coloquei um exemplo(C++ Builder) pra download :

http://www.4shared.com/file/43318995/34 ... alela.html

MensagemEnviado: 07 Abr 2008 12:10
por andre_luis
int pinos_378[8]={2,3,4,5,6,7,8,9};
int pinos_379[8]={0,0,0,15,13,12,10,11};
int pinos_37A[8]={1,14,16,17,0,0,0,0};


Este é o problema!!!!

Isso aí funciona bem quando voce trabalha com portas nativas que podem ser enxergadas pela BIOS ( LPT1 , LPT2 e eventualmente LPT3 ), mas se voce tiver por exemplo um conversor USB/paralelo, já não é mais possível trabalhar desta maneira.

Esta rotina trabalha com endereços pré-definidos, e não com mapeamento de dispositivos no Registro do windows. A função baseada na API CreateFile, indicada no outro tópico, utiliza o próprio nome do dispositovo ( LPTn ) como entrada.

+++

MensagemEnviado: 07 Abr 2008 12:52
por Jorge_Francisco
andre_teprom escreveu:
int pinos_378[8]={2,3,4,5,6,7,8,9};
int pinos_379[8]={0,0,0,15,13,12,10,11};
int pinos_37A[8]={1,14,16,17,0,0,0,0};


Este é o problema!!!!

Isso aí funciona bem quando voce trabalha com portas nativas que podem ser enxergadas pela BIOS ( LPT1 , LPT2 e eventualmente LPT3 ), mas se voce tiver por exemplo um conversor USB/paralelo, já não é mais possível trabalhar desta maneira.

Esta rotina trabalha com endereços pré-definidos, e não com mapeamento de dispositivos no Registro do windows. A função baseada na API CreateFile, indicada no outro tópico, utiliza o próprio nome do dispositovo ( LPTn ) como entrada.

+++


Testei aquele código, mas não funcionou aqui, talvez usando o userport + código funcione. Resolveu aquele problema?