Vývojová deska Digispark

Úvod

Digispark je miniaturní vývojová deska kompatibilní s Arduino IDE. Pokud se nejedná o vůbec nejmenší "Arduino", patří určitě k těm nejmenším (o chlup menší je provedení s konektorem micro USB), z čehož plyne, že nedokáže dělat vše, co dokáže Arduino. Na druhou stranu ale zase dokáže věci, které standardní Arduino neumí (simulaci HID). Je to velmi ekonomická varianta Arduina, jeho cena u čínských soudruhů je často i pod 1.5$, což je mimo jiné téměř totožná cena, za jakou pořídíte holý čip ATtiny85.

 

Rozdíly oproti Arduinu

Nejen vzhledem k minimu vyvedených pinů je u této vývojové desky třeba více přemýšlet při návrhu jejich využití. Schéma zapojení vývojové desky nám při těchto úvahách v mnohém pomůže: 

Dále uvádím několik specifických vlastností, které také stojí za úvahu při návrhu:

  1. Srdcem Digisparku je MCU Atmel ATtiny85 - některé knihovny pro Arduino (ATmega328) na něm nemusí fungovat správně.
  2. Digispark má k uložení kódu pouze asi 6kB flash paměti (1.5kB z celkových 8kB ukousne bootloader).
  3. Pro integrovanou LED je využíván Pin PB1.
  4. Pin PB3 a Pin PB4 (P3 a P4) se používají pro komunikaci a programování pomocí USB. Sice je možné použít tyto piny v projektu i jinak (pokud USB nebude využíváno), bude ale třeba v návrhu nějak zohlednit připojené obvody (rezistory a transily).
  5. Programování Digisparku probíhá jinak než v případě Arduina:
    Překlad spustíme bez připojeného modulu, k USB jej připojíme až po výzvě IDE, které po provedení překladu vyčkává 60s na připojení modulu. Více k zavedení programu je uvedeno na IOTTA.CZ.
  6. Digispark nemá hardwarový sériový port ani hardwarový sériový převodník na USB. Jako příklad je sice poskytována knihovna DigiUSB i s nějakými vzorovými kódy, ale pro ni se mi nepodařilo najít funkční ovladač do Win10. Programy se "systémovou" komunikací (Serial) nebudou funkční.

Znovu se vrátím k problému zmíněnému v bodě 4. Budeme-li např. chtít měřit analogový signál a ten nějak zobrazit, narazíme na to, který pin pro měření využít. Jako AI lze využít piny PB2...5, pin PB5 je využit pro RESET, PB3 a 4 pro USB, takže zbývá PB2. Jenže jestli potřebujeme připojit displej přes I2C, tak tato sběrnice má na PB2 signál SCL.

Takže jsme zpět u využití pinů PB3 a PB4, které jsou přes odpory R1 a R2 připojeny k datovým vodičům USB. PB3 má navíc oproti PB4 připojený pull-up rezistor 1.5 kΩ (R3) k 5V, oba datové signály USB jsou také "uzeměny" přes transil. Návrh tedy bude muset vzít R3 v úvahu především při potřebě "stlačit" logickou úroveň do L. Ideálním řešením by bylo po naprogramování z desky odstranit R1 a R2, či do jejich obvodu nějak doplnit propojky (což ale půjde těžko s ohledem na jejich velikost). Pokud je jasné, že nás nedostatek dostupných pinů bude trápit, než zásahy do vývojové desky bude možná schůdnější si pořídit variantu desky s paticí DIL8 a po naprogramování použít vyjmutý ATtiny85. Využití PB3 a 4 v "neanologovém režimu" ale bude v jistých mezích možné i bez jakýchkoli úprav.

Další variantou, jak obejít nedostatek pinů je využití I2C pro připojení periferií, kdy pomocí dvou vodičů připojíme jak displej, tak modul pro analogové měření (např. výborný modul s čipem ADS1115) atp.

Zprovoznění COM na USB

Prozatím bez úspěchu ve Win10 i Androidu.

Simulace zařízení HID

Narozdíl od komunikace přes sériovou linku funguje simulace HID zařízení na výbornou. Je možné z vývojové desky vytvořit zařízení simulující klávesnici, myš či herní zařízení. Vyzkoušel jsem přiložené příklady pro všechna tři tato zařízení a ve Win10 byla všechna rozpoznána, ovladače nainstalovány a komunikace s PC se vesele "vrtěla".

Zde nemusíme zůstat pouze u simulace, ale tuto vynikající vlastnost lze po připojení patřičných periferií využít i k vytvoření např. vlastního herního ovladače.

Značení pinů v programu

Při psaní programu je třeba pamatovat na správné značení pinů, a to především pokud pin využíváme jako analogový vstup. Při použití jako digitální vstup/výstup číslování souhlasí (tj. PB0 nadefinujeme jako DO takto: digitalWrite(0, HIGH);). Stejně tomu bude i u ostatních pinů (PB1...5). Podobné to bude také v případě použití jako analogový výstup (PB0 definujeme: analogWrite(0, value);). Rozdíl je ale v případě definice analogového vstupu:

PB2(7) - ADC1 - analogRead(1);
PB4(3) - ADC2 - analogRead(2);
PB3(2) - ADC3 - analogRead(3);

Využití pinu PB5

Standardní využití PB5 je pro signál RESET, nějak ale lze jeho režim změnit, a pak by mělo být možné jej využívat např. i jako analogový vstup. Na různých místech jsem ale dohledal pouze informaci, že je to složité a v prostředí Arduino IDE snad i nemožné. Zkusím ale ještě zapátrat a popř. doplním, co jsem zjistil.

Programování pomocí AVR ISP, zavedení bootloaderu

Pokud je třeba co nejlépe využít prostor pro kód, mělo by být možné program do ATTINY85 zavést pomocí AVR ISP programátoru. K dispozici bychom pak měli o 1.5kB více flash paměti, kterou jinak zabírá bootloader. Tuto možnost, ani možnost obnovy bootloaderu v Digisparku jsem zatím nezkoušel, ale hodlám ještě zapátrat, a do tohoto místa pak doplnit nalezené informace (něco je tady a nebo taky na živě.cz).

Odkazy