Jste zde

Teploměr s SMT 160 pro USB

Nedávno jsem si potřeboval nějakým způsobem odzkoušet programy pro mikropočítače řady 8051. Nejprve jsem experimentoval s převodníky USB na UART, později jsem si pořídil také teplotní čidlo SMT160 (převodník teploty na střídu).

Teplomer-pro-USB1-250.jpgToto čidlo se posléze ukázalo jako méně vhodné – při čtení stavu je nutné využít oba čítače/ časovače k měření střídy. V současné době pracuji na programu pro komunikaci 1-Wire (Dallas), zejména pro snímání teploty z teplotního čidla DS1820. Není nutné využít ani jeden čítač/časovač, v kombinaci s vnitřní pamětí mikropočítače by bylo možné vytvořit teploměr, který většinu času snímá teplotu samostatně bez počítače PC. Po zapnutí se připojí k PC (například pomocí Bluetooth k počítači a zde uloží poslední teploty k dalšímu zpracování).

Výhody:

  • Komunikace s PC pomocí USB (vhodné pro notebooky)
  • Napájení z PC
  • Jednoduchá změna programu – mikropočítač AT89C51ED2
  • Je možné využít také jako odlaďovací kit
  • Možnost řízení krokových motorů

Teplomer-pro-USB-obr3.jpgKomunikaci s počítačem obstarává převodník FT232BL, po připojení a nainstalování ovladačů dojde k vytvoření virtuálního sériového portu (je možné s ním pracovat jako se standardním sériovým portem). Převodník má také integrován stabilizátor napětí – možno připojit obvod nRF905 pro 3V (jádro 8051 s VF vysílačem). K procesoru je také připojeno pole darlinktonových tranzistorů (primárně určeno ke spínání cívek dvou krokových motorků). Na konektoru K4 je vyveden port P0, ten je možné využít například pro komunikaci s LCD displejem nebo k zhotovení logického analyzátoru. Na konektor K2 jsou vyvedeny vstupy multiplexeru 74HC151 – zde je možné připojit jakákoli čidla, program vždy vybere požadovaný kanál. Na JP1 je vyveden vývod PSEN procesoru, pokud je tento vývod po resetu v L, tak se procesor přepne do programovacího módu (stačí spustit program Atmel Flip a vybrat příslušný port). Na K3 je vyvedeno sériové rozhraní SPI, je možné využít ke komunikaci s dalšími čidly.

Mechanická konstrukce

Zapojení je realizováno na jednostranné desce plošných spojů, bylo nutné použít několik SMD propojek (rezistor s hodnotou 000). Všechny rezistory jsou velikosti 805. DPS byla vytvořena „po domácku“ fotocestou. Mikropočítač AT89C51ED2 v provedení TQFP44 nebylo snadné sehnat – nakonec jsem si ho objednal od HW.cz.

Teplomer-pro-USB-schema-500.png
 

Program

Programy jsem psal ve Visual Basicu a v Contorol Webu 2000. V Control Webu je možnost výborného grafického znázornění a prezentace na webovém serveru. Naopak vývojová verze Control Webu je docela drahá (pro studenta) a v demo verzi není možné přidat ovladač sériového kanálu.

Teplomer-pro-USB-obr1-250.png
Obrázek HTML stánky – první verze – teplotní průběh 25.9.2006

Popis komunikace mikropočítače s PC

128180055040001

Příklad jednoho datového paketu, nejprve jsou odeslány tři bajty – vyšší byte TP, dále následuje nižší byte TP. Pro hodnotu TS je to stejné, dále následují tři byte – číslo kanálu.

Teplomer-pro-USB-obr2.png
 

Poté stačí převést řetězec na číslo:
tp=val(slice( data_in,12,3),10);
 
a nyní je možné vypočíst teplotu a uložit do pole teplota (mpx – číslo kanálu):
teplota[mpx] = (10000 * (tp-ts) / tp - 3200) / 47;
 
Obslužný program si může každý dopsat sám, pro otestování jsem napsal jednoduchý program - k dispozici ke stažení pod článkem.

Závěr

Teplomer-pro-USB2-250.jpg Pomocí tohoto zapojení je možné realizovat více zajímavých aplikací, nejen teploměr. Bylo by možné ho připojit do počítače a v kognaci s LCD displejem může informovat o okamžitých teplotách přímo na LCD nebo pomocí programu v PC. Do budoucna také uvažuji o úpravě zapojení resetu 8051, je poněkud neelegantní při každé úpravě programu zařízení odpojovat od USB. Někdy také dochází k „zamrznutí“ programu FLIP.

Uvítám případné připomínky a vylepšení.

Seznam součástek

R1 2,2kΩ
R2 10kΩ
R3, R4 27Ω
R5 470Ω
R6 1,5kΩ
R7, R8 220Ω
R9, R10 1kΩ
RR1 rezist. sit 9pin 10kΩ
C1, C2 27pF
C3 10nF
C4 33nF
C6 10µF/16V
C7, C8 33pF
C9
C5, C10, C11 100nF
C12
IC1 FT232BL
IC2 93C46
IC3 AT89S52-AU
IC4 ULN2803A
IC5 74HC151
Hodnocení článku: 

Komentáře

Přiznám se, že obdivuji konstruktéry, kteří jsou schopni popsat konstrukci pro širší veřejnost. Nicméně, neodpustím si několik připomínek:
1. Schéma bych označil za nešťastné a přirovnal bych ho ke schématu elektroninstalace vozidel LADA. Spoje vedené přes součástky prostě nepovažuji za vhodné.
2. Dovolil bych si polemizovat o "méně vhodném čidlu" z důvodů nutnosti použití dvou čítačů/časovačů. Po zběžném nahlédnutí do DS AT89C51ED2 bych osobně pro danou aplikaci volil použití modulu PCA.
3. Co se týká zapojení resetu, doporučoval bych inspirovat se zapojením http://hw.cz/pdf/kity/lpc-p2129-sch.gif , jen nevím, nakolik bude odpora ATMEL FLIPu.

"Spoje vedené přes součástky", pokud myslíte použití propojek (R0805 0R 5% GME), těchto bylo použito z důvodu špatné výroby dvouvrstvých plošných spojů. Vzhledem k tomu, že patřím k mladší generaci LADU už nepamatuji. Problém s resetem už řeším, bude se jednat o resetovací tlačítko nebo resetování například pomocí sériové linky.

Kolega nejpíš myslel spoj ve schématu vedený přes značku součástky. To se nedělá. Drátové propojky nebo SMD můstky jsou v pohodě. Jinak pro přehlednost schématu není špatné použít ekvipotenciální značky
(např. ---->Vcc), blokovací kondenzátory napájení IO odděleně od vlastního schématu, všechny pěkně vedle sebe spolu s napájecími piny jednotlivých IO. Spousta vodičů přes sebe značně znepřehlední schéma.

Ak mi posles e-mailovu adresu, zaslem Ti utility na display v c, (mozno sa nieco najde aj per ten dallas....) usetris kopy casu.....
Su v uc51 (do 8k kodu je free, super...)
Vlastne rozmyslam ze ich hodim na weba, nech je z nich osoh....

Zapojeni pomerne slozite a ne moc originalni. Co treba pouzit AVR procesor pro softwarovou obsluhu USB a soucane mereni teploty? Od doby, kdy Atmel vydal aplikacni poznamku popisujici sw implementaci low-speed USB protokolu vzniklo jiz nekolik peknych hracek, treba tady je prevodnik USB/I2C:
http://www.harbaum.org/till/i2c_tiny_usb/index.shtml

Tady pak USB/LCD:
http://www.harbaum.org/till/lcd2usb/index.shtml

Pokud by existoval prevodnik USB/1-wire, slo by na USB povesit teplomeru hned nekolik (DS18B20, atd).

Take by byla zajimava konstrukce vyuzivajici procesor s vestavenou podporou pro USB, treba Atmel AT90USB82 anebo AT89C5131A-M. Tyto se ale v CZ zrejeme spatne shaneji.

Tento převodník byl pužit pro možnost snadné úpravy programu, hardware je možné používat k testování dalších programů. Celá konstrukce je navrhovaná jako kompletní řešení - několik tepl. čidel a ovládání natočení webkamery.

Nenarazil si niekde na "free" priamu sw implementaciu USB na 51 ?

SW implementace USB je narocna na vykon MCU a bezny CPU z rady x51 nebude dostatecne vykonny. Low-speed zarizeni vysila data rychlosti 1.5Mbps, MCU musi data na teto rychlosti vzorkovat, pripadne vysilat. AVR to dokaze, protoze ma pri 12MHz cca 8 taktu na zpracovani jednoho bitu z USB sbernice. Klasicka x51 nema sanci, protoze ta pri 12MHz krystalu stihne vykonat jednu instrukci. Pokud pouzijete lepsi x51, ktera stihne jednu instrukci za 6 cyklu, tak je to porad malo i kdyz pouzijete vyssi frekvenci oscilatoru. Mozna ze by sla SW USB udelat na "single-cycle" klonech x51, treba AT89LP4052. Ma ale nejaky vyznam krecovite se drzet x51?

Mrknete na aplikacni poznamku AVR309 (www.atmel.com), pekne popisuje princip SW implementace USB na AVR procesorech.

Velmi zajimave cteni, dokonce po slovensky, je zde:

http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR).htm

Ze by SW implementace USB v AVR mela koreny na Slovensku? Skoro to tak vypada... Autor take uvadi zajimavou informaci, ze PIC procesor by prilis pomaly a nepovedlo se mu najit reseni (PIC potrebuje 4 takty na instrukci). To by ale znamenalo, ze muze byt problem i s resenim pro x51, protoze i "single-core" procesor potrebuje na nektere instrukce vice cyklu; zjednodusene lze rict, ze jedna instrukce potrebuje 1-4 cykly" a to uz muze byt problem...

Skutocne excelentny zdroj informacii. Kto chce zacat s USB / HW, urcite by to mal brat ako studnu informacii. Obe odkazy.