Encerrado - Elaboração de plataforma para projeto de programação
Estudos USB |
---|
Quarta-feira - 17/04/2013 -Tentativas de enviar sinal pra a porta através do código C da biblioteca "hidapi.h" -Git - http://fabio-fernandes.com/blog/instalando-e-usando-o-git-no-ubuntu/ -Instalei o programa VB (cedido pela Cerne) no linux(Ubuntu 12.04), através do Wine, porém ele nao funcionou como ja tinha funcionado no Windows. (Estive pensando se o problema seria no linux ou no Wine, pois talvez o wine nao ofereça a comunicaçao necessária ao programa, ou até nao sei se a instalaçao no Wine é 100% equivalente a instalaçao diretamente no Windows) -Leitura de documentos sobre o Pic 18F2550 (18f2550.h) OBS: Fiquei com dúvida se isso pode servir nesse projeto, pois muitos falam em gravação do microcontrolador. E nao sei se a gravaçao nos interessa. "Para que os programas em C possam ser gravados no microcontrolador via USB, é necessário compilá-los, ou seja, transformá-los em linguagem de máquina hexadecimal. Existem diversos compiladores que podem ser utilizados por esta ferramenta, entre eles o SDCC, o C18, o Hi-Tech e o CCS" http://www.cerne-tec.com.br/artigousbparte2.pdf http://burningsmell.org/pic18f2550/ http://www.eletrica.ufpr.br/ufpr2/tccs/150.pdf Sexta-feira 19/04/2013 Leituras sobre USB Links interessantes: http://www.infowester.com/usb.php http://www.infowester.com/usb30.php http://computer.howstuffworks.com/usb1.htm
Segunda-feira 22/04/2013 e terça-feira Leituras USB: Capitulo 13 do livro "linux device drivers" http://bbs.dianyuan.com/bbs/u/34/1129334558.pdf http://www.beyondlogic.org/usbnutshell/usb1.shtml http://www.freebsd.org/doc/en/books/arch-handbook/usb-dev.html citações interessantes: "Endpoints are the unidirectional access points for communicating with a device. They provide buffers to temporarily store incoming or outgoing data from the device." Endpoint do tipo interrupt :"Interrupt endpoints transfer small amounts of data at a fixed rate every time the USB host asks the device for data. These endpoints are the primary transport method for USB keyboards and mice. They are also commonly used to send data to USB devices to control the device, but are not generally used to transfer large amounts of data. These transfers are guaranteed by the USB protocol to always have enough reserved bandwidth to make it through." http://www.beyondlogic.org/usbnutshell/usb4.shtml#Interrupt "A device interface is a collection of endpoints. For example USB speakers can have an interface for the audio data (Audio Class) and an interface for the knobs, dials and buttons (HID Class). All interfaces in a configuration are active at the same time and can be attached to by different drivers." "USB interfaces are themselves bundled up into configurations [...]So to summarize, USB devices are quite complex and are made up of lots of different logical units. The relationships among these units can be simply described as follows: • Devices usually have one or more configurations. • Configurations often have one or more interfaces. • Interfaces usually have one or more settings. • Interfaces have zero or more endpoints." prints do software, para windows, que analiza a comunicaçao USB documentos com algumas informaçoes que estão auxiliando no estudo da comunicaçao entre host e o device USB:
https://docs.google.com/document/d/1-y3Ze_V60gTRnhb7FxVc1gmjkX2RaLGmtfopfyV2-d0/edit (ultima atualizaçao no dia 05/05/2013) leitura complementar sobre URBs http://www.makelinux.net/ldd3/chp-13-sect-3 Domingo 5/5/2013 instalaçõ do GCC no windows http://www.franciscosouza.com.br/2009/04/07/instalando-um-compilador-cc-no-windows/ |
Comunicão em C com a placa de aquisição de dados |
---|
Primeira comunicação feita com sucesso utilizando a linguagem C Para rodar o programa leia otutorial Tutorial de conexão e comunicação com a placa de aquisição de dados O primeiro passo para conseguir se conectar à placa de aquisição de dados, utilizando a liguagem C é fazer todas a configurações necessárias para conseguir compilar o programa utilizando a biblioteca HID. Links úteis: Link principal para a biblioteca: http://www.signal11.us/oss/hidapi/ Read-me com explicações mais detalhadas sobre as configurações abaixo: https://docs.google.com/document/d/1LsqJdvBf6gg5KQLJULJwQus9NVtZsaCNOQudspGmFLs/edit Página de downloads: https://github.com/signal11/hidapi/downloads 1 - Baixe o pacote com os arquivos necessários: https://github.com/downloads/signal11/hidapi/hidapi-0.7.0.zip 2 - Instale o pacote Libusb 1.0
3 - Instale o pacote Libudev (cabeçalho e biblioteca)
4 - Descompacte o arquivo .zip hidapi-0.7.0.zip baixado no passo 1. Você pode fazer isso manualmente, ou no terminal: No meu caso o arquivo está na pasta Downloads:
E então:
5 - entre em hidapi-0.7.0 hidapi-0.7.0/hidapi/ e copie ou mova o arquivo hidapi.h para a pasta linux: (manualmente, ou pelo terminal) #cd hidapi-0.7.0/hidapi/ E então
~/Downloads/hidapi-0.7.0/linux): 8 - Compile o programa: (certifique-se que você esta dentro do diretório “linux” (~/Downloads/hidapi-0.7.0/linux)) gcc prog.c hid-libusb.o `pkg-config libusb-1.0 libudev --libs` -o prog 9 - Rode o programa: sudo ./prog
|
Configuração em versões anteriores a 12.04 |
---|
- Ao entrar no diretório drivers (/sys/bus/usb/drivers) é possível ver todos os driver que estão sendo utilizados no momento no PC; - para a plaquinha, o objetivo é usar o driver usbtouchscreen. Para ver se este driver existe na versão do ubuntu sendo utilizada: modinfo usbtouchscreen - Para ver todos os driver instalados no PC basta acessar /lib/modules/3.0.0-12-generic/kernel/drivers/ (OBS: pode ser que tenha que mudar a versão ali onde no meu ubuntu (11.10) mostra 3.0.0-12-generic, mas como só existe um diretório dentro do modules, fica fácil) - Quando conectado, automaticamente o PC bota o driver USBHID, temos que tirar ele, com o unbind: echo -n "1-4.4:1.0" > /sys/bus/usb/drivers/usbhid/unbind OBS: achei o endereço "1-4.4:1.0" dentro do diretório usbhid com o comando ls (esse endereço talvez varie de PC para PC) e para botar a plaquinha no usbtouchscreen temos que levantar o driver usbtouchscreen: modprobe usbtouchscreen e entao: echo -n "1-4.4:1.0" > /sys/bus/usb/drivers/usbtouchscreen/bind - Após fazer isso, verifique se funcionou, desconectando e conectando a plaquinha do PC e utilizando o comando dmesg; pode ser que não funcione de primeira, acredito que os drivers fiquem ``brigando``, então eu fiz a seguinte ordem de comandos: rmmod usbhid modprobe usbtouchscreen echo -n "1-4.4:1.0" > /sys/bus/usb/drivers/usbhid/unbind modprobe usbhid echo -n "1-4.4:1.0" > /sys/bus/usb/drivers/usbtouchscreen/bind modprobe usbhid ATENÇÃO: tive que fazer o comando rmmod USBHID para que a plaquinha nao tivesse nenhuma chance de conectar nesse driver, porem isso fez com que meu mouse USB parasse de funcionar, para ele voltar a funcionar tive que fazer modprobe USBHID no final, resolvendo meu problema. Mas isso é um problema nos computadores que usam mouse e teclado usb, pois quando o comando rmmode for dado, eles serão desconectados, a soluçao é escrever esses comandos, em lista, como fiz acima, e colá-los todos juntos no terminal, fazendo com que o terminal execute todos de uma vez, ou criar um arquivo .sh Após essas configurações,desconectando e conectando a plaquinha e utilizando o comando dmesg,ja deve ser possível ver que ela esta utilizando "input..." e nao mais "generic-usb..."
|
Pontos a serem verificados
- Versão e drivers do linux que estão sendo usados;
modinfo usbtouchscreen > usbtouchscreen
modinfo input >
- Fazer um teste no Redes II e Inf para verificar se placa funciona (falar com Ricardo - ricardo.ifsc@gmail.com );
- Documentar o driver da usb que está sendo usado (input) e verificar como trocar o driver dinamicamente para testar em outros PC;
- Testar as entradas e saídas analógicas;
Saída: modificar a função enviar():
buf[0] = 'D';
buf[1] = '1';
buf[2] = '2';
buf[3] = '5';
buf[4] = '5';
res = hid_write(handle, &buf[0], 5);
Onde 1 é o numero da saída e 255 representa 5V
127 = 2,5V
0 = 0V e assim por diante.
- Especificar a "biblioteca" a ser disponibilizada para os alunos;
- estudar como construir uma biblioteca no Linux (lib ver [1]);
- testes de desempenho