Buscando pela internet achei vários tutoriais passo-a-passo de como fazer algumas ligações e uma me chamou bastante atenção, pois era bem barato e eu já possuia o item mais caro em casa.
Tendo o cabo paralelo que custa por volta de R$ 5 já me deu um animo de tentar iniciar nisso já que o gasto com o resto dos materiais seria mínimo.
Na saída do trabalho fui andando até uma loja de eletrônica e comprei 10 LEDs (R$ 2,50), 10 resistores de 470 ohms (R$ 1,50) e 2 metros de fio de telefone dobrado (R$ 0,40). Peguei emprestado um protoboard com um amigo da faculdade e com apenas R$ 4,40 comecei a brincadeira.
No protoboard eu liguei os resistores em séries com o positivo do LED e o lado negativo eu liguei tudo numa linha só, que será ligado ao GROUND na porta paralela.
Os resistores eu liguei das saídas 2 até a saída 9 da porta paralela, e o ground ficou ligado na saída 25.
Com isso já estava com tudo pronto pra começar a programar. Quando liguei o cabo paralelo no computador vi o triste resultado, um único LED aceso e nada do código em C que eu havia pego pronto na net funcionar. Reiniciei e fui ao Windows e nada de ter porta paralela funcionando por lá também, então dei uma fuçada no BIOS e por acaso a porta paralela estava Disabled :P
Voltando ao Linux e executando o software os LEDs já funcionavam perfeitamente, então agora era a segunda missão, entender como funcionava o software.
Daí depois de entendido criei meu próprio controle dos LEDs, bem simples mesmo só para vê-los “dançando”, segue o código e em seguida a explicação:
As funções que devem ser explicadas são somente a ioperm() e outb(), a primeira (ioperm) libera permissão para acessar a porta especificada, a segunda (outb) envia os bits para a porta paralela, que no caso do meu programa é enviado um número decimal mesmo que é equivalente ao número em bits.
Um exemplo de funcionamento é caso seja enviado 6 para o outb() que equivale a 00000110, nesse caso se acenderiam o segundo e o terceiro LED. Simples não?
Um vídeo desse meu código sendo executado:
Uma pena a qualidade ter ficado tão ruim, filmar de madrugada mesmo com a luz acesa não fica tão bom.
21 Responses
Diego Chavão
Março 28th, 2010 at 10:17 pm
1Ligando LEDs pela porta paralela com código em C – http://bit.ly/bnPl3Y
Chavão Bookmark
Março 28th, 2010 at 10:22 pm
2Tip @Techmeme http://bit.ly/bnPl3Y "Ligando LEDs pela porta paralela com código em C"
Leonardo Schäffer
Março 28th, 2010 at 11:21 pm
3Muito legal Chavão!
Simples exemplo de fiz por que posso
Chavão
Março 28th, 2010 at 11:40 pm
4Na verdade é um exemplo para mostrar que qualquer um pode fazer, por ser fácil e barato! =D
Rael Max
Março 29th, 2010 at 8:53 am
5Boa, Chavão!
Curti a parada, dá até vontade de fazer também. =P
guiggs
Abril 18th, 2010 at 9:31 pm
6Quando as naves alieniginas chegarem, eu vou usar você pra me comunicar, que nem o tecladista do Contatos Imediatos de 3º grau. Hahaha. Maneiro o resultado (:
Paulo Martins
Junho 19th, 2010 at 2:16 pm
7Bah meu interessante ! eu to fazendoo algo parecidoo cm isso mas os leds tem que ligarem cm um despertador ou seja se um usuário colocar q o led tem q ascender ás 12H ele terá de ascender!bom isso eu matei!sohh tem um probleminha!eu não consigo fazer 2 ou mais leds ascenderem no mesmoo horário!!
e outroo problema ainda!se o usuário colocar la para que o led ascenda ás 12H e outro ascenda ás 12:02H eu naaum consigo fazer q eles fikem acessos ao mesmo tempo sempre o primeiro apaga!teriaa como me ajudar com essa lógica??Obrigadoo desde jah!
Chavão
Junho 19th, 2010 at 8:07 pm
8Cara não pensei muito bem numa solução para o seu problema, mas o que me veio na mente aqui rapidamente foi o seguinte, você envia uma fila de bits para acender os leds, exemplo:
01010101
Vai acender intercalado, certo?
Digamos que no próximo horário você mande o contrário:
10101010
Isso vai fazer com que as que estavam acesas apaguem e acenda as outras.
Pelo que eu entendi que você quer fazer é que ao ser programado um horario o que estava aceso continuar e o que está programado ligue, mas eu também suponho que tenha um horário para desligamento. Então partindo desse principio sugiro que você monte uma fila de bits assim:
Com 1 onde quer ligar, com 0 onde quer apagar e com outro caracter, pode ser um X onde você quer manter como estava.
Digamos que atualmente os leds estão ligados assim:
00001111 (às 12h)
Às 12:02 você quer que acenda as outras 4 e apague a última que estava acesa, na fila de bits no agendamento do horário você pode colocar assim:
1111xxx0, e quando for enviar para a saída você pode verificar a fila anterior, trocando os Xs pelos que já estavam na fila e executa a forma que está, nesse caso ficaria: 11111110, então acenderia as outras e apagaria a última, assim como foi proposto no agendamento das 12:02.
Bom, se te ajudar comenta ae, se não ajudar muito, explica melhor o que quer fazer, talvez eu possa ajudar melhor. :D
Paulo Martins
Junho 25th, 2010 at 3:37 pm
9ae wlw meoo euu consegui fazee cm q eles ascendescem no mesmo horário mas foi de outro jeitoo!eu criei uma variável e dei nome aos leds!exemplo: INT numero,led1=0, led2=0, led3=0,…. ;
ae see o horario programado para que o led ascendesce chegasse, o led iria valer 1.valendoo 1 o led, a variável numero iria receber o valor decimal ekivalente ao binárioo para q ele ascendesse exemplo:
if(hora despertador1==hora atual)
{
led1=1;
numero=numero+128;
}
aee ao passo q os outros leds tmbm fikem igual a 1 a variavel numero vai somando os numeros ekivalentes a eles!ex:
…
led1=1;
numero=numero+128;
…
led2=1;
numero=numero+64;
e assim sucessivamente!!
aee no final da função eo mando escrevee na porta essa variável numero! WritePort(0×378,numero);
aee eles ligam todos de uma vez sohh!
ae pra apaga um soh led dos ascesos eh só faze a diminuição! numero=numero-64; mas nakele mesmo eskema!
eoo trabalho com o builder5 para programação naum sei qual tu trabalha mas parece ser bom tmbm! esse programa eu criei ele cm form do builder aee fiko mais legal ainda!
Mas velew mesmo meoo!quando precisa de alguma coisa tmbm soh pergunta !minha visita vai ser periodica akee em buscaa de novos desafios no ramo da lógica da programação! abraços!
Fábio
Novembro 18th, 2010 at 11:33 am
10Você pode queimar a placa mãe fazendo isso, pois ela fornece uma corrente muito baixa na porta paralela, e o led exige uma corrente maior. Com todos ligados então, a corrente vai ser maior ainda.
Sugir um buffer http://www.e-farnellnewark.com.br/ci74lsoctalbuffercontrollinha20p,product,1106084,1247.aspx
saulo
Janeiro 16th, 2011 at 1:06 pm
11nao consigo acessar a porta lpt1 usei um codigo pra windows vc nao teria um código pra dev c++ ou pra outro compilador que funcione realmente???
Renato
Maio 26th, 2011 at 6:58 pm
12Boa noite, amigo não consigo compilar esse código.
Chavão
Maio 26th, 2011 at 7:32 pm
13Qual erro deu durante a compilação?
Só se atente que o código eu fiz para ser compilado pelo GCC no Linux, talvez ele não compile no Windows (faz tanto tempo que eu nem lembro)
Renato
Maio 26th, 2011 at 7:40 pm
14vc pode entrar em contato comigo para tirar dúvidas? renatofelip@hotmail.com
Renato
Maio 26th, 2011 at 7:43 pm
15então blz vou tentar no gcc no linux.
Renato
Maio 26th, 2011 at 7:46 pm
16ok, então não precisa de mais nada? nenhuma configuração pra acesso a porta paralela? basta executar o código no GCC no linux e pronto?
Chavão
Maio 26th, 2011 at 8:32 pm
17Só precisa ser root e mais nada. E claro, como falei no texto, ter as portas paralelas habilitadas no setup do BIOS.
Igor Yung
Junho 17th, 2011 at 8:16 pm
18Tô jogando esse código no Microsoft Visual Studio e está dando erro.
ajuda?
Chavão
Junho 17th, 2011 at 8:22 pm
19Igor, posso até tentar ajudar. Qual é o erro que está dando ao compilar?
Werley Brito
Junho 24th, 2011 at 3:56 pm
20Chavão, olá!
Parabéns pelo artigo…bem eslarecedor. A minha dificuldade é por que estou usando um adaptador da comtac usb/paralelo, para usar no notebook e não funciona. Você sabe como fazê-lo funcionar com o adaptador?
Edy
Julho 26th, 2011 at 7:01 pm
21Eai Chavão experimenta led’s auto brilho e pode tirar todas resistencias !!! não queima são 3,3 Voltz abraço !!!
http://www.rogercom.com
RSS feed for comments on this post · TrackBack URI
Leave a reply
Buscar
Tags
Links
Categorias
Arquivos
Blogroll
Comentários
Agregadores