Klon Digispark (AtTiny85 na USB/Linux)

IMG_1023Prezentowany układ zbudowano na wzór Digispark firmy Digistump. Pomysł polega na umieszczeniu kontrolera Atmel AtTiny85 na płytce, wyprowadzeniu jego pinów,  dodaniu stabilizatora 7805 oraz portu USB. Wystarczyło teraz wyposażyć AtTiny w bootloader micronucleus, aby można było go wygodnie programować przez USB za pomocą środowiska Arduino IDE. Programator SPI niepotrzebny.

Płytka…

Płytka zawiera kontroler Atmel AtTiny85 w wersji SMD. Wszystkie jego porty wyprowadzono na krawędź płytki jako P0-P5. Niektóre z pinów mają podwójne funkcje:

  • PWM: P0, P1 i P4
  • ADC: P0 (AREF) P2, P3, P4, P5
  • I2C: P0: SDA, P2: SCK

IMG_1026Na krawędzi znalazły się 3 dodatkowe wyprowadzenia: 5V, GND i VIN:

  • GND: masa,
  • VIN: wejście do stabilizatora 78L05, teoretycznie 7-35V – chociaż ze względu na emitowane ciepło – nie przekraczałbym 12V,
  • 5V: wyjście ze stabilizatora.

Układ może być też oczywiście zasilany oprzez microUSB (np. podczas programowania).

Podłączenie

Do programowania tego maleństwa wystarczy Arduino IDE. Pobierzcie go ze strony arduino.cc – ja używam wersji 1.6.6. Należy teraz dodać obsługę platformy Digispark do środowiska. Postępujcie zgodnie z instrukcjami podanymi na wiki digistump.

Po zainstalowaniu wybierzcie płytę jako: Digispark (Default – 16.5 mhz) oraz programator jako USBtinyISP. Pod Linuxem, musicie jeszcze uzupełnić reguły udev. Do katalogu /etc/udev/rules.d skopiujcie plik: 49-micronucleus.rules (konieczne prawa root’a). Plik ten możecie pobrać z githuba micronucleus (lub z githuba digistump). Jego zawartość sprowadza się do 2 linijek:

Sprawią one, że bootloader Digispark (VID:PID 16d0:0753) będzie widoczny dla systemu udev.

Po dodaniu tych reguł zrestartujcie udev:

$ udevadm control --reload-rules && udevadm trigger

Nie podłączajcie jeszcze płytki. Wpiszcie nowy program w IDE i załadujcie go na czipa:

Sketch uses 302 bytes (5%) of program storage space. Maximum is 6,012 bytes.
Global variables use 9 bytes of dynamic memory.
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)

Teraz podłączcie płytkę do USB (macie na to około 5s):

Device is found!
connecting: 16% complete
connecting: 22% complete
connecting: 28% complete
connecting: 33% complete
> Device has firmware version 1.11
> Available space for user applications: 6330 bytes
> Suggested sleep time between sending pages: 8ms
> Whole page count: 99 page size: 64
> Erase function sleep duration: 792ms
parsing: 50% complete
> Erasing the memory ...
erasing: 55% complete
erasing: 60% complete
erasing: 65% complete
> Starting to upload ...
writing: 70% complete
writing: 75% complete
writing: 80% complete
> Starting the user app ...
running: 100% complete
>> Micronucleus done. Thank you!

Za każdym razem, kiedy chcę wgrać kolejny kod na chipa – muszę go odłączyć od USB i włączyć z powrotem.

Sukces!

Programowanie

Szkielet programu wygląda jak dla każdego Arduino:

void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}

W swoich programach możecie używać:

  • pinMode: ustaw pin na wejściowy (INPUT) lub wyjściowy (OUPTUT); P0 (0) do P5,
  • digitalWrite: zapis do pinu stanu niskiego (LOW) lub wysokiego (HIGH); P1: dioda LED,
  • delay: opóźnienie (w milisekundach),
  • analogRead: odczytanie z pinu analogowego,
  • analogWrite (PWM), 255: wypełnienie 100%,
  • niektóre biblioteki

Mimo że programujemy w Arduino IDE – wiele z bibliotek na Arduino może nie działać. Po prostu: to nie jest AtMega328P napędzający UNO – inny czip, inne zachowanie.

Inne wyczytane ograniczenia:

  • 8kB flash na programy (-2 kB na bootloader micronucleus),
  • 512 B RAM,
  • 512 B EEPROM
  • P3 i P4 używane są do komunikacji po USB – można ich używać dopiero, gdy odłączycie urządzonko od komputera,

Układ ten wydaje się ciekawą alternatywą dla pełnowymiarowych arduino – na pewno do niego jeszcze wrócę!

Źródła

2 myśli w temacie “Klon Digispark (AtTiny85 na USB/Linux)”

    1. Witaj,
      niestety Digisparki są kapryśne… czasami trzeba je kilka razy włozyć i usunąć z portu, żeby zadziałały.
      Sprawdzałeś lsusb? Wywołaj po włożeniu do portu i kilkanaście sekund później jeszcze raz. To Ci powie, czy system widzi go w ogóle…
      Pozdrawiam,
      A

Dodaj komentarz