====== Adafruit Trinket ATTiny85 y el IDE de Arduino ====== ==== Cómo manejar este bicho desde Linux ==== Referencias: [[https://learn.adafruit.com/introducing-trinket/introduction| Introducción al Trinket de Adafruit]] **//Ojo: el trinket sólo funciona en puertos USB 2.0. No lo podemos manejar con USB 3.0!//** Para poder programar este dispositivo, empleando el IDE de Arduino (versión 1.6 o superior), es necesario hacer unas cuantas cosas antes. ==== Registrar el dispositivo en el IDE de Arduino ==== Para eso seguir las instrucciones que se recomiendan en el sitio web de Adafruit y podemos resumir como sigue: 1) Primero debemos conseguir el firmware de Adafruit para que el IDE de Arduino sea capaz de manejarlo. Para eso ir a [[https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls|Unofficial-list-of-3rd-party-boards-support-urls]] y allí buscar el link que corresponde a Adafruit: [[https://adafruit.github.io/arduino-board-index/package_adafruit_index.json]] Copiar ese link en las preferencias del IDE de Arduino: Ir a Archivo --> Preferencias y en esa ventana, copiar el link donde dice ''Additional Boards Manager URLs'' 2) Instalar los ''board managers'' en el IDE de Arduino: para eso vamos a Herramientas --> Placa: --> Board Managers eso abre la ventana de ''Boards Manager'' y allí seleccionamos ''Type --> Contributed'' y del listado que aparezca en la ventana, seleccionar e instalar el marcado como ''Adafruits AVR Boards'' De esa manera, de ahora en adelante aparecerán en las placas disponibles, las que correspondan a Adafruits, entre ellas seleccionar la ''Adafruit Trinket 8MHz'' cuando queramos programar el **trinket** 3) Como programador hay que usar el ''USBtinyISP'' ==== Habilitar la lectura/escritura al dispositivo en Linux ==== Bajo Linux es muy probable que no podamos escribir (programar) el **trinket** a menos que lo hagamos como root. El problema es el siguiente: si luego de conectar el **trinket** ejecutamos el comando ''dmesg'' en alguna consola, veremos algo por el estilo: [10862.096128] usb 3-5: USB disconnect, device number 13 [10862.750972] usb 3-5: new low-speed USB device number 14 using xhci_hcd [10862.777018] usb 3-5: New USB device found, idVendor=1781, idProduct=0c9f [10862.777027] usb 3-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [10862.777032] usb 3-5: Product: Trinket [10862.777036] usb 3-5: Manufacturer: Adafruit Vemos que lo reconoce con IDs de Adafruit: **idVendor=1781**, **idProduct=0c9f** Si ejecutamos el comando ''lsusb'' obtendremos una listado de dispositivos USB, entre los cuales encontramos el **trinket** como USBtiny Bus 003 Device 014: ID 1781:0c9f Multiple Vendors USBtiny En este caso el dispositivo quedó en el Bus 3, identificado como dispositivo 14 (vemos que coindice con los datos que declara ''dmesg''. Así que si miramos los permisos que tiene el dispositivo: ls -la /dev/bus/usb/003/014 puede que veamos algo similar a lo siguiente: crw-rw-r-- 1 root root 189, 269 sep 14 23:41 /dev/bus/usb/003/014 Eso quiere decir que sólo root tiene permiso de escritura. Los demás usuarios del sistema sólo pueden leer del dispositivo. Para poder cambiar esta situación, tenemos que crear una regla de ''udev'' nueva. ''udevd'' es el demonio que atiende los eventos del kernel asociados a dispositivos. En particular cuando conectás o desconectás un dispositivo, de alguna manera el sistema tiene que enterarse y hacer algo al respecto. Entonces el ''udevd'' es el demonio que se encarga de hacer lo que las reglas para ese dispositivo dicen que haya que hacer cuando ese dispositivo se conecta al sistema. Como por defecto Linux no sabe qué hacer con un dispositivo como el **trinket**, hay que generar una regla particular para ese dispositivo. La regla que hay que incluir es muy sencilla: cuando veas el dispositivo con el ''idProduct'' e ''idVendor'' de Adafruit, asociá ese dispositivo a un grupo de usuarios particular del sistema. Como root, podemos crear un archivo nuevo en ''/etc/udev/rules.d'', llamémosle ''99-USB-Adafruit-Trinket.rules'' y pongamos en su interior el siguiente texto: # Set Group for Adafruit Trinket SUBSYSTEM=="usb", ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", GROUP="plugdev" En este caso vemos que estamos identificando el dispositivo a partir de sus ''idVendor'' e ''idProduct'', y la regla lo que hace es asociar el dispositivo al grupo ''plugdev''. Al salvar el archivo, gracias a ''inotify'' el subsistema de ''udev'' detecta que apareció un archivo de reglas nuevo y las tendrá en cuenta a partir de ese momento en adelante. Si ahora reiniciamos el **trinket** (con el botoncito que tiene en la punta) o lo desconectamos y volemos a reconectar al USB, al detectarlo el ''udev'' le va a aplicar la nueva regla. Supongamos que luego de reiniciar el **trinket**, el sistema lo asocia al bus USB 003 y lo etiqueta como dispositivo 015, al listarlo en consola comprobamos que los permisos cambiaron: crw-rw-r-- 1 root plugdev 189, 269 sep 14 23:41 /dev/bus/usb/003/015 Ahora alcanza con asignar al o los usuarios de linux que queramos que tengan permisos de escritura, al grupo ''plugdev'' (puede ser cualquier grupo que ya exista en ''/etc/group'' o podemos crear un grupo nuevo, a gusto de consumidor). Por ejemplo en mi caso el archivo ''/etc/group'' quedó con la siguiente línea modificada: plugdev:x:46:ken De esa manera me aseguro de tener los permisos adecuados para escribir (programar) el **trinket**.