terça-feira, setembro 04, 2012

ATtiny 45/85 Ligado à USB: Colocando para Funcionar o EasyLogger

Como mencionei no post anterior, o EasyLogger é um exemplo de uso do V-USB. Um ATtiny85 envia o valor lido pelo ADC para um PC, simulando um teclado USB.

No post anterior vimos o esquema do hardware, vamos ver agora a questão do software e alguns detalhes práticos.
Software

Embora o EasyLogger seja um dos projetos de referência do V-USB, ele não utiliza a última versão das rotinas de implementação da USB. Existem também alguns detalhes errados na documentação, como comentado nos forums do V-USB. Felizmente, existem alguns roteiros mais detalhados na internet, como aqui e aqui.

Eis o roteiro que eu segui:
  • Baixei o projeto do EasyLogger (link) datado de 28/2/2008
  • Baixei a versão atual do V-USB (link) datado de 9/1/2012
  • Substituí a pasta usbdrv do EasyLoagger pela do V-USB.
  • Substituí o arquivo usbconfig.h do EasyLogger pelo usbconfig-prototype.h do V-USB e editei para corresponder ao meu hardware, usar a calibração do clock e definir um dispositivo do tipo teclado.
  • Editei o main.c do EasyLogger para incluir a rotina de calibração do clock
  • Editei o makefile para usar o ATtiny85 e o gravador usbtiny
A calibração do clock é um ponto crítico: sem ela não é possível estabelecer a comunicação USB.

Para gerar o hex (tendo o AVR GCC toolchain instalado), basta executar o makefile sem parâmetros.

O meu código está nos arquivos do blog (lá no alto à direita), no arquivo EasyLoggerDQ.zip.

Gravação do Software

Neste caso é necessário retirar o ATtiny do circuito para fazer a gravação. O processo de gravação é semelhante ao que vimos anteriormente. Basta conectar o gravador aos pinos correspondentes do ATtiny:
  • MISO: pino 1 do gravador, 6 do ATtiny85
  • Vcc: pino 2 do gravador, 8 do ATtiny85
  • SCK: pino 3 do gravador, 7 do ATtiny85
  • MOSI: pino 4 do gravador, 5 do ATtiny85
  • Reset: pino 5 do gravador, 1 do ATtiny85
  • GND: pino 6 do gravador, 4 do ATtiny85

O makefile já tem o comando para gravar a flash (make flash)  e configurar os fuses (make fuse).

Montagem

Fiz a minha montagem na protoboard. Para ligar à USB usei um cabo extraído de um mouse pifado; as cores dos fios seguiam o padrão:
  • Pino 1 (VBus, 5V): vermelho
  • Pino 2 (D-): branco
  • Pino 3 (D+): verde
  • Pino 4 (Gnd): preto
Testes e Observações

Conectando o circuito ao PC, o Device Manager vai indicar um "USB Human Interface Device" e um teclado:








Abra um notepad, verifique que ele está com o foco e aperte o botão no circuito. O LED irá acender e a cada segundo será "digitada" a leitura do ADC. Alterando a quantidade de luz que chega ao LDR o valor "digitado" será alterado. Aperte o botão novamente para parar a digitação.

A passagem de dados por simulação de teclado é bastante limitada. Você perceberá isto quando acidentalmente passar o foco para outra janela. É preferível usar outros tipos de interface, como serial ou custom. Estas opções exigem drivers específicos mas são mais versáteis.

Não é muito difícil adaptar o software para fazer um dispositivo como este aqui.

2 comentários:

DanFayal disse...

Olá, professor e xará !(sou Daniel também)

Professor, tenho uma dúvida e há uma boa possibilidade desta não poder ser resolvida. Nestes últimos anos, tenho tentado me especializar em V-USB para microcontroladores Atmega328. Já consegui inúmeros experimentos, incluindo experimentos de comunicação sem fio. E eu uso a interface IDE maravilhosa do Arduino para programar e esta é minha limitação, eu acho.

Me interessei pelo microcontrolador Attiny. Estou com vontade de aplicar os conhecimentos V-USB neste microcontrolador. Acontece, que todo o experimento que encontro, já vem com todo o firmware programado. Eu até entendo um tiquinho de bibliotecas em C, sei alterar parâmetros, mas, não consigo compreender direito como se programa um microcontrolador em C, fora da IDE do Arduino. Esse seu exemplo, por exemplo (redundância, desculpe). Eu não entendo como funciona o código escrito em C ali. Não saberia transpô-lo para a IDE do Arduino. E tem mais, acredito que a IDE do Arduino não permite compatibilidade do V-USB Arduino 328p pra Attiny. É um monte de parâmetros a serem mudados. Caos total pra mim, inexperiente.

Você poderia me dar umas dicas sobre isso ?

Gostaria de compor aplicações para o Attiny do tipo Virtual USB, mas, não acho tutoriais tangíveis ao meu conhecimento.

No mais, é isso.

Mais um seguindo seu blog.

Sucessos !

Daniel Quadros disse...

DanFayal, uma sugestão para aprender a programar os microcontroladores AVR diretamente em C, sem usar as bibliotecas do Arduino, é o livro AVR Programming, que eu resenhei aqui: http://dqsoft.blogspot.com.br/2014/08/critica-avr-programming.html

Para entender o código específico do V-USB é preciso entender também o protocolo da USB, algo que ainda estou aprendendo.