Digispark - emularea com-portului, studiem lupta cu arduino

Foarte des, atunci când se dezvoltă un "dispozitiv de microcontroler", devine necesar să se conecteze la un calculator. Acest lucru nu necesită nici o "super-sarcini", doar ceva ce trebuie să transferați de la computer la dispozitiv, o comandă sau o gamă mică de date; și / sau invers - de la dispozitiv pentru a încărca date pe computer. De obicei, pentru astfel de scopuri utilizați vechi, verificat RS232. Cu toate acestea, acum găsirea unui computer cu o interfață similară nu este o sarcină ușoară ...

Privind la spatele calculatorului, este puțin probabil să vedeți ceva potrivit pentru sarcină - cu excepția mai multor porturi USB.

Digispark - emularea com-portului, studiem lupta cu arduino

USB este o soluție foarte bună în evoluția tehnologiei informatice: există o conexiune "fierbinte" și există alimente și multe alte lucruri bune ... Un lucru rău este că interfața foarte sofisticată s-a dovedit. Dacă vă săturați Internetul în această direcție - imediat ... mâinile se dau jos.

Există o modalitate excelentă de a ieși din situație - utilizarea emulației portului COM. Pentru aceasta există o mulțime de jetoane "ieftine": CP2102, PL2303, CH340 etc.

Digispark - emularea com-portului, studiem lupta cu arduino
În ceea ce privește USB-ul, ei preiau și ne este dat un UART bine-cunoscut. Prin acest principiu, o mulțime de produse sunt aranjate, de exemplu, interacțiunea dintre Arduino și un calculator este construit ...

Este interesant să faci fără aceste "cârje" - bine - chiar și resursele lui ATtiny pentru acest lucru sunt destul de abundente ... Să vedem cum este implementată emulația portului COM în proiectul Digispark pe scară largă. Anterior, opțiunea de conectare a plăcii la un computer și IDE Arduino

Digispark - emularea com-portului, studiem lupta cu arduino
Toate nuanțele de emulare sunt descrise în sursa de pe Digistump. Acum, ia în considerare utilizarea plăcii pentru interacțiunea cu computerul prin USB - DigiCDC. Pentru aceasta, este convenabil să utilizați exemplul DigiCDC modificat ușor Echo din secțiunea Exemple -> DigisparkUSB -> Echo

Punctul cheie al programului este linia

După executarea acestuia, Digispark se transformă în Digispark Virtual Com Port și computerul îl detectează (DigisparkBootloader dispare de la dispozitivele din manager). Pentru ca computerul să determine noul dispozitiv așa cum ar trebui, calculatorul trebuie să alunece driverul necesar (indicați fișierul DigiSerial.inf)

Digispark - emularea com-portului, studiem lupta cu arduino

Dacă computerul nu găsește driverul de care aveți nevoie, spuneți-i ce aveți nevoie și obțineți dispozitivul dorit în Manager dispozitive:
Digispark - emularea com-portului, studiem lupta cu arduino

Cu portul COM rezultat, puteți face orice. Cel mai simplu lucru este să "setați" monitorul IDE Arduino pe el. Doar în setările mediului am ales noul nostru port COM și lucrăm cu el ...
Digispark - emularea com-portului, studiem lupta cu arduino

În utilizarea unui astfel de "port" există nuanțe:

  • Biblioteca DigiCDC utilizează o mulțime de memorie RAM. Se recomandă utilizarea funcției F () atunci când se emite text în port, de exemplu: SerialUSB.print (F ("test")).
  • Portul poate fi folosit pentru mesagerie, așa cum se face de obicei (linia tipică Serial.print () este utilizată în aproape toate creațiile). Dar, acum trebuie să utilizați, de exemplu, SerialUSB.read () în loc de Serial.read (), etc.
  • Nu este indicată nici o indicație a vitezei de schimb în timpul inițializării, scrieți doar: SerialUSB.begin ().
  • Schimbați prin portul emulat este aproximativ - foarte lent. Transferul simbolului durează 5 ms. Acest lucru trebuie luat în considerare atunci când se dezvoltă soluții.
  • Dacă în proiect este necesar să se folosească întârzierea funcției delay (). atunci ar trebui înlocuit cu SerialUSB.delay ().
  • În proiectele cu DigiCDC, funcțiile SerialUSB.delay () sau SerialUSB.refresh () ar trebui să fie apelate cel puțin la fiecare 10 ms, dacă nu există apeluri către alte funcții ale SerialUSB.

Exemplu de schiță:

Se așteaptă intrarea ...
Apăsați pe 0 la LED-ul dezactivat sau pe 1 la LED-ul Pornit ...
0 LED Off ...
Se așteaptă intrarea ...
Apăsați pe 0 la LED-ul dezactivat sau pe 1 la LED-ul Pornit ...
1 led activat ...
Se așteaptă intrarea ...
Apăsați pe 0 la LED-ul dezactivat sau pe 1 la LED-ul Pornit ...

Schița de mai sus reacționează la tasta "1" - prin activarea LED-ului de pe cardul Digispark și, apăsând tasta "0", o oprește.