Multicanal usb-Termometru (actualizat) - kibermaster

După ce, la un moment dat am scris un articol despre modul de a face un termometru USB și plasat pe două site-uri. Dispozitivul este foarte simplu, dar după câteva zile, un număr foarte mare de posturi pe toppled email-ul meu, cu o varietate de întrebări și sugestii. Din momentul scrierii, a fost de aproximativ doi ani, și încă mai am cel puțin o dată pe săptămână, vine la o scrisoare similară, dar am încetat de mult să-i răspundă, pentru că întrebările sunt ori prea primitive. Dar asta e aproximativ 70% dintre oamenii sunt interesați de două întrebări: Este posibil să se conecteze un al doilea senzor, și dacă este posibil să se facă în funcția termostat termometru. Acum am avut ceva timp liber și am decis să creeze un termometru cu aceste caracteristici.

Senzorii - DS18B20 - este cu trei terminale (sau 8, dacă este SO). Sunt conectate în paralel. Microcontroler - ATmega8. care funcționează la frecvența de 16MHz.

De obicei, DS18B20, precum și un alt dispozitiv cu un singur capăt este conectat la un picior de MC, care este atât o intrare și de ieșire, dar există deficiențe evidente - picioare MK curent este foarte mic, astfel încât o mulțime de senzori pe ea nu atîrna se întâmple, așa că pentru mai mult fiabilitate, MK picior este conectat prin intermediul unui tranzistor. Dar există o altă problemă: interfață 1-wire necesită întârzieri foarte precise, și trebuie să lucreze în paralel un soft-USB, pentru care întârzierea nu ar trebui să fie mai mică decât corecte. Internetul a văzut circuitul în cazul în care computerul a dat echipa MC pentru a măsura temperatura, am așteptat o vreme până când 1-sârmă este eliberat, iar apoi datele solicitate. Această versiune este buggy și frânele. Din fericire, emula funcționarea 1-sârmă posibil prin intermediul UARTa, pe care am făcut-o. În Schema TXD picior conectat la tranzistori, de ieșire de la care este conectat la magistrala 1-sârmă (OW_DQ). în loc de tranzistori se pot conecta pur și simplu TXD și OW_DQ prin rezistor 2-3kOm.

Bootloader săritor activează bootloader built-in pentru a firmware pentru care nu a fost nevoie de programator. USB_RQ LED-ul clipește atunci când MK otvichaet la cereri de la un computer.

Conectorul pin 5:

  1. GND.
  2. canalul 1
  3. canalul 2
  4. 1-Wire. Aici vom conecta linia de semnal DS18B20.
  5. +5V.

Acum, avem nevoie pentru a scrie un firmware pentru microcontroler și calculator.

Microcontroler.

Vă sfătuiesc să citiți articolul de comandă electric prin USB. Numai în acest dispozitiv deja va avea nevoie de drivere. Cele mai multe dintre toate procesele am făcut în funcțiile individuale, codul să fie mai vizibile.

Conținutul principal funcției. la o buclă infinită:

DDRB = 0b00000110; PORTB = 0b00111000; DDRC = 0b00000001; PORTC = 0b11111110; DDRD = 0b00000010; PORTD = 0b11100010; TCCR0 = (1<

DS18x20_StartMeasure () începe să se transforme pe toți senzorii, după ce încep să aștepte cel puțin 750 ms (în timp ce temperatura se măsoară), iar apoi a citi datele.

Considerăm acum modul în care microcontrolerul gestionează solicitările de la un calculator. Pe PC-ul putem trece microcontroler 3 parametrul (bRequest. Windex și wValue), precum și tamponul de date. După ce cererea este invocată aici este funcția:

Pentru a schimba starea canalului care urmează să fie transmise la un PC ca parametru bRequest = USBRQ_HID_SET_REPORT. WINDEX = numărul canalului (1 sau 2), wValue = valoarea (0 sau 1).

O cerere de a avea datele, trebuie să treacă un parametru bRequest USBRQ_HID_SET_REPORT, Windex = nume pentru ceea ce vrem să obțineți (aruncăm o privire la codul, că totul este clar). Programul microcontroler pentru a instala usbMsgPtr pointer la începutul tamponului să fie transmis, și retur (retur) dimensiunea memoriei tampon.

Pentru a nu trebuie să sufere în mod constant cu un programator extern pentru a încărca bootloader Atmegu8. Conectați microcontroler la programator, setați Fyuz ca imaginea de mai jos:

În fișierul atașat, directorul MCU. este bootloader.hex fișier. umple-l cu MC. Instalați un jumper pe bootloader dispozitivului și conectați la un PC, în cazul în care PC-ul a găsit un nou dispozitiv HID. bootloader fulgeră cu succes, un programator extern nu mai este necesară. MCU dosar \ implicit \ boot.bat începe să clipească microcontroler termometru firmware USB, scoateți jumper-ul după un firmware de succes. PC-ul va detecta un dispozitiv nou, atunci când o cerere către conducătorul auto, specificați un dosar moale \ Windows-driver \. După instalarea cu succes a noului dispozitiv va apărea în managerul.

Software-ul pentru PC.

Driver bazat pe biblioteca libusb-Win32. uita la codul, putem înțelege modul în care funcția de deschidere a dispozitivului, dar în detrimentul unei cereri pic mai complicat.

Pentru orice solicitare, trebuie să utilizați funcția usb_control_msg

usb_control_msg (mâner, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, QueryType, wValue, Windex, tampon, tampon lungime, 5000)

  • QueryType - USBRQ_HID_GET_REPORT sau USBRQ_HID_SET_REPORT.
  • tampon - matrice să fie o serie de date înregistrate la cerere.
  • wValue, Windex și lungimea tampon cred că nu este nevoie de a explica))))

Funcția returnează dimensiunea buffer-ului trimis de MC (care returnează funcția usbFunctionSetup).

Lucrul cu dispozitivul.

Ca urmare, o scurtă tortură, am scris programku, pe care el a numit Termometru USB.

Pentru claritate, fiecare senzor poate avea un nume pentru aceasta, faceți clic pe coloana „numele“ de lângă senzorul de dorit, apare o fereastră ca asta aici: Completați numele nou și faceți clic pe OK.

Acum, să se ocupe cu canalul de control.

Dacă indicatorul luminos roșu, canalul este oprit, verde - este inclus. Le puteți controla manual sau automat. Selectați Control „manual“ și faceți clic pe „Change“ - indicatorul se va aprinde verde. Acum, selectați metoda de gestionare a „Automatic“:

Setați numărul de senzor, care va fi comparat cu temperatura. Apoi, setați punctul de oprire (numai numere întregi, fără virgulă) și o condiție de control, există doar 4:

  1. Inclusiv temperatură limită superioară.
  2. Includ temperatura limita inferioara.
  3. Include atunci când temperatura este egală cu limita.
  4. Include atunci când temperatura nu este egală cu limita.

Faceți clic pe „Install“, setările vor fi salvate în registru.

Dacă, de exemplu, ați ales un prim senzor 30 și o condiție limită de temperatură „Inclusiv temperatură limită mai mare“, canalul va fi pornit atunci când primul senzor 30. Temperatura va fi mai mare după coborârea din nou deconectarea.

După cum poate fi util în viața reală? De exemplu, aveți un incalzitor fără termostat. Conectarea canalului la încălzitor (în mod natural nu direct, ci prin exemplul comutator) locul în care senzorul de temperatură în apropierea încălzitorului. Setați cutoff la 25, condiția de „Activează temperatura limită inferioară“ faceți clic pe „Install“ buton. Acum, încălzitorul se va aprinde atunci când temperatura scade sub 25 de grade, și oprit atunci când ajunge la 25.

Ambele canale funcționează independent.

Adăugarea la noua versiune.

Când porniți programul imediat minimizată la tava:

Dați clic pe pictograma pentru a deschide fereastra principală. Când minimiza programul este minimizată la tava.

Acum, temperatura poate fi afișată permanent pe monitor ca o mică fereastră transparentă. Faceți clic pe „Mini ecran“, asta e ceea ce veți vedea:

Aceasta este o mică fereastră pe care o puteți plasa monitorul în orice loc, pur și simplu prin glisarea-l cu mouse-ul. Sus arată numele senzorului selectat, la mijloc - temperatura curentă, din stânga jos - minim, la dreapta - maxim. Pentru a schimba senzorul de afișare, se rostogolească în sus sau în jos roata mouse-ului (înainte / înapoi). Dimensiunea ferestrei poate fi schimbată. Faceți clic pe „Setări“:

Cu o dimensiune minimă a ferestrei va fi ca acest lucru:

Chiar și bunica se va vedea)))).

De asemenea, fereastra se poate face pe partea de sus a altor ferestre (acea opțiune).

Dacă fereastra unde a fost pierdut (de exemplu, a fost pe al doilea monitor, și ați oprit monitorul), apoi faceți clic pe „Set poziția inițială“ - o fereastră mini apare în colțul din stânga sus al monitorului.

Un alt program adăugat Lansarea împreună cu Windows.

Apropo, în mini-fereastra, fontul utilizat pentru claritate terminator_cyr_v4. este în arhiva cu programul.

Gata să cumpere dispozitivul aici.

este ceva ce am înțeles despre formatul etc.
problema este că, din anumite motive, mărturia este întotdeauna se obțin mai puțin de 0,1
verificat în Proteus pe codul sursă din următorul subiect despre 1-sârmă, cred că ceva este greșit în această înmulțit cu 5 - Nu înțeleg ce este

Pentru a fi sincer, nu-mi amintesc ce este :) Am acum trei ani, cu exemplul funcției de luat pentru a transfera la temperatura și dosihpor-l utilizați.

Probabil ar trebui să afle înainte de a copia ceva de undeva 😉
Partea fracționară a traducerii nu este corectă, asigurați-vă că acest lucru este foarte simplu - rula programul și încet se încălzească sau să se răcească la senzorul de 1-2 ° C. Temperatura se va schimba în trepte de 0,05, cu toate acestea, atunci când valoarea, spun 22.75 pentru a citi valoarea este deja 23.00 (la temperaturi mai mari) este coborâtă, după 23.00 22.75 va urma.

Pasul temperatură DS18B20 citire în modul de 12 biți (implicit) este 0,0625 în loc de 0,05, deci diferența. Doar în mod incorect o parte fracționară va fi afișată și la temperaturi negative. Pur și simplu pune, algoritmul este aplicat în firmware-ul microcontrolerului la senzori DS18B20 nu sunt adecvate.

În opinia mea, în valoarea temperaturii de transformare de către regulatorul (în funcție de therm_read_temperature) nu are sens. O astfel de transformare ar avea sens dacă există un indicator la nivelul dispozitivului, dar acest dispozitiv nu este prevăzut pentru indicatorul, iar conversia poate rula bine programul pe computer.

Salutări. Posibila versiune a termometrului sub dispozitiv USB ascuns. Înțeleg că va fi doar un alt firmware? dispozitivele conectate versiunea 2 s-au adunat (4.7K pe picioare 2 și 3 microni), restul nu doresc să lucreze. Același lucru cu firmware-ul. Dispozitivul este determinat, programul funcționează numai pentru a fi incluse \ canalele dezactiva. Senzorii înșiși nu sunt vizibile. De ce poate fi aceasta?

Pentru HID nu a fost încă făcută. Dacă nu câștig etapă prin conectarea unui rezistor 2 și 3 picioare, cel mai bine este de a pune un rezistor 2,2K. În acest caz, media senzorii picior trebuie să fie conectat la două picioare MC.
Dacă totul merge bine, dar senzorul nu este vizibil, atunci, evident, nu sunt 1 fire korektno funcționează.

Aproximativ Am rezyuk la 4.7K conectează microni picioare (observate în alte scheme de 4.7K la + 5V). Voi încerca să 2.2K. Voi aștepta pentru versiunea HID (software-ul sub Delfi doriți să faceți). Vă mulțumim!

Prin modul în care la urne LED-abia aprins și nu mai clipește în ambele versiuni ale firmware-ului pentru un motiv oarecare ...

Bine ai venit Kibermaster. Dorim să vă conectați dispozitivul la afișajul, iar tensiunea de alimentare a sursei de alimentare (auto-a făcut), pe care intensitatea curentului necesar pentru a calcula bloc? Și asigurați-vă că am nevoie de un regulator de tensiune pe ea (ca nu va fi încălzit fără ea)?

0.5A maximă.
Stabilizatorul nu este necesară în cazul în care tensiunea de alimentare 4,5-5,5V dacă este mai bine, a pus stabilizator. Pentru a nu se încălzește, folosind puls, în loc de un liniar

O nevoie puternică de a schimba schema pentru a coase prin ISP, fără bootloader, și cu întreaga funcționalitate este păstrată? Este suficient pentru a arunca pur și simplu partea în care conectorul cu 5 pini și un jumper, și labe MOSI, MISO, SCK, RESET, GND, Vcc connect ISP?

nu este necesar să se schimbe nimic, trebuie doar să conectați programator la aceste labe și coase, jumper-ul nu va interfera

Buna ziua! Vreau să întreb, și ce curentul și tensiunea trebuie să fie la temperatura de ieșire senzor de DQ? Și cât de mult puterea ar trebui să fie un rezistor 4.7KOm?

probabil, de tensiune 4 volți, curentul nu știe, nu este luată în considerare. Rezistor într-o carcasă 1206 suficient

Scuze pentru insistența, conform schemei 6 pini 1 din țara lor. suficient pentru a conecta senzor suplimentar conectat la una dintre cele 5 dq (data) și celelalte două picioare ale senzorului la sol. Bine?

da, într-adevăr, confuz versiune a dispozitivului. Tot ce am scris mai sus se referă la USB-termometru mai multe canale (versiune avansată).

un senzor de contact avansat și ieșirile conectate la blocul de borne (unde în această versiune pinii) și știfturilor de contact sunt plasate pe intrările

Bună ziua, eu nu știu ce să fac. Scanează toate. Dar încă urcă dispozitiv USB nerecunoscut. Am fost doar pe controlerul de linie înhămat fără probleme, încă nu funcționează. Păcatul pe programator, usbasp programat prin sinaprog, cusute de la începutul programului principal, apoi Fyuz, totul pare OK, dar atunci nimic nu funcționează. Am uitat să scrie că LED-ul nu se aprinde, nici măcar nu clipi. Care ar putea fi problema?

este necesar să se lumineze intermitent bootloader și Fyuz. Ecran de afișare Fyuz

Bună ziua, toată lumea a adunat schema funcționează bine, și vă rugăm să-mi spuneți despre Delphi fapt scrie software-ul pentru acest dispozitiv?