Dia desses comprei três Trinkets, mas no fim só chegaram dois, :(. Dei um pro Euclas e fui brincar com o meu. Eis aí as primeiras impressões.

O hardware

Essencialmente o Trinket é uma plaquinha baseada no ATTiny85, processador de 8Kb de memória flash (para programas), 512 bytes EEPROM e 512 bytes SRAM. Com o bootloader (programa que recebe os programas que mandamos pela serial os "roda" no processador) sobra-nos pouco mais de 5k para trabalhar. Não dá para desenvolver nenhum Excel, mas dá para fazer aplicativos simples de automação residencial ou mesmo pequenos robôs. Vou fazer alguns para postar por aqui.

Aqui, a plaquinha mais de perto:

Dá prá ver aqui as características da bichinha. Existem dois modelos: 5V e 3V3, me arrependi de não tem comprada nenhuma de 3V3 para conectar direto do Raspberry.

- Conector mini-USB para conexão ao PC e também para alimentação. Isso é muito legal, porque dá prá programar diretamente no PC e enviar o programa sem ter que usar nenhum outro hardware para isso.

- GPIO (pinos de entrada/saída de dados), numerados de #1 a #4.

- Conexão de bateria externa. Pode-se ligar até 16V na bichinha.

- Botão reset.

- Conexão para botão reset externo.

- Furos para fixação

"Tudo isso" faz dessa plaquinha uma bela alternativa para projetos onde a minitaturização é essencial. Também o consumo de energia é menor, o que favorece o uso de baterias menores e/ou a durabilidade delas.

Coonfigurando e programando

Segui os procedimentos indicados aqui para colocar ele prá funcionar através da IDE do Arduino. Segui o roteiro chamado no texto de The Slow Way, que visa reconfigurar a IDE do Arduino para trabalhar também com o Trinket. Após as alterações (bem fáceis), fui testar e... nada.

Primeiro a IDE não reconheceu o dispositivo. Pesquisando, vi que ela não trabalha com USB 3.0, só com USB 2 ou 1. Como transformar a USB do micro em uma versão anterior? O jeito que dei foi arrumar um desses multiplicadores de portas USB mais velhinho e usá-lo. Ele fez a conversão, e o Trinket apareceu na lista de dispositivos conectados.

Depois não apareceu a porta serial para que eu a selecionasse. Pesquisa dali e daqui, descobri que a porta não aparece mesmo na lista, mas é só selecionar a plaquinha correta na lista (menu Tools\Board, placa Trinket 8 MHz) e o bichinho funciona que é uma beleza.

Para testar, podemos rodar o velho blink. A única alteração é que a porta conectada ao LED é a porta 1, então temos que alterar a variável led do programa para 1.

Na hora de fazer o upload é um pouquinho diferente:

- Quando vc liga a plaquinha no Arduino ela inicialmente fica piscando por uns 10s. Nesse modo ela está pronta para receber o programa via USB. Após esse período ela começa a rodar o programa que está nela, e não é possível fazer o upload de uma nova versão. Para habilitar de novo o envio, deve-se apertar o reset de novo para um novo ciclo de upload.

Para testar a nossa plaquinha (depois de rodar o Blink, claro), resolvi acionar um servo.

A lib de servo que vem com o Arduino não rola, porque o ATtiny não tem timer de 16 bits. Para "tocar" um servo precisamos então de uma outra lib, compatível. O povo da Adafruit fez uma, que vc pode baixar daqui. Essa lib tem um pequeno inconveniente: vc tem que chamar a rotina de refresh dela a intervalos de no máximo 20 milissegundos. Vamos analisar cá um exemplo. É o que vem com a lib, simplificado:

#include <Adafruit_SoftServo.h> // SoftwareServo (works on non PWM pins)

// We demonstrate two servos!
#define SERVO1PIN 0 // Servo control line (orange) on Trinket Pin #0

Adafruit_SoftServo myServo1;

void setup() {
  OCR0A = 0xAF; // any number is OK
  TIMSK |= _BV(OCIE0A); // Turn on the compare interrupt (below!)

  myServo1.attach(SERVO1PIN); // Attach the servo to pin 0 on Trinket
  myServo1.write(90); // Tell servo to go to position per quirk
  delay(15); // Wait 15ms for the servo to reach the position
}

void loop() {
  myServo1.write(0);
  delay(2000);
  myServo1.write(90);
  delay(2000);
  myServo1.write(180);
  delay(2000);
}

// We'll take advantage of the built in millis() timer that goes off
// to keep track of time, and refresh the servo every 20 milliseconds
volatile uint8_t counter = 0;
SIGNAL(TIMER0_COMPA_vect) {
// this gets called every 2 milliseconds
  counter += 2;
// every 20 milliseconds, refresh the servos!
  if (counter >= 20) {
   counter = 0;
   myServo1.refresh();
 }
}

Ao rodar o programa, o servo alterna entre as três posições: 0, 90 e 180 graus.
Mole,. não? Nem vou fazer filminho... :)

A ideia foi mostrar que a plaquinha não faz feio mesmo em tarefas de automação. Dá prá controlar pelo menos mais um servo, simultãneamente.

Referências:

https://learn.adafruit.com/introducing-trinket/guided-tour

Exibições: 1237

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Mauro Assis em 16 setembro 2014 às 20:43

Um... boa pergunta.  Em princípio, sim. O Anchises, lá do Garoa, é fera nesses processadores pequenos. Procure alguma referência na wiki deles, eu já assisti uma palestra deles sobre isso.

Uma vantagem de fazer como vc está sugerindo é que não vai ter o bootloader, ou seja, vc ganha uns 3k de espaço. Para quem tem 8 no total... :)

Comentário de Isaac Thiago Oliveira Cavalcante em 16 setembro 2014 às 20:31

Muito legal Mauro.

Eu estou pensando em comprar o Trinket e uns ATtiny85 para montar o circuito. Você sabe se para criar uma placa somente para a execução de um código previamente gravado e sem oscilador externo é necessários os mesmos componentes para criar a placa do ATMEGA328

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço