Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • OS
  • Controlul dispozitivelor prin intermediul portului som al computerului. Hardware și software pentru PC

Controlul dispozitivelor prin intermediul portului som al computerului. Hardware și software pentru PC

La Habré despre controlul unei lămpi prin Internet, a venit ideea de a controla iluminarea acasă de la un computer și, din moment ce am deja un control de calculator configurat de pe un telefon mobil, asta înseamnă că lumina poate fi controlată și de la acelasi telefon. După ce i-a arătat articolul unuia dintre colegii mei de muncă, a spus că are nevoie doar de el. Din moment ce adesea adoarme în spatele filmelor pe care le vizionează pe computer. La ceva timp după terminarea filmului, computerul adoarme și el și stinge monitorul, dar lumina din cameră rămâne aprinsă. Acestea. s-a hotărât că chestia a fost utilă și am început să adun informații și detalii pentru acest miracol.
Restul informatiilor sunt sub habracut (atentie la multe poze - trafic).

Diagrama dispozitivului

Pentru schema originală, a fost luată una dintre schemele găsite pe Internet și arăta astfel:

Dar numai cu o ușoară modificare: a fost adăugat un rezistor de 390 Ohm între primul pin al optocuplerului 4N25 și al doilea pin al LPT și a fost adăugat și un LED pentru a indica pornirea. Circuitul a fost asamblat în modul de testare, adică doar cablat după cum este necesar și testat. În această versiune, pur și simplu a pornit și oprit vechea lanternă sovietică.
S-a decis că, dacă controlul a fost deja făcut, atunci nu pentru un dispozitiv, ci pentru cel puțin 4 dispozitive (pe baza: o lampă pe masă, un candelabru pentru două întrerupătoare, o priză de rezervă). În această etapă, a devenit necesară construirea unui circuit complet al dispozitivului și a început să selecteze diverse programe.
Au fost instalate:

  1. KiCAD
  2. Vultur
După ce le-am uitat pe toate, m-am așezat pe Vultur, deoarece în biblioteca sa erau părți „asemănătoare”. Iată ce s-a întâmplat în ea:

Diagrama folosește un port DB9, de ex. un port COM obișnuit, acest lucru s-a făcut din motive de economisire atât de spațiu pe placă, cât și de conectorii înșiși (am avut COM), iar din moment ce vom folosi doar 5 conductori, acest lucru ne va fi suficient cu o marjă. faceți un adaptor de la DB25 (LPT) la DB9 (COM), în cazul meu se face după cum urmează:
LPT 2-9 pini = COM 1-8 pini sunt pini de date de control;
LPT 18-25 pini (acestea sunt adesea interconectate) = COM 9 pini - acesta este terenul nostru.
De asemenea, circuitul folosește o sursă de alimentare suplimentară de 12V pentru a alimenta releul, conform planului va fi un simplu încărcător chinezesc sau poate o coroană de 9V (un releu funcționează bine, trebuie să verificați 4 în același timp). Pentru a securiza portul computerului sunt utilizate sursă de alimentare separată și izolarea galvanică folosind un optocupler. Dacă doriți, puteți, desigur, să fiți alimentat de la o sursă de alimentare de 12 V pentru computer, dar fiecare face asta singur și pe riscul și riscul său.

Piese necesare pentru a crea un dispozitiv
  1. Port COM - 1 bucată
  2. conector de alimentare - 1 bucată
  3. LED verde - 4 buc
  4. optocupler 4n25 - 4 buc
  5. un scaun pentru optocupler (am avut doar 8 picioare) - 4 buc
  6. rezistență 390 Ohm - 4 bucăți
  7. rezistență 4,7 kOhm - 4 buc
  8. tranzistor KT815G - 4 bucăți
  9. releu HJR-3FF-S-Z - 4 piese
  10. cleme pentru 3 contacte - 4 buc.
  11. folie textolit

Pregătirea aspectului PCB

După ce am încercat să folosesc Eagle pentru a pregăti PCB-ul, mi-am dat seama că va fi dificil și am decis să găsesc o opțiune mai ușoară. Aceasta optiune este programul sprint layout 5, chiar daca este in executie pentru windows, dar ruleaza fara probleme in wine sub linux. Interfața programului este intuitivă, în limba rusă, iar programul are un ajutor (ajutor) destul de clar. Prin urmare, toate acțiunile ulterioare pentru dezvoltarea plăcii de circuit imprimat au fost efectuate în aspectul sprint 5 (denumit în continuare SL5).
Deși mulți oameni folosesc acest program pentru a dezvolta plăci pentru dispozitivele lor, nu conținea părțile de care aveam nevoie (chiar și în grămada de colecții descărcate de macrocomenzi). Prin urmare, a trebuit mai întâi să creez părțile lipsă:
  1. Port COM (cel care nu a coincis cu al meu, de-a lungul orificiilor de montare)
  2. priza de curent
  3. clemă pentru trei contacte
  4. releu HJR-3FF-S-Z
Vedere a acestor părți:

După adăugarea detaliilor necesare, a început proiectarea PCB-ului în sine. A fost nevoie de mai multe încercări, au fost vreo cinci. Fiecare versiune a plăcii a fost imprimată pe carton, au fost perforate găuri și au fost introduse părți în ele. De fapt, s-a aflat că portul meu COM nu se potrivește cu cel care era în SL5. A apărut și o mică eroare în circuitul releului - de fapt, carcasa releului a fost deplasată cu 2-3 mm. Desigur, toate erorile au fost corectate.
La prima versiune tipărită, s-a dovedit că tranzistorul nu a fost conectat corect, două contacte au fost amestecate.
După toate corecțiile și ajustările, am primit următoarea placă:

SL5 are o funcție PhotoView pentru vizualizarea plăcii, așa arată în ea:

Pe versiunea finală a plăcii, piesele vor fi ușor modificate, dar în rest arată la fel.

SL5 are și o opțiune convenabilă pentru imprimarea plăcii, puteți ascunde straturi inutile și puteți alege culoarea de imprimare pentru fiecare strat, ceea ce este foarte util.

Pregătirea PCB-ului

S-a decis realizarea plăcii folosind metoda LUT (tehnologia laser-iron). În plus, întregul proces este în fotografie.

Tăiați o bucată de PCB de dimensiunea necesară.

Luăm cea mai fină hârtie abrazivă și curățăm cu atenție suprafața de cupru.

După curățarea suprafeței, aceasta trebuie clătită și degresată. Puteți clăti cu apă, și degresați cu acetonă (în cazul meu a fost solventul 646).
În continuare, imprimăm tabla noastră pe o imprimantă laser pe hârtie cretată, fără a uita să instalăm cea mai îndrăzneață imprimare în imprimantă (fără a economisi toner). Această opțiune s-a dovedit a fi puțin nereușită, deoarece tonerul a fost mânjit, dar o altă încercare a fost în regulă.

Acum trebuie să transferați desenul de pe hârtie pe textolit. Pentru a face acest lucru, decupați desenul și aplicați-l pe PCB, încercați să-l aliniați după cum este necesar și apoi încălziți-l cu un fier de călcat. Întreaga suprafață trebuie încălzită bine, astfel încât tonerul să se topească și să adere la suprafața de cupru. Apoi lăsați placa să se răcească puțin și mergeți să o udați sub jet de apă. Când hârtia se udă suficient, aceasta trebuie separată de tablă. Doar tonerul a aderat la tablă. Arata cam asa:

Apoi, trebuie să pregătiți o soluție pentru gravare. Am folosit clorură ferică pentru asta. Pe borcanul cu clorură ferică scrie că soluția trebuie făcută 1 la 3. M-am dat puțin înapoi de la aceasta și am făcut 60 g clorură ferică la 240 g apă, adică. a ieșit 1 la 4, în ciuda acestui lucru, placa a fost gravată normal, doar puțin mai lent. Vă rugăm să rețineți că procesul de dizolvare a clorurii ferice uscate în apă este însoțit de eliberarea de căldură, așa că trebuie adăugată în apă în porții mici și amestecată. Desigur, pentru gravare este necesar să folosiți vase nemetalice, în cazul meu a fost un recipient de plastic (ca dintr-un hering). Am primit urmatoarea solutie:

Înainte de a coborî placa în soluție, am lipit firul de pescuit pe partea din spate cu bandă adezivă, astfel încât să fie mai convenabil să obțineți și să întoarceți placa. Dacă soluția ajunge pe mâini, trebuie să o spălați rapid cu săpun (săpunul o neutralizează), dar petele pot rămâne, totul depinde de condițiile specifice. Petele nu se îndepărtează deloc de pe haine, dar am avut norocul să nu le verific eu. Este necesar să scufundați placa în soluție cu cupru în jos și nu toată plană, ci în unghi. Din când în când, este recomandabil să curățați placa de la funcționare, deoarece interferează cu gravarea ulterioară. Acest lucru se poate face cu tampoane de bumbac.

Întregul proces de gravare mi-a luat 45 de minute, 40 de minute ar fi fost de ajuns, dar eram doar ocupat cu încă un lucru.
După gravare, spălăm placa cu săpun, rupem banda cu firul de pescuit și obținem:

Atenţie! Nu turnați soluția de clorură ferică în chiuvetă (canal) - acest lucru poate deteriora părțile metalice ale chiuvetei și, în general, soluția poate fi totuși la îndemână.
Apoi, trebuie să spălăm tonerul, acest lucru se face cu succes cu același solvent 646 care a fost folosit pentru degresare (contactul prelungit al solventului cu pielea îl poate deteriora).

Următorul pas este să găuriți găurile. Am avut inițial găuri de 1 mm și 1,5 mm pe placă, deoarece nu am găsit burghie mai subțiri. De asemenea, în orașul nostru nu a fost posibil să se găsească o mandrină cu mâner pentru atașarea la un motor electric, așa că totul a fost făcut cu un burghiu mare.

A apărut primul dispozitiv

Pentru prima dată, am luat doar două burghie, dar când am folosit un astfel de burghiu, acest lucru nu a fost suficient. Un burghiu s-a rupt, iar celălalt a fost îndoit. Tot ce am reușit să forez în prima zi:

A doua zi am cumpărat cinci burghie. Și au fost doar de ajuns, pentru că, dacă nu se rup (apropo, am rupt doar unul dintre cele cinci), atunci devin plictisiți, iar la găurirea cu cele tocite, șinele se deteriorează, cuprul începe să se desprindă. După găurirea completă a plăcii, obținem:

După găurire, placa trebuie cositorită. Pentru aceasta am folosit metoda veche - un fier de lipit, flux TAGS și cositor. Am vrut să încerc să folosesc aliajul lui Rose, dar nu îl găsesc în orașul nostru.

După cositorizare, obținem următorul rezultat:

Apoi, trebuie să clătiți placa pentru a îndepărta resturile de flux, deoarece TAGS este lavabilă cu apă, puteți face acest lucru fie cu apă, fie cu alcool. Am făcut ceva între ele - am spălat-o cu vodcă veche și am șters-o cu tampoane de vată. După toți acești pași, placa noastră este gata.

Asamblarea pieselor

Pentru a verifica corectitudinea plăcii, inițial asamblam o singură linie (din patru) de piese, nu știi niciodată unde s-a strecurat eroarea.

După instalarea pieselor, mergem și conectăm dispozitivul la computer prin LPT, pentru aceasta un adaptor de la DB25 (LPT) la DB9 (COM) este lipit în următoarea formă:

  • DB25 cu 2 pini la DB9 cu 1 pin
  • DB25 cu 3 pini la DB9 cu 2 pini
  • Pinul 4 al DB25 la pinul 3 al DB9
  • DB25 cu 5 pini la DB9 cu 4 pini
  • DB25 cu 6 pini la DB9 cu 5 pini
  • DB25 cu 7 pini la DB9 cu 6 pini
  • DB25 cu 8 pini la DB9 cu 7 pini
  • 21 de pini DB25 (este posibil orice număr de la 18 la 25) la pinul 9 al DB9
Deoarece o pereche răsucită obișnuită a fost folosită ca fir, un cablu nu a fost suficient, dar pentru acest dispozitiv sunt suficiente doar cinci fire, așa că această opțiune este potrivită. Folosim o lanternă sovietică simplă ca sarcină care trebuie pornită. Ei bine, ca sursă de alimentare - o sursă de alimentare universală chineză (4 conectori și sursă de alimentare de la 3 la 12 V). Aici este totul asamblat:

Dar dispozitivul funcționează deja:

Aceasta s-a încheiat în altă seară, iar a doua zi a fost lăsată asamblarea restului pieselor.

Și iată dispozitivul complet asamblat:

Ei bine, și un mic videoclip despre cum funcționează (calitatea nu este foarte bună, nu a fost nimic de filmat normal)

Asta e tot, rămâne doar să găsești o carcasă normală pentru dispozitiv și să-l pornești.

Partea software

Desigur, pentru a gestiona portul LPT, aveți nevoie de niște software, dar din moment ce am Linux acasă, sa decis să scriu cel mai simplu program, apoi să îl adaug și să îl adaptez după cum este necesar. Arăta cam așa:
#include
#include
#include
#include
#define BASE 0x378
#definiți TIME 100000
int main ()
{
int x = 0x0F;
int y = 0x00;
dacă (ioperm (BAZĂ, 1, 1))
{
perror („ioperm ()”);
ieșire (77);
}
outb (x, BAZĂ);
returnează 0;
}

Acest program trimite portul 0x0F = 00001111 la LPT, adică. alimentează 1 până la 2-5 pini (Data0-Data3), iar aceasta este tensiunea noastră de control între 2-5 pini și masă (18-25 pini), astfel toate cele patru relee se vor porni. Programul pentru trimiterea 0x00 la portul de închidere funcționează în același mod, doar trimite y - outb (y, BASE) în loc de x. Puteți citi și starea portului:
#define BASEPORT 0x378 / * lp1 * /
...
printf ("stare:% d \ n", inb (BASEPORT));
...

Singura nuanță a acestui program este că trebuie să fie rulat ca root, deoarece funcția ioperm nu este disponibilă pentru un utilizator obișnuit. Cred că nu poți spune cum să rezolvi o astfel de problemă, toată lumea va alege o opțiune mai potrivită.

Ulterior, programul a fost modificat astfel încât, prin transmiterea parametrilor liniei de comandă acestuia, să fie posibil să se indice cu ce dispozitiv și ce să facă.
Ieșirea „sw --help”:
Programul de control al releului prin portul LPT.
Programul poate avea unul sau doi parametri.
Format parametru: sw [număr dispozitiv] [acțiune]
numărul dispozitivului - de la 1 la 8
acțiune - "on", "off", "st" - activare, dezactivare, stare
Exemplu: „sw 2 on” pentru a activa un al doilea dispozitiv sau „sw --help” pentru a afișa ajutor

PS Dacă cineva are nevoie de el, atunci pot pune fișierul schematic al plăcii în sl5 și sursa programului de control undeva.

Mulți dintre noi ar dori să controleze circuitele electrice printr-un computer. Si ce? Ar fi grozav dacă. Imaginează-ți, te sună un prieten, spune: „Voi fi acolo în 20 de minute”, apoi trec 20 de minute, sună soneria, dar nu vrei să te ridici de la computer, să te duci să deschizi ușile etc. Și imaginați-vă o situație diferită: sună o sonerie, apoi pe monitor apare un mesaj de genul „Aveți musafiri”, apăsați un buton de pe computer - se deschide o încuietoare magnetică la ușă și strigi la toată casa: „Vino în", sau trebuie să-l porniți. ceainic electric, lumină sau altceva. În zilele noastre, aceasta nu mai este o fantezie, ci destul de realistă, doar din cauza economiei proaste, nu toată lumea își poate permite chiar și cea mai simplă „casă inteligentă”, dar dacă există dorință și mâini directe, atunci puteți controla cu ușurință circuitele electrice prin PC.

În zilele noastre, destul de mulți oameni știu să programeze, pot scrie un program pentru un computer care ar putea controla dispozitivele externe, dar cum să conecteze același fierbător electric la un computer? Ei bine, poți, de exemplu, prin portul LPT, doar că acum rar poți vedea unde poți vedea ce rămâne apoi? USB !!!

Să facem un dispozitiv care se va conecta la USB și va putea controla circuitele electrice (de exemplu, aprinde luminile), răspunde la închiderea butoanelor (de exemplu, o sonerie) și altceva.

Deci, din ce vom face? Cei care au fost interesați de această problemă probabil că au auzit deja despre modulul Ke-USB24A.

Descriere:

Modulul Ke-USB24A este proiectat să interfațeze dispozitive externe digitale și analogice, senzori și actuatoare cu un computer prin magistrala USB. Este definit ca un port COM suplimentar (virtual). Modulul are 24 de linii de intrare/ieșire discrete (fie 0 logic, fie 1 logic) cu capacitatea de a regla direcția de transmisie a datelor (intrare/ieșire) și un ADC de 10 biți încorporat. Pentru a controla modulul, este furnizat un set de comenzi de control text (KE - comenzi).

Trăsături distinctive:

  • Modul de interfață magistrală USB
  • definit de sistemul de operare Windows / Linux ca port COM virtual
  • nu necesită elemente de circuit suplimentare, imediat gata de utilizare
  • 24 de linii I/O discrete cu capacitatea de a configura independent direcția de transmisie a datelor (intrare/ieșire) și de a salva setările în memoria nevolatilă a modulului
  • ADC de 10 biți încorporat cu frecvență de eșantionare garantată de până la 400 Hz.
  • intervalul de tensiune dinamică a semnalului de intrare analogic pentru ADC este de la 0 la 5 V.
  • un set de comenzi text de control la nivel înalt gata făcute (KE - comenzi)
  • factor de formă convenabil sub forma unui modul cu un antet DIP și un conector USB-B
  • capacitatea de a alimenta atât de la magistrala USB, cât și de la o sursă de alimentare externă (modul este selectat de un jumper de pe placă)
  • capacitatea de a salva datele utilizatorului în memoria nevolatilă a modulului (până la 32 de octeți)
  • capacitatea de a schimba descriptorul de șir al dispozitivului USB
  • fiecare modul are un număr de serie unic disponibil prin software
  • Suportă Windows 2000, 2003, XP 32/64 biți, Vista 32/64 biți și Windows 7 32/64 biți
  • Suport OS Linux

Se pare că este ceea ce avem nevoie, DAR... prețul acestui miracol începe de la 40 de dolari. Probabil că ți-ai pierdut deja dorința de a-l cumpăra.

Mai bine punem noi la cap un astfel de modul, doar ca să fie accesibil chiar și unui student înfometat!

Dintre criteriile obligatorii: cost redus și disponibilitate ușoară a componentelor, ușurință de asamblare.

Ca microcontroler, să luăm ATmega8, folosit pe scară largă (fără L la sfârșit). Caracteristicile modulului nostru vor fi următoarele:

  • Conexiune la PC prin USB.
  • este detectat de Windows ca dispozitiv USB HID, fără șofer.
  • Gata de plecare imediat.
  • 7 linii de ieșire cu stare logică (activ/inactiv).
  • 2 linii de ieșire cu control uniform al tensiunii de la minim la maxim. Numai că acesta nu este un DAC (convertor digital-analogic) ci un PWM (modulație pe lățime a impulsului). Dar cu un filtru, îl poți transforma cu ușurință într-un DAC.
  • 7 linii de intrare cu stare logică (activ/inactiv).
  • 1 ADC (convertor analog-digital) cu capacitatea de a conecta o sursă externă de tensiune de referință (RON).
  • Posibilitatea de a încărca firmware nou direct prin USB.

De ce am ales HID și nu portul COM virtual (CDC)? În primul rând, driverele nu sunt necesare și, în al doilea rând, HID încarcă microcontrolerul de câteva ori mai puțin decât CDC, deoarece datele nu sunt solicitate în mod constant, ci numai atunci când gazda (calculatorul) o cere și, în general, portul COM este deja pe moarte. practic nu există porturi COM hardware, rămân doar cele virtuale. Liniile de ieșire logice sunt proiectate pentru a controla doar două stări - pornit sau oprit, când este oprit, ieșirea (piciorul microcontrolerului) va fi de 0V; când este pornit - 5V, aici puteți conecta pur și simplu un LED și îl puteți controla de la un PC sau poți conecta un releu (printr-un tranzistor) și poți gestiona o sarcină mai puternică (iluminare etc.). Liniile de ieșire cu reglare a tensiunii (ieșire PWM) vă permit să schimbați fără probleme tensiunea la piciorul microcontrolerului de la 0V la + 5V cu un pas de 5 / 1024V. Liniile de intrare cu stare sunt pentru monitorizarea stării butoanelor, tastelor etc. Când linia este scurtcircuitată la masă (carcasă, GND), starea ei = 0, dacă nu scurtcircuitată - 1. ADC vă permite să măsurați tensiunea, aici puteți conecta un potențiometru, un senzor analog de temperatură, sau altceva, doar tensiune, pe acest picior nu trebuie să depășească tensiunea de nutriție. Atât o referință externă, cât și tensiunea de alimentare a modulului pot fi utilizate ca sursă de tensiune de referință pentru ADC. Pentru a evita conectarea microcontrolerului la programator în timpul flashării, vom face posibilă încărcarea firmware-ului direct prin USB, fără a folosi un programator extern.

Diagrama dispozitivului:

După cum puteți vedea, circuitul este destul de simplu, doar că nu am atașat conectorii pe circuit în ordine, asta pentru că ATmega8 are picioarele fiecărui port, din anumite motive sunt împrăștiate, dar pe placa în sine va arata frumos.

Placă de circuit imprimat:

Ei bine, ca rezultat, iată ce s-a întâmplat:

Acum să ne dăm seama ce vom conecta unde.

  1. Port USB. Cred că toată lumea îl cunoaște.
  2. Indicator de putere.
  3. Intrare logica 1.
  4. Intrare logica 2.
  5. Intrare logica 3.
  6. Intrare logica 4.
  7. Intrare logica 5.
  8. Intrare logica 6.
  9. Intrare logica 7.
  10. Intrare ADC.
  11. Intrare pentru conectarea ION.
  12. Acest pin este conectat la sursa de alimentare a dispozitivului. Închideți contactele 12 și 13 cu un jumper, astfel încât tensiunea de referință să fie egală cu tensiunea de alimentare.
  13. Ieșire logică 1.
  14. Ieșire logică 2.
  15. Ieșire PWM 1.
  16. Ieșire PWM 2.
  17. Ieșire logică 3.
  18. Ieșire logică 4.
  19. Ieșire logică 5.
  20. Ieșire logică 6.
  21. Ieșire logică 7.

Ce este GND?

Chiar și un radioamator începător știe ce este GND, dar unora li se par litere înfricoșătoare. GND este, ca să spunem așa, un contact comun. Se mai numește pământ și masă. Firul este de obicei negru (uneori alb sau orice fir). GND se conectează și la carcasa metalică a dispozitivului. Pe tablă, în cele mai multe cazuri, GND umple tot spațiul liber sub formă de poligoane mari. Modulul nostru are poligoane sub formă de plasă, acestea fiind, de asemenea, conectate la corpul conectorului USB.

Program de microcontroler.

Deoarece în articol vreau să vă spun cum să controlați circuitele prin USB folosind un modul gata făcut, nu voi explica cum funcționează programul microcontrolerului, puteți descărca sursa de mai jos și vedeți că există o mulțime de comentarii. Aici voi scrie doar despre ID-urile dispozitivelor.

Deci, sursa conține fișierul usbconfig.h, are linii

#define USB_CFG_VENDOR_ID 0x10, 0x00

#define USB_CFG_DEVICE_ID 0x01, 0x00

#define USB_CFG_VENDOR_NAME „k”, „i”, „b”, „e”, „r”, „m”, „a”, „s”, „t”, „e”, „r”, „.” , „p”, „l”, „.”, „u”, „a”

#define USB_CFG_VENDOR_NAME_LEN 17

#define USB_CFG_DEVICE_NAME „U”, „S”, „B”, „-”, „C”, „o”, „n”, „t”, „r”, „o”, „l”

#define USB_CFG_DEVICE_NAME_LEN 11

Primele două linii sunt ID-ul dispozitivului și ID-ul produsului, așa cum este cazul fiecărui dispozitiv USB, numai în acest fișier este indicat mai întâi octetul cel mai puțin semnificativ, apoi cel mai semnificativ, în programul pentru computer - invers... Urmează numele producătorului (furnizorului) și numele dispozitivului, este indicată și lungimea șirului în octeți. Programul pentru PC va căuta mai întâi dispozitivele după ID și apoi, printre cele găsite, va căuta după nume.

Firmware-ul dispozitivului.

În fișierele descărcate din folderul MCUusb_bootloader, găsiți fișierul principal.hex- acesta este un USB-bootloader, trebuie turnat în MK folosind un programator extern. După umplere, mai trebuie să instalați corect siguranțele, în fereastra programatorului STK500 ar trebui sa arate asa:

Dacă utilizați un alt program, puteți introduce pur și simplu valorile biților siguranței HIGH și LOW (uitați-vă la ecran).

După intermiterea cu succes, puteți încerca să flashați dispozitivul prin bootloader. Cum lucrează? Când MK este pornit (tocmai când este aplicată alimentarea sau după o resetare), bootloader-ul pornește imediat, verifică starea, dacă este adevărată, apoi începe inițializarea bootloader-ului (calculatorul găsește dispozitivul). Ca o condiție, vom avea „Intrarea logică 1 = 0”, adică pentru a porni bootloader-ul, trebuie să închideți intrarea logică 1 la GND și să apăsați butonul RESET de pe dispozitiv, ar trebui să apară un nou dispozitiv HID în dispozitiv manager, care, de asemenea, nu necesită șoferi:

Tax, acum în folderul MCUSB_Controldefault rulăm fișierul boot.bat, ar trebui să apară o fereastră în care vor rula numerele:

Dacă fereastra s-a închis imediat, atunci ai făcut ceva greșit. Dacă totul este în regulă, atunci nu veți mai avea nevoie de un programator extern pentru acest dispozitiv. Acum puteți deconecta intrarea logică 1 de la GND. Și pentru orice eventualitate, apăsați RESET. Dispozitivul HID ar trebui să apară și în managerul de dispozitive (computerul va scrie că a fost găsit unul nou). Asigurați-vă că acest dispozitiv apare în manager.

Gazdă- asta va controla dispozitivul, in cazul nostru, computerul. Voi descrie mai detaliat controlul dispozitivului de pe un PC.

Pentru programatorii Delphi, scrierea unui program de control HID nu va fi o problemă, deoarece există o mulțime de informații pe Internet. Dar pentru programatorii C ++ Builder totul nu este atât de dulce, dar, după cum s-a dovedit, totul nu este atât de rău. Pe Internet, am dezgropat biblioteca hidlibrary.h, așa că cu ajutorul ei vom lucra cu dispozitivul HID.

Descărcați sursele și rulați Control USB.cbproj(C++ Builder 2010).

În dosar hidlibrary.h chiar în vârf există o linie

Să creăm un formular, formularul va avea un CheckListBox pentru controlul ieșirilor logice, 2 ScrollBars pentru controlul canalelor PWM, un ListBox pentru afișarea intrărilor logice, o Etichetă pentru afișarea stării ADC și un timer. Ar trebui să arate așa:

Redenumiți SkrulBars în ScrollBar_PWM1 și ScrollBar_PWM2, setați Max = 1023 în proprietățile lor.

Să creăm o structură

pachet #pragma (împingere, 1)

struct status_t (

nesemnate char logical_outputs;

intrări_logice nesemnate;

caracter nesemnat ADC_DATA;

unsigned short int PWM1;

unsigned short int PWM2;

struct status_t DeviceStatus;

pachet #pragma (pop)

Pachetul #pragma este necesar pentru a preveni alinierea structurii de la compilator. V ieșiri_logice starea tuturor ieșirilor logice este stocată, în modul bit cu bit, adică primul bit stochează starea primei ieșiri, al doilea - al doilea și așa mai departe până la al șaptelea. De asemenea intrări_logice stochează starea intrărilor logice. V ADC_DATA starea ADC este stocată, valoarea minimă este 0, valoarea maximă este 255. PWM1 starea primei ieșiri PWM este stocată (reglarea lină a tensiunii), în PWM2- starea celui de-al doilea, valoarea minimă este 0, maxima este 1023.

În programul pentru PC, trebuie să citiți această structură de la microcontroler și apoi să procesați datele primite. Pentru a seta noi valori ale ieșirilor, trebuie mai întâi să scrieți noi valori în structură, apoi să trimiteți structura modificată la microcontroler. Când setați noi valori, trebuie editate doar primele, 4 și 5 elemente, editarea celorlalte două nu va avea niciun efect.

HIDLibrary ascuns;

Și adăugați funcția de conectare ().

Acum datele de la dispozitivul HID pot fi solicitate folosind funcția hid.ReceiveData, specificând un pointer către structură ca parametru, chiar înainte de solicitare, trebuie să verificați dacă dispozitivul este conectat:

Acum să adăugăm programul nostru (sau pur și simplu descărcați sursa, totul este gata acolo).

Adăugați unde firul în cod (mai bine imediat după structură) aceste linii:

Setați proprietățile temporizatorului la Enabled = True, Interval = 500. Faceți dublu clic pe el și scrieți în handler

if (! connect ()) return; // Ieșiți dacă dispozitivul nu este conectat

hid.ReceiveData (& DeviceStatus); // Citiți datele de pe dispozitiv

pentru (car i = 0; i< 7; i++)

CheckListBox_LogOuts-> Checked [i] = CheckBit (DeviceStatus.logical_outputs, i);

ScrollBar_PWM1-> Poziție = DeviceStatus.PWM1;

ScrollBar_PWM2-> Poziție = DeviceStatus.PWM2;

ListBox_LogInputs-> Clear ();

pentru (car i = 0; i< 7; i++)

ListBox_LogInputs-> Items-> Add ("Log. Input" + IntToStr (i + 1) + "=" + BoolToStr (CheckBit (DeviceStatus.logical_inputs, i)));

Label_ADC-> Caption = DeviceStatus.ADC_DATA;

Cred că totul este clar aici și nu necesită explicații.

Faceți dublu clic pe CheckListBox, în handler scrie

Totul, puteți compila!

Test Drive.

Deci, totul este gata: dispozitivul este asamblat, microcontrolerul este flash, programul pentru computer a fost creat, îl puteți testa.

Conectați dispozitivul la un computer, rulați programul. În partea stângă a casetei cu listă, este afișată starea tuturor intrărilor logice, dacă, de exemplu, intrarea logică 1 nu este scurtcircuitată la GND, atunci va spune „Log. intrare 1 = -1 ″, dacă este conectat, atunci „Log. intrare 1 = 0 ″. Iată un ecran:

Rezultatul conversiei ADC este afișat sub această listă. Închideți intrarea ADC la minus, apoi rezultatul va fi 0, scurt la + putere, rezultatul va fi 255. Puteți conecta un potențiometru aici, sau altceva. Tensiunea la piciorul ADC poate fi calculată folosind formula: Voltage_ion / 255 * rezultat_ADC.

Acum conectați un fel de sarcină mică la ieșirea logică 1 (LED sau doar un voltmetru). Bifați caseta de lângă „Log. Output 1” - LED-ul se va aprinde.

Conectați un voltmetru la primul canal PWM, rotiți cursorul - tensiunea se va schimba.

Completare.

Acum puteți folosi acest modul pentru a controla iluminatul sau alte aparate electrice. Un buton de sonerie sau o altă cheie poate fi conectat la intrările logice. Puteți conecta un senzor analog de umiditate, un senzor termic sau un fotorezistor la intrarea ADC (veți ști dacă pe stradă este noapte sau zi).



Cum vă place acest articol?

În zilele noastre, în fiecare atelier de reparații electrice, da, printre altele, fiecare zi de lucru a radioamatorului începe cu pornirea calculatorului și abia apoi a echipamentelor electrice auxiliare. În alte chestiuni, odată cu pornirea computerului, ziua de lucru începe nu numai pentru radioamatorii, ci și pentru mulți utilizatori ai acestui „dispozitiv”, care a devenit parte din viața noastră. Dar în fiecare zi, porniți-l dimineața și opriți-l seara, ei bine, să presupunem că o imprimantă, difuzoare active, o lampă de birou și nu știi niciodată ce poți găsi la un utilizator obișnuit, este puțin enervant. Pe baza sarcinilor convenite, scopul a fost de a crea un comutator de încărcare conceput pentru a porni și opri toate dispozitivele conexe. Sunt de acord, poți lua calea celei mai puține rezistențe și pune un comutator obișnuit pe tot, dar se pare că nu aceasta este calea pentru radioamator.O vom face mult mai convenabil - vom construi automatul în filtrul de rețea:

Deoarece dispozitivul monitorizează pornirea/oprirea dispozitivului conform principiului „slave-master”, cel mai simplu mod este utilizarea portului USB. Voi indica imediat că atunci când utilizați portul USB, dispozitivul funcționează în laptopuri și computere cu o sursă de alimentare care oprește toate sursele de alimentare. De exemplu, în cele mai recente modele de surse de alimentare, portul USB de +5 volți este prezent ca un watchdog chiar și atunci când unitatea este oprită. Dispozitivul nu va funcționa cu ele, sau mai degrabă, va fi, dar este mereu pornit. Aici este necesar să se folosească un alt port ca sursă de semnal și, în consecință, să se potrivească semnalul sursei și al actuatorului.

În acest dispozitiv, actuatorul este un releu, cu contacte nominale pentru 16 amperi și cu o bobină pentru 5 volți. Utilizarea unui releu asigură izolarea galvanică a sursei de semnal și a rețelei de 220 volți.

După o serie de experimente, s-a constatat că atunci când este alimentat, conform datelor pașaportului, +5 volți, releul consumă 150 mA de curent. Dacă utilizați un computer staționar, nu există probleme, deoarece +5 volți ai portului USB merg direct de la sursa de alimentare și nu îl supraîncărcați. Dacă toate cele de mai sus ți se potrivesc, poți să te oprești și să faci propria ta versiune conform diagramei de mai jos.

Dar dacă intenționați să utilizați un laptop, atunci nu este recomandabil să rulați încă 150 mA prin computer, caz în care trebuie să utilizați o sursă de alimentare suplimentară de 5 volți. În această versiune, a fost folosită o sursă de alimentare comutată de la un încărcător de la un telefon mobil. Se poate folosi orice sursă de alimentare nereglementată, cu condiția să furnizeze 5 volți și 250 mA de curent, ținând cont de marjă. Puteți utiliza și o altă tensiune, dar în acest caz va fi necesar să luați un releu cu tensiunea de alimentare corespunzătoare.Pentru a potrivi sursa de semnal cu releul și sursa de alimentare, trebuie să instalați un comutator cu tranzistor de tipul:

Tranzistorul este selectat de tip KT815 cu orice literă și un rezistor de 1 kΩ, dioda este KD522. Cu acest circuit de comutare, consumul de curent a arătat 4 mA, ceea ce nu este atât de important pentru un laptop. LED1 și LED2 indică starea circuitului. Dacă se dorește, împreună cu rezistențele, acestea pot fi excluse din circuit.

Dispozitivul de control de 220 V este asamblat într-un spațiu liber din carcasa prizei - filtrul de rețea.Fișier schematic în splane situat

Autorul a dezvoltat un program și un dispozitiv pentru controlul diferitelor dispozitive electrice și radio cu ajutorul unui computer. Dispozitivul este conectat la unul dintre porturile COM, iar dispozitivele pot fi controlate atât folosind taste soft, cât și senzori externi.

Diagrama dispozitivului este prezentată în fig. 1. Baza sa este microcircuitul 74HC595, care este un registru de deplasare pe 8 biți cu intrare serială și ieșiri de informații seriale și paralele. Ieșirea paralelă este realizată printr-un registru tampon cu ieșiri care au trei stări. Semnalul de informare este alimentat la intrarea SER (pin 14), semnalul de înregistrare este alimentat la intrarea SCK (pin 11), iar semnalul de ieșire este alimentat la intrarea RSK (pin 12). Un regulator de tensiune de 5 V este asamblat pe microcircuitul DA1 pentru a alimenta registrul DD1.

Figura 1. Diagrama dispozitivului

Dispozitivul este conectat la unul dintre porturile COM ale computerului. Semnalele de informații sunt trimise la pinul 7 al soclului XS1, semnalele pentru scrierea informațiilor - la pinul 4 și semnalele de ieșire a informațiilor - la pinul 3. Semnalele portului COM, conform standardului RS-232, au niveluri de aproximativ - 12 V (log 1) și aproximativ +12 B (log 0). Împerecherea acestor niveluri cu nivelurile de intrare ale registrului DD1 se realizează folosind rezistențele R2, R3, R5 și diode zener VD1-VD3 cu o tensiune de stabilizare de 5,1 V.

Semnalele de control pentru dispozitivele externe sunt generate la ieșirile Q0-Q7 ale registrului DD1. Nivelul înalt este egal cu tensiunea de alimentare a microcircuitului (aproximativ 5 V), nivelul scăzut este mai mic de 0,4 V. Aceste semnale sunt statice și sunt actualizate în momentul în care un nivel ridicat ajunge la intrarea RSK (pin 12) a registrul DD1. LED-urile HL1-HL8 sunt proiectate pentru a monitoriza funcționarea dispozitivului.

Dispozitivul este controlat folosind programul UmiCOM dezvoltat de autor. Aspectul ferestrei principale a programului este afișat în fig. 2.

Figura 2. Aspectul programului UniCOM

După pornire, ar trebui să selectați un port COM liber și viteza de comutare a ieșirii. Starea fiecăreia dintre ieșirile dispozitivului este introdusă în rândurile tabelului (nivel înalt - 1, nivel scăzut - 0 sau gol). Programul „enumerând” coloanele tabelului în ciclul de funcționare, stabilește nivelurile logice corespunzătoare la ieșirile dispozitivului. Informațiile introduse în tabel sunt salvate automat când programul se termină și sunt încărcate din nou la următoarea pornire a programului. Pentru claritate, în partea stângă a ferestrei programului, sunt evidențiate numărul de ieșiri cu un nivel ridicat.

Dispozitivele pot fi controlate folosind senzori de contact externi, care sunt conectați la intrările 1-3 și linia +5 V. Acestea trebuie să funcționeze pentru a închide sau deschide contactele. Un exemplu de diagramă de conectare a senzorului este prezentat în fig. 3.

Figura 3. Conectarea senzorilor de contact

Când apăsați tasta soft „Setări de intrare”, se deschide fereastra „Potrivire intrare/ieșire” ( fig. 4.), unde selectați intrările care vor schimba starea ieșirilor. Puteți simula funcționarea intrărilor apăsând tastele soft „1”, „2”, „3” din fereastra principală a programului. În cazurile în care dispozitivele nu pot fi controlate folosind niveluri logice, trebuie utilizat un releu, a cărui schemă de conectare este prezentată în fig. 5, sau un optocupler cu tranzistor ( fig. 6.).

Figura 4. Coordonarea intrărilor și ieșirilor

Figura 5. Schema de conectare a releului

Figura 6. Schema de conexiuni pentru optocuplajul tranzistorului

Majoritatea pieselor sunt montate pe o placă de circuit imprimat realizată din fibră de sticlă acoperită cu folie unilaterală cu o grosime de 1 ... 1,5 mm, al cărei desen este prezentat pe fig. 7. Rezistoarele R1-R6 sunt montate pe bornele soclului XS1.

Figura 7. Desenul PCB

Dispozitivul folosește rezistențe C2-23. MLT, condensatoare de oxid - К50-35 sau importate, soclu XS1 - DB9F. Pe lângă diodele zener indicate pe diagramă, puteți utiliza BZX55C5V1 sau KS174A domestic, orice LED-uri. Dispozitivul este alimentat de la o sursă de alimentare stabilizată sau nereglată cu o tensiune de 12 V și un curent de până la 100 mA.

Controlul dispozitivelor prin portul USB al unui computer.

P. VYSOCHANSKY, Rîbniţa, Transnistria, Moldova
Un dispozitiv de control al computerului pentru diferite dispozitive, a cărui diagramă este prezentată în Fig. 1, similar din punct de vedere funcțional cu cel descris în, dar se conectează la portul USB al unui computer, care (spre deosebire de portul COM) astăzi se află în fiecare dintre ele. Singurul microcircuit al dispozitivului este microcontrolerul comun ATmega8. Este necesar pentru organizarea comunicării prin magistrala USB. Deși îi lipsește un modul hardware dedicat, această funcție este realizată în software.

Rezistorul R1, conectat între terminalul pozitiv al sursei de alimentare și linia USB D-bus, îl pune în modul LS de viteză redusă cu o rată de transfer de 1,5 Mbit / s, ceea ce face posibilă decriptarea stropilor computerului în software. Rezistoarele R4 și B5 elimină tranzitorii de comunicare, ceea ce crește stabilitatea. Condensatorul C1 blochează zgomotul de impuls în circuitul de alimentare, ceea ce îmbunătățește și stabilitatea dispozitivului. Diodele VD1 și VD2 sunt folosite pentru a reduce tensiunea de alimentare a microcontrolerului la aproximativ 3,6 V - acest lucru este necesar pentru a se potrivi cu magistrala USB.
Semnalele de control al instrumentului sunt generate la ieșirile PB0-PB5 și PCO, PC1 ale microcontrolerului. Nivel logic ridicat - tensiune de aproximativ 3,4 V.
Tensiunea joasă este aproape de zero. Dispozitivele care nu consumă mai mult de 10 mA curent (de la fiecare ieșire) pot fi conectate la ieșiri. Dacă sunt necesare valori mari de curent sau tensiune, atunci nodurile de potrivire prezentate în Fig. 5 și 6. Dispozitivul este asamblat pe o placă, circuitul imprimat nu a fost dezvoltat, au fost folosite rezistențe MLT, condensatoare C2 și CZ - ceramică de înaltă frecvență, C1 - K50-35 sau similare importate. Diode de siliciu cu o cădere de tensiune pe joncțiune de aproximativ 0,7 V. Programul pentru microcontroler a fost dezvoltat în mediul Bascom-AVR, versiunea 1.12.0.0. Pentru a lucra cu magistrala USB a fost folosită biblioteca swusb.LBX, care realizează decodarea software a semnalelor USB în timp real. Codul programului obținut ca urmare a compilării dintr-un fișier cu extensia HEX ar trebui să fie încărcat în memoria FLASH a microcontrolerului. Pentru aceasta, programatorul a fost folosit împreună cu utilitarul încorporat în Bascom-AVR. Starea biților din configurația microcontrolerului trebuie să corespundă cu cea prezentată în Fig. 2


Când conectați dispozitivul la computer pentru prima dată, sistemul de operare detectează un nou dispozitiv compatibil USB HID numit „uniUSB” și instalează driverele necesare. După câteva secunde, dispozitivul este configurat și gata de utilizare. Pentru a lucra cu el, a fost creat programul UniUSB. Este prezentat în două versiuni: pentru sistemele de operare Windows pe 32 de biți (x86) și 64 de biți (x64). Versiunea pe 32 de biți a fost testată în sisteme de operare: Windows 98, Windows XP, Windows 7, iar versiunea pe 64 de biți este testată doar în Windows XP x64. Programul UniUSB este scris în PureBasic (versiunea 4.31) folosind biblioteca de funcții definite de utilizator HID Lib, care acceptă lucrul cu dispozitive USB HID. Aspectul ferestrei programului este prezentat în Fig. 3


În același folder cu fișierul său executabil, trebuie să existe un fișier numit UniUSB_code.txt sau UniCOM_code.txt. Ultima opțiune este necesară pentru compatibilitatea cu programul UniCOM propus în. Acest fișier conține un script pentru controlul dispozitivelor externe. Când programul pornește, datele din fișier sunt încărcate în tabelul situat în fereastra principală, iar când programul este terminat, sunt salvate în fișier. Făcând clic stânga pe celulele tabelului vă permite să le schimbați starea: 1 - nivel logic ridicat, 0 sau gol - nivel logic scăzut. Pentru a adăuga sau elimina o coloană dintr-un tabel, trebuie să faceți clic dreapta pe ea și să selectați acțiunea necesară în meniul care apare. Când un dispozitiv este conectat la portul USB, programul îl detectează și activează butonul situat în partea de sus a ferestrei din bara de instrumente. Prin apăsarea acestui buton se începe procesul de enumerare a coloanelor tabelului și setarea stărilor ieșirilor indicate în acestea. Pentru o mai mare claritate, în stânga tabelului, sunt evidențiate numărul de ieșiri pe care este setat în prezent un nivel logic ridicat. Viteza de căutare (timp în milisecunde între tranzițiile de la coloană la coloană) este setată în câmpul „Viteză, ms”. Luați în considerare sistemul de operare Windows - multitasking! Aceasta înseamnă că timpul procesorului este împărțit între multe procese, uneori ascunse utilizatorului, care sunt executate pe rând, ținând cont de prioritățile stabilite în sistem. Prin urmare, nu trebuie să ne așteptăm la o precizie ridicată a păstrării intervalelor de timp mai mici de 100 ms.
Pentru a opri scurt enumerarea coloanelor, utilizați butonul, Apăsând din nou, va continua enumerarea din punctul de oprire. Butonul nu mai repetă complet peste coloanele tabelului. Dacă în timpul schimbului de informații între computer și dispozitiv apare o defecțiune sau dispozitivul este deconectat de la conectorul USB al computerului, programul va raporta o eroare prin afișarea unui mesaj corespunzător în bara de stare.

LITERATURĂ

1. Nosov T. Controlul dispozitivelor prin portul COM al unui computer - Radio, 2007, nr. 11, p.61.62.
2. Ryzhkov A. Programator american pentru microcontrolere AVR și AT89S, compatibil cu AVR910. - Radio, 2008, nr. 7, p. 28, 29.

Pe baza materialelor revistei „Radio 2`2011”
Puteți descărca firmware-ul microcontrolerului și programul pentru computer

Top articole similare