prvi koraki v merjenje in krmiljenje s pomo jo usb … · monitoring and control of it's data...

74
UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA PROGRAM: MATEMATIKA – TEHNIKA PRVI KORAKI V MERJENJE IN KRMILJENJE S POMOJO USB VODILA DIPLOMSKO DELO Mentor: Kandidat: prof. dr. Slavko Kocijani Aleš Volini Ljubljana, september 2006

Upload: others

Post on 26-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA PROGRAM: MATEMATIKA – TEHNIKA

PRVI KORAKI V MERJENJE IN KRMILJENJE

S POMOJO USB VODILA

DIPLOMSKO DELO Mentor: Kandidat: prof. dr. Slavko Kocijani Aleš Volini

Ljubljana, september 2006

Page 2: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Povzetek V diplomski nalogi ugotavljamo, kakšne komunikacije (standari, vodila, vmesniki in protokoli)

med elektronskimi vezji (še posebno osebnim raunalnikom in zunanjimi napravami) so se v

veini uporabljale do sedaj in zakaj se nekatere najpopularnejše izvedbe umikajo novim, še

posebej vodilu USB. Pobliže si ogledamo nekatere naine komikacij, za kakšen namen so bile

razvite ter uporabljane in kako je bilo mogoe uporabljati nekatere od njih v izvedbah

komunikacijskih protokolih, za katere niso bili niti predvideni niti nartovani.

S prihodom USB vodila v široko uporabo so poasi nekateri standardi umikati in izumirati. Za

njimi je ostalo kup programske in strojne opreme, ki bi prav lahko ostala nepodprta in odvena.

Kakšne rešitve tega problema obstajajo?

Zanima nas primernost rešitve, ki jo ponuja podjetje FTDI v obliki integriranega vezja FT245BM

oz. aplikacijo tega vezja na modulu za prototipiranje DLP–245M. Ugotovimo, da je vezje

primerno za naš namen, še posebej, ker ponuja t.i. bit-bang nain delovanja, s katerim lahko

neposredno krmilimo in opazujemo stanja na podatkovnem vodilu modula. Nato si zastavimo

nalogo predstaviti nekaj primerov, kako uporabljati novo USB vodilo. V tej lui prikažemo prim

vsakem primeru namen, vezavo in program in komentiramo delovanje ter možne izboljšave. Pri

tem želimo bralcu dati tudi navdih, da sam poiše možne izboljšave ali pa se iz primera naui,

kako se doloen rezultat doseže in izdela svojo rešitev. Obravnavamo primer iskanja FTDI

vmesnikom ter njihovega odpiranja in zapiranja, primer krmiljenja osmih svetleih diod, primer

funkcijskega generatorja s spremenljivo resolucijo vzorenja, oblike signala in frekvence, primer

krmiljenja svetleih diod s stikali, vsemi prikljuenimi na modul DLP–245M, primer SPI

komunikacije z AVR mikrokrmilnikom kot primer emulacije protokola in izvedbe ISP naina

programiranja, primer terminalske povezave med osebnim raunalnikom in mikrokrmilnikom

AVR preko vodila USB.

Konno v nalogi ugotovimo, da se je FTDIjev FT–245BM v svoji vlogi izkazal celo bolj, kot smo

priakovali, in da za najosnovnejšo uporabo zraven mikrokrmilnika niti ne potrebujemo. Z njim

namre lahko v celoti nadomestimo vmesnika Centronics in RS–232, še posebno, ko gre za

aplikacije izven njune namenske uporabe.

Kljune besede:

univerzalno serijsko vodilo, USB v šolskem laboratoriju, primeri uporabe USB, DLP–245M, FT–245BM

Page 3: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

FIRST STEPS INTO MEASUREMENT AND CONTROL VIA UNIVERSAL SERIAL BUS

Abstract In this diploma we discuss ways of communication (standards, buses, interfaces and protocols)

between electronic circuits (especially between personal computers and their peripheral

devices), that were widely used till present day and why are some of most popular of them

becoming obsolete, making space for incoming USB and other standards. We take a closer look

at some of them, purposes that they were designed and used for and how it was possible to use

them for communication via protocols and standards they were never neither meant nor

designed for.

With USB applications spreading widely into electronic communication, some older standards

are becoming obsolete and their extinction is inevitable. Their disappearance will leave behind a

lot of software and hardware equipment, which could easily become obsolete and useless too.

Is there a way to overcome this problem?

We are intrigued by solution, presented by company FTDI, in a form of intergrated circuit

bearing mark FT–245BM and a related application in form of prototyping module named DLP-

245M. After a closer look we make a conclusion, that this circuit is appropriate for our needs,

especially since it offers a so called bit-bang mode of operation, which can be used for direct

monitoring and control of it's data bus pins We take a task to present some examples, how to

use this new USB piece of hardware. Taking this task, we document purpose of each example,

wiring and a computer program and take a closer look at it's operation and possible

improvements. With this approach we try to inspire readers with improvement ideas and try to

make them learn from example and start their own project from scracth. We present an example

of identifying FTDI USB devices, an example of how to control LEDs, an example of function

generator with varying sampling resolution, frequency and shape of a signal, an example of

controlling 4 LEDs via 4 switches, each of them attached to data bus of the DLP module, an

example of communication with Atmel's line of microcontrollers using SPI protocol, making in-

system programming via USB a real possibility and, finally, an example of communication

between AVR device and personal computer using USB.

At last we make a conclusion, that FTDI's integrated circuit FT–245BM did meet and even

exceeded our expectations. This integrated circuit is suitable to carry on tasks, carried by

Centronics and RS–232 interfaces, especially when it comes to applications outside their

primary purpose and design.

Keywords:

universal serial bus, USB, USB by example, USB in school labs, DLP–245M, FT–245BM

Page 4: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 4

Kazalo vsebine 1. UVOD............................................................................................................................................................ 6 2. VMESNIKI, VODILA IN PROTOKOLI .................................................................................................. 9

2.1 VMESNIK IEEE1284 (»CENTRONICS«).................................................................................................. 9 2.2 VMESNIK RS232C .............................................................................................................................. 10 2.3 SPI ...................................................................................................................................................... 11 2.4 I2C...................................................................................................................................................... 13 2.5 UNIVERZALNO SERIJSKO VODILO – USB............................................................................................. 14 2.6 DRUGA VODILA IN PROTOKOLI ............................................................................................................ 16 2.7 PRIMERJAVA MED SPLOŠNO RAZŠIRJENIMI PROTOKOLI ....................................................................... 17

3. PRVI KORAKI V MERJENJE IN KRMILJENJE S POMOJO USB .............................................. 18 3.1 VEZJA, KI OMOGOAJO POVEZAVO MED CILJNIM VEZJEM IN USB....................................................... 18

3.1.1 Integrirano vezje FTDI-245BM ......................................................................................................................18 3.1.2 Modul DLP-245M...........................................................................................................................................23

3.2 PRIPRAVE ............................................................................................................................................ 25 3.2.1 Gonilniki .........................................................................................................................................................26

3.3 PROGRAM MPROG .............................................................................................................................. 27 3.4 MODUL FTD2XX.PAS......................................................................................................................... 28

3.4.1 FT_Open.........................................................................................................................................................29 3.4.2 FT_Close ........................................................................................................................................................30 3.4.3 FT_Purge........................................................................................................................................................30 3.4.4 FT_Read .........................................................................................................................................................31 3.4.5 FT_Write.........................................................................................................................................................32 3.4.6 FT_SetBitMode...............................................................................................................................................33 3.4.7 FT_GetBitMode ..............................................................................................................................................34 3.4.8 FT_SetBaudRate.............................................................................................................................................35

4. PRIMERI UPORABE MODULA DLP-245M ........................................................................................ 36 4.1 PRIMER 1: ENUMERACIJA, ODPIRANJE IN ZAPIRANJE USB NAPRAV..................................................... 36

4.1.1 Vezava ............................................................................................................................................................36 4.1.2 Program..........................................................................................................................................................37 4.1.3 Delovanje in komentar....................................................................................................................................38

4.2 PRIMER 2: BIT-BANG NAIN ................................................................................................................ 38 4.2.1 Vezava: ...........................................................................................................................................................39 4.2.2 Program..........................................................................................................................................................40 4.2.3 Delovanje in komentar....................................................................................................................................41

4.3 PRIMER 3: FUNKCIJSKI GENERATOR SINUSNE, TRIKOTNE IN PRAVOKOTNE NAPETOSTI........................ 41 4.3.1 Vezava ............................................................................................................................................................42 4.3.2 Program..........................................................................................................................................................42 4.3.3 Delovanje in komentar....................................................................................................................................44

4.4 PRIMER 4: UPRAVLJANJE SVETLEIH DIOD S STIKALI .......................................................................... 46 4.4.1 Vezava ............................................................................................................................................................46 4.4.2 Program..........................................................................................................................................................47 4.4.3 Delovanje in komentar: ..................................................................................................................................48

4.5 PRIMER 5: AVR ISP S POMOJO SPI IN UPORABO BIT-BANG NAINA.................................................. 49 4.5.1 Vezava ............................................................................................................................................................49 4.5.2 Program..........................................................................................................................................................50 4.5.3 Delovanje in komentar....................................................................................................................................52

4.6 PRIMER 6: KOMUNIKACIJA OSEBNI RAUNALNIK – MIKROKRMILNIK PREKO USB .............................. 54 4.6.1 Vezava ............................................................................................................................................................54 4.6.2 Program za osebni raunalnik........................................................................................................................56 4.6.3 Delovanje in komentar programa za osebni raunalnik .................................................................................57 4.6.4 Program za mikrokrmilnik AVR ATMega16 ...................................................................................................59 4.6.5 Delovanje in komentar programa za mikrokrmilnik AVR ATMega16 ............................................................63

5. ZAKLJUEK............................................................................................................................................. 67 PRILOGA 1: IZPIS MODULA FTD2XX.PAS ................................................................................................ 68 PRILOGA 2: SHEMA DLP–245M.................................................................................................................... 71 PRILOGA 3: CD–ROM...................................................................................................................................... 72 VIRI IN LITERATURA ..................................................................................................................................... 73

Page 5: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 5

Kazalo slik Slika 2.1: Shema protokola SPI............................................................................................................................. 12 Slika 2.2: Primer prenosa podatkov po I2C vodilu................................................................................................ 13 Slika 2.3: Simbol USB vodila ............................................................................................................................... 14 Slika 3.1: Fizini in shematski razpored pinov FTDI 245BM............................................................................... 20 Slika 3.2: Razlina pogleda na modul DLP-245M (vir: DLP design, [2]) ............................................................ 23 Slika 3.3: Okno programa MProg.......................................................................................................................... 27 Slika 4.1: Shema vezja primera 1 .......................................................................................................................... 37 Slika 4.2: Okno primera 1 ..................................................................................................................................... 38 Slika 4.3: Shema vezja primera 2 .......................................................................................................................... 39 Slika 4.4: Okno primera 2 ..................................................................................................................................... 41 Slika 4.5: Shema vezja primera 3 .......................................................................................................................... 42 Slika 4.6: Okno primera 3 ..................................................................................................................................... 44 Slika 4.7: Shema vezave primera 4 ....................................................................................................................... 47 Slika 4.8: Okno primera 4 ..................................................................................................................................... 48 Slika 4.9: Shema vezave primera 5 ....................................................................................................................... 50 Slika 4.10: Okno primera 5 ................................................................................................................................... 53 Slika 4.11: Shema vezave primera 6 ..................................................................................................................... 55 Slika 4.12: Okno primera 6 ................................................................................................................................... 58 Slika 4.13: bralni cikel (vir: FTDI, [1]) ................................................................................................................. 64 Slika 4.14: pisalni cikel (vir: FTDI, [1])................................................................................................................ 65

Kazalo tabel Tabela 2.1: Signali vodila SPI ............................................................................................................................... 12 Tabela 2.2: Primerjava protokolov v široki uporabi .............................................................................................. 17

Page 6: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 6

1. Uvod Z razvojem raunalnikov in potrebe po vse hitrejši komunikaciji med napravami sodobne

informacijske tehnologije poasi zamirajo standardi in tehnologije prenosa podatkov, ki so se

uporabljale ve kot 25 let. Da so se obržale toliko asa, lahko pripišemo sprva enostavnosti

uporabe, kasneje pa predvsem njihovi zakoreninjenosti v vse veje sodobne elektronike in

raunalniške tehnologije. V teh letih so elektroniki za svoje potrebe (pa tudi komercialne

rešitve) obstojee vmesnike za prenos podatkov uporabili v namene, za katere niso bili niti

konstruirani niti predvideni. Tako so se za hobi pa tudi resno elektroniko s hitritvijo

procesiranja signalov pojavili programi, ki neposredno berejo in spreminjajo stanja na

digitalnih vhodih in izhodih vmesnikov. Z neposrednim upravljanjem le-teh lahko programsko

emulirajo praktino vse druge (primerno poasne) protokole za prenos podatkov. Tako

naletimo na programe, ki preko standardnega vmesnika RS232 za serijski prenos podatkov

(klasini COM prikljuek na osebnem raunalniku) s signali neposredno krmilijo razna

elektronska vezja, ki komunicirajo po isto tretjih standardih (npr. I2C ali SPI). Cilj take

uporabe je predvsem izkoristiti obstojeo (in poceni) strojno opremo (raunalnik) v tehnine

namene, ki sicer zahtevajo specializirano visokotehnološko opremo (programatorje,

krmilnike, merilnike, osciloskope itd).

Z zamiranjem starih tehnologij in prihodom novih (USB, Bluetooth, IEEE1394, SATA) veliko

teh poceni rešitev ne bo ve uporabnih. S ciljem poenostavitve prehoda na USB tehnologijo

so nekatera podjetja razvila specializirana integrirana vezja in svojim uporabnikom dala v

uporabo spremljajoo programsko opremo, najdejo pa se tudi že prvi – na navadnih

mikrokrmilnikih programsko implementirani – USB vmesniki s spremljajoimi gonilniki za PC

raunalnike.

Namen diplomske naloge je v prvi vrsti nepoznavalcem USB tehnologije predstaviti nekaj

možnih nainov, kako slednjo vpeljati v obstojee in nove elektronske aplikacije ter se s tem

izogniti problemom, ki jih prinaša opušanje starih COM in LPT vmesnikov v novih

raunalnikih. Pri tem se bomo osredotoali na konkretne možnosti uporabe v šolskem

laboratoriju.

Za boljše razumevanje je zaželeno (vendar ne nujno), da bralec pozna naslednja

programska okolja in tehnike:

• programiranje v programskem jeziku Delphi

• osnove programiranja v programskem jeziku C

• osnove (digitalne) elektronike

Page 7: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 7

Izrazi in okrajšave Pri izrazoslovju, ki se nanaša na prenos podatkov, je vasih težko biti nedvoumen. V literaturi

in na internetu velikokrat naletimo na isti izraz uporabljen v ve pomenih, ti pa se med seboj

za nameek niti ne izkljuujejo vedno. Za boljše razumevanje napisanega bomo najprej

opredelili nekaj najpomembnejših izrazov, okrajšav in pomenov, kot jih bomo uporabljali v

nadaljevanju:

asinhroni prenos: prenos podatkov brez pomoi urinega signala; v enakem asu se pretoi

razlina koliina podatkov

Centronics vmesnik: paralelni vmesnik za prenos podatkov med osebnim raunalnikom in

tiskalnikom

EPP: Enhanced Parallel Port – izboljšan Centronics vmesnik (dvosmerna komunikacija)

ECP: Extended Capability Port – izboljšan Centronics vmesnik z možnostjo direktnega

(DMA) dostopanja do podatkov, brez intervencije procesorja

FIFO vmesni pomnilnik: vmesni pomnilnik tipa »prvi noter, prvi ven (tudi PNPV)«, v

besedilu bomo zaradi precejšnje navezave na tujo literaturo uporabljali angleške okrajšave,

torej tudi FIFO.

ISP: In-System Programming, nain programiranja mikrokrmilnikov, pri katerem

mikrokrmilnika ni potrebno izloiti iz matinega vezja, temve ga lahko preprogramiramo tudi,

ko je dokonno vgrajen na v izdelek (odtod In-System),

I2C: Inter-Integrated Circuit je protokol, namenjen komunikaciji med razlinimi integriranimi

vezji na isti elektronski ploši, izdelek podjetja Philips,

IEEE1284: standard, ki ureja prenos podatkov po »Centronics« vmesniku

protokol: pravila izmenjave podatkov; pri tem odmislimo fizikalne karakteristike take

izmenjave (npr. TCP/IP), protokoli so lahko zasebni ali standardizirani

RS232: skupina standardov za serijski prenos podatkov, prvenstveno namenjeno delu

terminalov z vejimi raunalniki (mainframe)

sinhroni prenos: prenos podatkov, ki se odvija ob pomoi urinega signala; v enakem asu

se pretoi enaka koliina podatkov,

SPI: Serial Protocol Interface, vmesnik za serijski protokol, izdelek podjetja Motorola,

standard: predpis pooblašene organizacije (de iure standard) ali splošno uveljavljen

predpis (de facto standard), ki doloa tako protokol kot tudi fizine karakteristike vmesnikov,

preko katerih se odvija prenos podatkov (npr. RS232C),

Page 8: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 8

UART: Universal Asynchronous Receiver Transmitter, univerzalni asinhroni

oddajnik/sprejemnik, igar podlaga je protokol RS232, vendar uporablja za prenos samo tri

žice: RX, TX in GND.

USB: univerzalno serijsko vodilo (Universal Serial Bus),

VCP: navidezni serijski vmesnik (Virtual COM Port) je navidezni vmesnik, ki ga operacijski

sistem naslavlja in upravlja kot pravo serijsko napravo,

vodilo: medij za prenos podatkov, na katerega lahko hkrati prikljuimo tri ali ve elektronskih

naprav, ki vse delujejo po doloenem standardu (npr. USB vodilo),

vmesnik: vmesno elektronsko vezje, namenjeno izmenjavi podatkov med dvema razlinima

elektronskima napravama, za vmesnike so predpisani natanno doloeni fizini prikljuki na

napravah in njihova vloga (npr. COM vmesnik za serijski prenos podatkov).

Page 9: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 9

2. Vmesniki, vodila in protokoli Vsaka tehnina rešitev, ki je dovolj dolgo reševala nek problem, postane vir glavobolov tisti

trenutek, ko ne zadostuje zahtevam razvoja, obenem pa je ne moremo opustiti zaradi

združljivosti. Poglejmo paradoks klasinih 3.5" disket: njihova kapaciteta ne zadostuje

potrebam že ve kot 10 let, pa vendar disketne enote ponekod še danes vgrajujejo v nove

osebne raunalnike in to celo v takih raunalniških podjetjih, ki disket že leta nimajo ve v

prodajnem programu. Razlog za tako dogajanje je seveda tehnina inercija: ker so (bile)

diskete zelo razširjene in obenem edini obnovljiv nain prenosa podatkov z raunalnika na

raunalnik, ljudem na kraj pameti ni prišlo, da bi kupili raunalnik brez disketne enote. Šele

prihod flash pomnilnikov na obeskih s prikljukom na USB (t.i USB kljuev) in razvoj

širokopasovne internetne infrastrukture sta omogoila disketni enoti težko priakovano in

zasluženo upokojitev.

Pri komunikaciji raunalnika z zunanjimi napravami prihaja do podobne situacije: vmesnika

Centronics (LPT vmesnik) in RS232C (COM vmesnik) poasi, a zanesljivo zamirata. Edini

razlog, da še nista povsem opušena, je množica pisarniške, industrijske in laboratorijske

opreme, ki se bodisi zaradi visokih nakupnih stroškov ne amortizira tako hitro kot raunalniki

bodisi se je zaradi specializiranosti ne da preprosto nadomestiti.

V tem poglavju bomo obravnavali nekatere najbolj razširjene naine komuniciranja med

elektronskimi napravami. Pri tem mislimo tako na naprave, ki jih lahko med seboj fizino

loimo (npr. raunalnik in tiskalnik), kot tudi na tiste, ki jih ne moremo (dva ali ve ipov na

istem elektronskem vezju).

2.1 Vmesnik IEEE1284 (»Centronics«) Vmesnik IEEE1284 poznamo kot LPT ali Centronics vmesnik v raunalniku. Je vmesnik za

paralelni prenos podatkov, prvenstveno namenjen prenosu podatkov na tiskalnik, uporablja

pa se tudi v druge namene. Standard IEEE1284 je do sedaj doživel štiri dopolnitve, od

katerih pa ena ni bila sprejeta.

Vmesnik je prvotno za svoje stranke razvilo podjetje Centronics Data Computer Corporation,

ki se je ukvarjalo z izdelavo tiskalnikov. Pri tem je za povezavo na tiskalniški strani kablov

uporabilo 36-pinski prikljuek podjetja Amphenol, ki se ga je zaradi razširjenosti v javnosti

prijelo kar ime Centronics prikljuek. Na drugi strani kabla so se uporabljali razlini prikljuki

vse do leta 1980, ko je podjetje IBM na svojem novem osebnem raunalniku IBM PC

uporabilo prikljuek tipa DB25F. Tako je nastal t.i. Centronics kabel za prikljuitev tiskalnika

na osebni raunalnik, ki ima standardno na eni strani 36-pinski Centronics, na drugi pa

DB25M prikljuek.

Z rastoim trgom osebnih raunalnikov je vmesnik Centronics postal de-facto standard in kot

tak ostal do leta 1992, ko ga je podjetje HP nadgradilo za dvosmerni prenos. Nov vmesnik so

Page 10: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 10

poimenovali bitronics, beseda naj bi izražala predhodnika (Centronics) in dvosmerno

komunikacijo (bi). S to nadgradnjo pa je postalo oitno, da je potrebno vmesnik tudi formalno

standardizirati. To se je zgodilo marca leta 1994, ko je bil sprejet standard IEEE1284, ta pa

je kasneje doživel še nekaj dopolnitev.

IEEE1284 lahko deluje v enem od petih nainov:

• združljivostni nain, poimenovan tudi Centronics, standardni ali SPP nain. V tem

nainu se uporablja malenkostno spremenjen originalni Centronics standard za

enosmerni prenos podatkov proti periferni napravi,

• bitronics nain; v tem nainu se podatki po osembitnem podatkovnem vodilu še

vedno pošiljajo samo v eni smeri, za povratno smer pa služijo štiri linije, ki so bile

prvotno namenjene zgolj ugotavljanju stanja na tiskalniku (od tod za nain tudi ime

»nibble«, ki pomeni štiri bite),

• zlogovni (byte) nain, omogoa prenos podatkov po podatkovnem vodilu v obe smeri,

• EPP1 nain; razvit je bil predvsem za prenos velike koliine podatkov s periferne

enote k gostitelju ob ohranjanju združljivosti s prejšnjimi naini.

• ECP2 nain; prenos podatkov poteka po ECP protokolu, ki lahko uporablja RLE

tehniko stiskanja toka podatkov proti gostitelju, ima vmesna FIFO pomnilnika za

pretok podatkov v obe smeri ter podpira tako PIO kot tudi DMA nain prenosa

podatkov.

2.2 Vmesnik RS232C RS232 je poznan tudi pod bolj uradno oznako TIA/EIA-232-F in je v današnjem asu zelo

razširjena oblika prenosa podatkov, uporabljena v širokem razponu raunalniških naprav.

RS232 je kompleten standard, ki vkljuuje ne zgolj podatkovnih karakteristik, temve tudi

fizine in mehanske, kot so vrste prikljukov, razporedi pinov na prikljukih, imena signalov

itd.

RS232 je primeren za prenos podatkov pri hitrostih do 19200 bit/s. eprav v specifikacijah ni

posebej zagotovljeno, so možne tudi hitrosti do 115 Kbit/s in ve, e je le razdalja dovolj

kratka in je zagotovljena dobra ozemljitev. Obiajne dolžine kabla so okoli 3m, z izbiro kabla

z nizko kapacitanco pa lahko dosežemo razdalje do 65m.

V današnjih osebnih raunalnikih se vmesnik RS232 uporablja za komunikacijo z

raunalniškimi zunanjimi enotami, kot so npr. blagajniški tiskalniki in zunanji raunalniški

modemi ali pa s povsem samostojnimi napravami, kot so mobilni telefoni ali elektronska

merilna oprema. Na raunalnikih so prikljuki oznaeni s kratico COM in zaporedno številno

1 okr. za Enhanced Parallel Port, izboljšana paralelna vrata 2 okr. za Extended Capability Port, vrata z dodatnimi možnostmi

Page 11: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 11

oznako (COM1, COM2, itd.). Zaradi enostavnosti programiranja in združljivosti obstojee

tako programske kot tudi strojne opreme raunalniški gonilniki naprav protokol RS232

pogosto emulirajo, saj je vmesnik izveden okoli UART ali kompatibilnega integriranega vezja.

Ker se ostali signali, potrebni za komunikacijo po protokolu RS232C upravljajo programsko,

se jih pogosto izkoriša tudi v druge namene, npr. programsko vodeno komunikacijo z

mikrokrmilniki in pomnilnimi integriranimi vezji po protokolih I2C in SPI.

Vodilo RS232 je vodilo sposobno komunikacije v polnem dupleksu v paru

oddajnik/sprejemnik, kjer se sprejemnik imenuje podatkovna terminalska oprema (data

terminal equipment, DTE), oddajnik pa podatkovna komunikacijska oprema (data

communication equipment, DCE) . Oba imata oddajni signal vezan na sprejemni signal

drugega. Zato je razpored pinov na obeh prikljunega kabla drugaen. Pogosto se tudi

dogaja, da je od celotnega vodila uporabljen zgolj UART del (torej TX, RD in GND signali),

ker za uporabo ostalih ni potrebe. V tem primeru pa je potrebno poskrbeti za sinhronizacijo,

da se obe napravi med seboj uskladita po hitrosti tako, da se prilagodi hitrosti druge

(praviloma se perifierna oprema prilagaja hitrosti gostitelja).

Zaradi svoje zgradbe in enostavnosti upravljanja sistemi pogosto uporabljajo RS232 v navezi

z opazovanjem prometa med napravami, saj so analizatorji signalov poceni, v ta namen pa

lahko uporabimo tudi kar osebni raunalnik z dvema serijskima prikljukoma – kar na enem

sprejmemo, si zabeležimo in pošljemo na drugega.

Skoraj vsak proizvajalec mikrokrmilnikov ima v svojem proizvodnem programu izdelke, ki

podpirajo protokol RS232. Oznaujejo jih s kratico UART (Universal Asynchronous Receiver

Transmitter), kar pomeni univerzalni asinhroni sprejemnik – oddajnik. Ponavadi so le-ti kar

vdelani v sam mikrokrmilnik, nekateri jih imajo celo po dva in ve. UART so pogosto krmiljeni

preko prekinitev (interrupt driven) in sposobni komuniciranja pri hitrostih do 115200 bitov na

sekundo, pri emer mikrokrmilnik le minimalno programsko obremenijo.

Obstaja še veliko drugih izvedenk RS232, ki se od te razlikujejo po namembnosti, razdaljah,

odpornosti na motnje itd.

2.3 SPI SPI je okrajšava za Serial Peripheral Interface, serijski vmesnik za komunikacijo med

napravami. Razvilo ga je podjetje Motorola in je prisotno tako v veini njenih mikrokrmilnikov

kot tudi v izdelkih drugih proizvajalcev. Uporablja se predvsem v aplikacijah, kjer

potrebujemo tokovni prenos podatkov (data stream), npr. v avdio napravah. Je sinhroni

protokol (ob sprejemu enega bita podatkov vsaka od naprav tudi odda en bit podatkov) in

omogoa prenose do 1Mbit/s. Protokol je zastavljen tako, da je ena (ali ve) naprav v vlogi

gospodarja (master), ena (ali ve) pa v vlogi sužnja (slave). Izraza master in slave sta v

elektroniki tako udomaena, da ju bomo uporabljali tudi v nadalje.

Page 12: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 12

Vodilo SPI sestavljajo štiri signali, kot je razvidno iz tabele spodaj:

Tabela 2.1: Signali vodila SPI Signal Pomen Prevod MOSI master out slave in master izhod, slave vhod MISO master in slave out master vhod, slave izhod SCK serial clock urin signal /SS (active low) slave select izbira slave naprave (invertiran vhod)

Komunikacija med napravami hkrati poteka v obe smeri naenkrat po enosmernih MISO in

MOSI linijah (Sl). Podatki se prenašajo sinhrono med gospodarjem in sužnjem po taktu SCK

signala, ki ga zagotavlja gospodar. Pri takem prenosu podatkov naprave dosežejo hitrost

prenosa preko 1Mbit/s. V primeru, da sta med seboj prikljuena le en master in en slave,

signal /SS naeloma ni potreben. V ostalih primerih je za vsako slave napravo potreben svoj

/SS signal. V shemah se ti signali indeksirajo, npr. /SS1, /SS2 itd. Najdemo lahko tudi

naprave, na katere lahko po SPI protokolu samo pišemo ali z njih samo beremo. SPI je tudi

t.i. multi-master/slave protokol, kar pomeni, da lahko vodilo istoasno gosti ve master in ve

slave naprav, pri emer morajo master naprave paziti, kdaj je vodilo prosto. Omeniti je treba,

da protokol ne doloa naina, kako narediti izvedbe multi-master, ampak je to odvisno od

naprav, ki to omogoajo z dodatnimi signali 3. Praviloma so take izvedbe komplicirane in

nepotrebne, zato se jih nartovalci izogibajo.

SPI protokol razpolaga s štirimi naini podajanja urinega takta glede na polariteto in faznim

zamikom signala. Pri tem je pomembno, da je urin takt med gospodarjem in sužnjem

usklajen.

Slika 2.1: Shema protokola SPI

Problema SPI protokola sta predvsem dva. Prvi je, da vsak suženj potrebuje svojo /SS linijo.

e je na mikrokrmilniku dovolj prostih pinov, ob uporabi primernega demultiplekserja to ne

predstavlja problema. Pri malih mikrokrmilnikih z majhnim številom nožic pa za

komuniciranje z ve sužnji ni posebno primeren. Drugi pa je pomanjkanje povratne

informacije o tem, kako so bili podatki na drugi strani sprejeti. Master namre ne more vedeti

niti, ali slave na drugi strani vodila sploh obstaja. Glede na sinhronost protokola so podatki v

eno ali drugo smer vasih nepomembni (npr. medtem ko slave aka na dokoanje ukaza, ki

ga pošilja master, nazaj pošilja svoje podatke; ti so lahko neuporabni, lahko pa ponavlja bite

za mastom in s tem sporoa, kaj je sprejel), zato master do neke toke ne more vedeti, ali ga

sploh kdo »posluša«.

3 [12] David & Roee Kalinsky: Embedded Systems Design (24.09.2006)

MASTER SLAVE

Page 13: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 13

Primer uporabe SPI protokola najdemo v primeru 4.5, kjer po tem protokolu vzpostavimo

komunikacijo med programom in mikrokrmilnikom AVR v ISP nainu delovanja.

2.4 I2C I2C je oznaka za Inter-Integrated Circuit vodilo (odtod kvadrat v nazivu) in je standard za

povezavo med integriranimi vezji na tiskaniem vezju. Protokol je patentiran, razvilo pa ga je

podjetje Philips Semiconductors. Podjetja, ki izdelujejo integrirana vezja, v katerih želijo

uporabljati I2C protokol, morajo od Philipsa pridobiti ustrezno licenco.

I2C vodilo je vodilo, ki podpira sinhroni prenos v nainu poldupleksa, pri tem pa uporablja

samo dve liniji: podatkovno (data, SDA) in urino (clock, SCK). Signali so na linijah postavljeni

v visoko stanje preko pull-up uporov ter krmiljeni s pomojo vezave z odprtim kolektorjem.

Taka vezava veih elementov na vodilo predstavlja vezavo v IN (AND) nainu, saj stik

kolektorja z emitorjem na poljubnem elementu potegne signal linije v nizko stanje.

I2C uporablja komunikacijski protokol z naslavljanjem, ki omogoa gospodarju da komunicira

s posameznim sužnjem s pomojo 7 in 10-bitnega naslavljanja. Vsaka naprava ima naslov,

ki ga dodeli Philips proizvajalcu naprave. Poleg teh naslovov obstajajo tudi posebni naslovi,

kot sta npr. splošni naslov (t.i. general call), ki naslavlja vse prikljuene naprave in naslov za

iniciacijo hitrega prenosa podatkov.

Med komunikacijo s sužnjem gospodar generira urine signale tako za pošiljanje podatkov

sužnju kot tudi za sprejemanje. Vsaka komunikacija se prine tako, da gospodar pošlje 8-

bitno besedo, potrditvenim bitom ki mu sledi ustavitev ali pa ponovni zaetek.

Prehod med biti se odvija med nizkim stanjem SCL linije, razen med zaetkom in koncem

(Slika 2.2). Zaetek oznauje prehod iz visokega v nizko stanje na SDA liniji, medtem ko je

stanje na SCL liniji visoko (). Konec oznauje prehod iz nizkega v visoko stanje na SDA

liniji, ko je stanje na SCL liniji že visoko (). Vkljuen bit se prenese tako, da se SDA linija

postavi v visoko stanje za en cikel na SCL vodilu (). Izkljuen bit pa se prenese, ko mine

cikel na SCL liniji ob liniji SDA v nizkem stanju ().

1 2

3

4

Slika 2.2: Primer prenosa podatkov po I2C vodilu

Page 14: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 14

Sledi potrditveni bit, ki ga generira prejemnik sporoila (slave) tako, da SDA linijo potegne v

nizko stanje, master pa sprosti linijo in jo pusti plavati v visokem stanju. e master nato

prebere potrditveni bit kot visoko stanje, mora privzeti, da zadnja beseda sporoila ni bila

pravilno sprejeta in primerno ukrepati, kar lahko pomeni tudi ponoven prenos podatkov.

Zanimiva lastnost I2C je tudi t.i. raztegovanje ure (clock stretching), do katerega pride, e

slave ne uspe sprocesirati zadnjega bita in zaprosi za ve asa tako, da potegne SCL linijo

na nizek nivo. Ker se signal na liniji obnaša kot pri IN (AND) vezavi, master po svoji sprostitvi

SCL linije ugotovi, da je ta še vedno nizko, saj jo tam drži slave. V tem primeru master

poaka, da slave opravi procesiranje in sprosti SCL linijo. Ko je linija sprošena, se povrne v

visoko stanje in s tem signalizira mastru, da lahko nadaljuje s transakcijo.

Vodilo I2C pozna tri hitrosti: poasno (pod 100Kbit/s), hitro (400Kbit/s) in zelo hitro (3.4

Mbit/s), ki so medsebojno navzdol združljive. Philips tudi priporoa doloen nain vezave za

vodenje podatkov s tiskanega vezja na drugo tiskano vezje ali zunanjo napravo.

Dolžina I2C vodila je pogostokrat omejena zgolj na komunikacijo na tiskanem vezju, prava

omejitev pa je seveda odvisna od hitrosti prenosa in kapacitance vodila. Zato je vodilo

primerno za komunikacije izven tiskanega vezja pri razdaljah do treh metrov in pri uporabi

zmernih hitrosti prenosa.

2.5 Univerzalno serijsko vodilo – USB Univerzalno serijsko vodilo ali v anglešini Universal Serial Bus (USB) je vodilo, zasnovano

za namizne raunalniške aplikacije. Zaradi svoje vloge namizne aplikacije potrebuje

gostitelja, obiajno je to osebni raunalnik. Vse komunikacije potekajo od USB naprav do

gostitelja, naprave pa se med seboj ne morejo povezovati. Istoasno lahko z gostiteljem

komunicira le ena naprava, kar ponazarja tudi slika 2.3: velika pika na levi strani simbola

pomeni gostitelja.

Slika 2.3: Simbol USB vodila

Vodilo je zasnovano na topologiji v obliki zvezde. Središe je osebni raunalnik v vlogi

upravljalca in gostitelja, ki z ostalimi komunicira preko korenskega vozliša. Na gostitelja je

mogoe prikljuiti USB napravo ali USB vozliše, na katerega spet vežemo druge USB

naprave ali vozliša. V tako vezavo lahko vežemo do 127 naprav, pri emer je sme biti med

gostiteljem in napravo le 5 ali manj vozliš. Taka je fizina povezava, z vidika programiranja

pa niti gostitelj niti naprava ne vesta, ali komunikacija med njima poteka preko enega ali petih

Page 15: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 15

vozliš. Pretok podatkov se odvija samodejno. e potrebujemo vejo pasovno širino

prenosa, potrebujemo dodaten gostiteljski krmilnik in korensko vozliše.

Prva razliica specikacij vodila (1.0 ) je 1 2 izšla januarja leta 1996, sledili sta ji dve leti

razvoja, testiranja in poskusnih izvedb. Nato je izšla razliica 1.1, ki je v veliki meri odpravila

probleme in napake, ki so jih identificirali v tem asu ter dodala še eno obliko prenosa.4

Hitrost teh dveh razliic je znašala 1,5Mbit/s ali 12Mbit/s. Razliica 2.0 je bila izdana aprila

2000, njena najpomembnejša novost pa je bila še višja hitrost. Po prvotnih raziskavah so

priakovali približno 20–kratno pohitritev, vendar se je kmalu pokazalo, da so bila ta

priakovanja postavljena prenizko. Na koncu so za najvišjo hitrost prenosa postavili mejo pri

480 Mbit/s.

Kljub višji hitrosti in drugim novostim je USB 2.0 ostal združljiv s prejšnjimi razliicami, le da

je za poln izkoristek potrebno napravo razliice 2.0 prikljuiti na gostitelja neposredno ali

preko vozliš, ki ravno tako vsak zase podpirajo razliico 2.0. Ker naprave USB 2.0

uporabljajo iste kable in prikljuke, lahko na tako vozliše ali gostitelja priklopimo tudi

starejše naprave. V tem primeru bosta gostitelj ali vozliše po potrebi vzpostavila povezavo z

napravo pri ustrezno nižji hitrosti.

USB zaenkrat podpira tri hitrosti prenosa podatkov5:

• nizka hitrost – 1.5 Mbit/s (183 KiB/s) ki se v glavnem uporablja v vmesnikih lovek –

stroj (Human Interface Devices – HID, kot so tipkovnice, miške in igralne palice,

• polna hitrost – 12 Mbit/s (1.5 MiB/s). ta hitrost je bila najvišja do razliice 2.0, in veliko

naprav zniža hitrost prenosa na to hitrost. Naprave, ki podpirajo to hitrost, si delijo

prenosno pasovno širino USB med seboj po principu »kdor prej pride, prej melje« in

dogaja se, da pri istoasni aktivnosti ve prenosov zane primanjkovati prenosne

širine. Vsa USB vozliša podpirajo polno hitrost.

• visoka hitrost – 480 Mbit/s (57 MiB/s).

Posebnost USB vodila je tudi, da prikljuenim napravam zagotavlja napajanje. Po

specifikacijah je ob zaetni prikljuitvi napravam dovoljena zaetna poraba do 100mA, ki jo

le-te lahko po podani zahtevi poveajo do 500mA. Vozliše, ki se napaja iz korenskega

vozliše, lahko za svoje delovanje porabi 100mA, kar pomeni, da je preostalimi 400mA lahko

napaja do štiri prikljuke (vsak po zaetnih 100mA). V primeru, da je potreba po napajanju

veja, kot jo vozliše lahko zagotavlja, se vozliše izkljui in obvesti gostitelja, ki uporabniku

postreže s podrobnostmi o problemih z napajanjem.

Za povezovanje naprav z gostiteljem ali vozliši se uporablja štirižilni kabel s

standardiziranimi prikljuki. Prenos podatkov poteka po dveh žicah, oznaenih z D+ in D-. 4 [10] Axelson, Jan, USB complete, str.18 5 USB, Wikipedia, prosta enciklopedija, 24.09.2006, http://en.wikipedia.org/wiki/Usb

Page 16: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 16

Za prenos logine 0 mora biti signal na D+ v nizkem stanju, D- pa v visokem stanju. Za

prenos logine 1 pa mora biti ravno obratno: signal na D+ mora biti v visokem, D- pa v

nizkem stanju. Druga dve žici se uporabljata za napajanje Vbus= 5V in GND (-5V). Biti si

sledijo od LSB bita dalje. Gostitelj lahko pošlje napravi tudi reset signal tako, da drži liniji D+

in D- v nizkem stanju6.

USB so nartovali z mislimi na širok spekter naprav, ki bi ga lahko uporabljale. Odvisno od

vrste naprave se USB lahko prilagodi razlinim parametrom: hitrosti prenosa, odzivnemu

asu in popravljanju napak. Glede na te parametre USB komunikacija med gostiteljem in

napravo poteka v enem od štirih nainov:

• kontrolni prenosi (control transfer) – so edini prenosi, ki jih USB specifikacija

podrobno doloa; namenjeni so upravljanju gostitelja z napravo (naslavljanje, ukazi in

vprašanja napravi itd);

• masovni prenos (bulk transfer) – prenosi podatkov v okolišinh, kjer prenosna hitrost

ni kritina (npr. pošiljanje datotek tiskalniku). Velik je poudarek odkrivanju in

odpravljanju napak;

• prekinitveni prenos – za naprave, ki periodino zahtevajo pozornost, kot so tipkovnice

in miške. Naprave lahko uporabljajo katerokoli hitrost. To je edini nain prenosa

(poleg kontrolnega, ki je obvezen in predpisan), ki ga znajo uporabljati naprave z

nizko hitrostjo prenosa;

• izohroni prenos – je edina vrsta prenosa, ki garantira konstantno prenosno širino.

Namenjen je predvsem video in avdio napravam, kjer moramo v vsakem trenutku

pretoiti doloeno koliino podatkov. Napakam pri prenosu v tem nainu ne polagamo

posebne pozornosti, ker gre za tokove podatkov, ki so na napake odporni (video,

avdio kodeki).

USB je v primerjavi z ostalimi protokol, o katerem je potrebno vedeti zelo veliko, e se

odloimo izdelati svojo USB napravo. O njem najdemo veliko strokovne literature tako v

tiskani kot elektronski obliki. Na našo sreo pa obstajajo tudi rešitve, kjer za preproste USB

aplikacije ni potrebno o USB vedeti skoraj ni ali zelo malo.7

2.6 Druga vodila in protokoli Obstaja še množica drugih vodil in protokolov, ki igrajo v raunalništvu zelo pomembno

vlogo. To so vodila in protokoli, kot je protokol za raunalniška omrežja Ethernet (ožiene in

brezžine povezave), za komunikacijo med ronimi napravami Bluetooth in IrDA (infrardei

prenos), IEEE1394 (Fire Wire) za prenos zelo velikih koliin podatkov (video, varnostne

6 ve avtorjev: What is a USB?, 24.09.2006, http://www.pulsewan.com/data101/usb_basics.htm 7 Glej poglavje 3.1.1 na strani 18.

Page 17: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 17

kopije), TCP/IP za prenos podatkov po internetu, SPDIF za prenos glasbene vsebine v

digitalni obliki (Dolby, DTS itd.), vmesniki ISA, EISA, PCI, PCI-Express, AGP, IDE/ATAPI,

SCSI, SATA in drugi, namenjeni prenosu podatkov med raunalniškimi perifernimi enotami in

centralno procesno enoto ter drugi preprostejši protokoli za povezavo med integriranimi vezji,

kot sta recimo 1-wire (napajanje in prenos podatkov poteka po eni žici) in Microwire. Izdana

je celo specifikacija za USB Wireless, torej brezžina oblika USB povezave.

2.7 Primerjava med splošno razširjenimi protokoli Tabela 2.2 prikazuje primerjavo med opisanimi protokoli in nekaj protokoli, naštetimi v

poglavju 2.6. V splošnem najdemo dale ve serijskih kot paralelnih protokolov, kar lahko

pripišemo dejstvu, da pri ve vzporednih signalih prihaja do medsebojnih motenj, kar

zmanjšuje hitrost in zanesljivost prenosa ter posledino naredi protokole drage in

neprivlane.

Tabela 2.2: Primerjava protokolov v široki uporabi

Vmesnik vrsta prenosa

maks. število naprav

razdalja hitrost (bits/sec) Tipina uporaba

USB asinhroni serijski 127

4,8m

(z uporabo 5 vozliš do

29m)

1,5M 12M

480M

miš, tipkovnica, modem, zunanji pomnilnik, tiskalniki...

RS-232 (EIA/TIA–

485)

asinhroni serijski 2 1,5m – 3m 115k modem, miš, merilne naprave

IrDA asinhroni serijski 2 1,8m 115k mobilni telefoni, dlanniki,

tiskalniki

Microwire sinhroni serijski 8 3m 2M komunikacija med integriranimi

vezji

SPI sinhroni serijski 8 3m 2.1M komunikacija med integriranimi

vezji

I2C sinhroni serijski 40 5.5m 3,4M komunikacija med integriranimi

vezji

IEEE1394 Fire Wire serijski 64 4,5m

400M 3G –

IEEE1394b video kamere, zunanji pomnilniki

Ethernet serijski 1024 480m 10M

100M 1G

raunalniška omrežja

IEEE1284 »Centronics« vzporedni 2 3m – 7m 8M tiskalniki, zunanji pomnilniki,

skenerji,

IDE/ATAPI vzporedni 2 in gostitelj 1m trdi diski, PCMCIA kartice

Page 18: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 18

3. Prvi koraki v merjenje in krmiljenje s pomojo USB V naslednjih poglavjih bomo predstavili nekaj nainov, kako vpeljati USB vodilo v aplikacije z

osebnim raunalnikom. Pri tem bomo uporabljali operacijski sistem Windows XP

Professional SP2, programski jezik Delphi, kasneje pri prikazu izmenjave podatkov z

mikrokrmilnikom AVR pa še programski jezik C. Primarni cilj poglavja ni toliko razlaga

zgradbe in delovanja vodila (zato obstaja množica strokovne literature), temve kar

konkretna uporaba. Zato bodo tudi zgledi prikazani tako, da bodo omogoali posnemanje,

zraven vsakega primera pa bodo podani komentarji, potrebni za razumevanje delovanja

programa ali njegovo predelavo.

Ukvarjali se bomo z naslednjimi primeri:

• primer uporabe USB vodila s pomojo integriranega vezja FTDI 245BM v t.i. bit-bang

nainu na prototipnem modulu USB245BM,

• primer komunikacije med osebnim raunalnikom in mikrokrmilnikom AVR po USB

vodilu s pomojo integriranega vezja FTDI 245BM na prototipnem modulu

USB245BM,

• primer komunikacije med osebnim raunalnikom in mikrokrmilnikom AVR po USB

vodilu z emulacijo USB protokola.

3.1 Vezja, ki omogoajo povezavo med ciljnim vezjem in USB Redka vezja in mikrokrmilniki neposredno povezujejo poljubno elektronsko aplikacijo z USB

vmesnikom. V tem pogledu so bolj priljubljene nekakšne vmesne rešitve v obliki specialnih

integriranih vezij kot družina izdelkov podjetja FTDI ali emulacije USB protokola na

mikrokrmilnikih, ki se posveajo zgolj temu opravilu. Nekatera vezja so namenjena zgolj

nevidni pretvorbi s protokola RS232 ali Centronics, spet druga so univerzalna in omogoajo

precej ve.

Pobliže si bomo ogledali primer vezja, ki prenaša podatke s svojega paralelnega

podatkovnega vodila na vodilo USB in sprejema podatke z njega.

3.1.1 Integrirano vezje FTDI-245BM Integrirano vezje FTDI-245BM je vezje, ki naj bi omogoalo enostavno komuniciranje po

vodilu USB. Izdeluje ga podjetje FTDIChip (http://www.ftdichip.com), ki izdeluje še paleto

drugih integriranih vezij, namenjenih poenostavitvi dela z USB. S ciljem dodatno motivirati

potencialne kupce, podjetje ponuja uporabnikom tega vezja brezplane gonilnike, uporabne

programe in obširno dokumentacijo. To se jim je na podroju maloserijskih USB aplikacij

verjetno dobro obrestovalo, saj na internetu zasledimo veliko primerov uporabe in obširno

izmenjavo izkušenj na spletnih forumih.

Page 19: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 19

FT245BM deluje kot FIFO (first in – first out, prvi noter – prvi ven) vmesnik med neko

napravo (mikrokrmilnikom) in USB vodilom. Vezje pripada drugi generaciji USB FIFO

vmesnikov tega podjetja. V primerjavi s svojim predhodnikom, vezjem prve generacije

FT8U245AM, je odpadla potreba po nekaterih zunanjih elementih, vpeljane so bile številne

izboljšave, vezje pa je še vedno pin–to–pin združljivo s svojim predhodnikom.

V dokumentaciji8 FT245BM bomo med drugim našli naštete naslednje prednosti in

znailnosti samega integriranega vezja:

• Pretvorba USB paralelni FIFO podatkovni prenos

• Hitrost prenosa podatkov do 1Mbyte/s z uporabo D2XX gonilnikov

• Hitrost prenosa podatkov do 300Kbyte/s z uporabo VCP (virtual COM port) gonilnikov

• Preposto krmiljenje vezja z uporabo 4 kontrolnih signalov

• Celotni USB je izveden na vezju samem – nobenega dodatnega programiranja, ki bi

zahtevalo poznavanje strojne opreme USB vmesnikov

• Pripravljeni in brezplani gonilniki VCP9 in D2XX v veini primerov odpravijo potrebo

po razvoju svojega gonilnika

• Sprejemni vmesni pomnilnik velikosti 128 bytov, oddajni vmesni pomnilnik 384 bytov.

• Dodan pin SI – Send Immediate za signalizacijo takojšnjega odpošiljanja podatkov v

vmesnem pomnilniku

• Podpora varevalnemu stanju –za prehod v stanje pripravljenosti (USB suspend) in

za nadaljevanje delovanja (resume) sta dodana še dva pina: PWREN# in WAKEUP

• Podpora USB napravam z visoko porabo elektrine moi, ki se napajajo preko USB

vmesnika

• Nastavljiv as izteka za sprejemni vmesni pomnilnik (RX buffer)

• Vgrajena podpora dogodkovnim znakom (event characters)

• Vgrajen pretvornik napetostnih nivojev med integriranim vezjem in 3.3V in 5V logiko

• Integriran 3.3V regulator napetosti

• Integrirano vezje za reset ob vklopu (power-on reset)

• Integriran množilnik frekvence s 6Mhz na 48Mhz

• USB bulk ali izohroni nain prenosa podatkov

• Enotna napajalna napetost od 4.35V do 5.25V 8 [1] FT245BM USB FIFO IC Data Sheet, str.1 9 VCP – Virtual COM Port – navidezna komunikacijska vrata

Page 20: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 20

• Združljiv s standardi USB 1.1 (full speed) in USB 2.0 (hi-speed)

• Podpora VID, PID, serijskim številkam in nizu z imenom naprave v zunanjem

EEPROMu

• EEPROM je možno sprogramirati s podatki o konfiguraciji kar preko USB povezave

Z VCP (virtual COM port) gonilniki so podprti naslednji operacijski sistemi: Windows 98 in

Windows 98SE, Windows 2000, ME in XP, Windows CE 4.2, MAC OS-8 in OS-9, MAC OSX,

Linux izvedenke z jedrom 2.40 in višjih razliic. Z D2XX gonilniki so podprti sistemi Windows

98, Windows 98SE, Windows 2000, ME in XP

Slika 3.1: Fizini in shematski razpored pinov FTDI 245BM

Dokumentacija10 navaja naslednja podroja uporabe (izpostavil bom najpomembnejša):

enostaven vmesnik med mikroprocesorji, PLD in FPGA integriranimi vezji in USB,

nadgradnja starih vmesnikov na USB, uporabo USB v industriji, USB merilni instrumenti,

ozkopasoven prenos avdio in video signala, povezava med USB in MP3 napravami in priklop

italcev pametnih kartic (smartcard) na USB.

Pine vezja FT245BM (Slika 3.1) lahko razdelimo v naslednje logine skupine:

• podatkovno vodilo s FIFO vmesnim pomnilnikom:

Pin št. Signal Tip pina Opis

25 D0 V/I FIFO Podatkovno vodilo 0 24 D1 V/I FIFO Podatkovno vodilo 1 23 D2 V/I FIFO Podatkovno vodilo 2 22 D3 V/I FIFO Podatkovno vodilo 3 21 D4 V/I FIFO Podatkovno vodilo 4 20 D5 V/I FIFO Podatkovno vodilo 5 19 D6 V/I FIFO Podatkovno vodilo 6 18 D7 V/I FIFO Podatkovno vodilo 7

10 [1] FT245BM USB FIFO IC Data Sheet, rev. 1.7

Page 21: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 21

• krmilna skupina pinov za omenjeno vodilo:

Pin št. Signal Tip pina Opis

16 RD# Vhod

Pin v prehodu na nizko stanje postavi podatkovno vodilo D0-D7 na podatek v sprejemnem vmesnem FIFO pomnilniku. Pri prehodu iz nizkega v visoko stanje pripravi naslednji zlog iz vmesnega pomnilnika.

15 WR Vhod Pri prehodu iz visokega v nizko stanje povzroi prenos podatka s podatkovnega vodila D0-D7 v vmesni oddajni FIFO pomnilnik.

14 TXE# Izhod

V visokem stanju signalizira, da je oddajni vmesni FIFO pomnilnik poln in da nadaljnje pisanje ni možno. V nizkem stanju signalizira, da lahko podatek z vodila vstavimo v pomnilnik s kratkim prehodom signala WR v visoko in nato v nizko stanje.

12 RXF# Izhod

V visokem stanju signalizira, da je vmesni sprejemni pomnilnik prazen oz. da je byte na podatkovnem vodilo D0-D7 neveljaven, v nizkem stanju pa signaliziraprisotnost veljavnega podatka v vmesnem pomnilniku in ga lahko preberemo s prehodom RD# v nizko in nato visoko stanje.

• Skupina pinov za prikljuitev na USB vodilo:

Pin št. Signal Tip pina Opis

07 USBDP V/I Pozitivni USB podatkovni signal (zahteva 1.5kΩ pull-up upor na pin 3V3OUT ali RSTOUT#)

08 USBDM V/I Negativni USB podatkovni signal

• Skupina pinov za krmiljenje EEPROM identifikacijskega pomnilnika

Pin št. Signal Tip pina Opis

32 EECS V/I

Signalizira prikljuen EEPROM. e EEPROMa ni, vezje pa deluje s hitrostjo 48MHz, je potrebno napetost na EECS potegniti navzdol z 10kΩ upornikom. Za 6MHz delovanje upornik ni potreben.

01 EESK Izhod

Urin signal za EEPROM. Upor velikost 10kΩ, vezan na EESK bo povzroil, da se bo vezje FT245BM identificiralo s kodo produkta (PID) 6005 (hex) namesto obiajne 6001. Vsi ostali podatki, ki opisujejo napravo, ostanejo nespremenjeni.

02 EEDATA V/I

Pin je neposredno povezan na EEPROMov podatkovni vhod in preko 2.2kΩ upornika na podatkovni izhod. Za pravilno delovanje mora biti Data Out pin EEPROMa prikljuen na VCC preko 10kΩ upora.

Page 22: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 22

• Skupina pinov za nadzor porabe

Pin št. Signal Tip pina Opis

10 PWREN# Izhod

Ko se naprava konfigurira na USB, napetost na pinu preide v nizko stanje, ob prehodu sistema v stanje nizke porabe (suspend) pa preide v visoko stanje. Pin je možno uporabiti za krmiljenje napajanja zunanjih loginih vezij z uporabo P-kanalnega loginega MOSFET stikala. Pri taki uporabi pina je potrebno v EEPROMu vkljuiti »Interface pull-down« opcijo.

11 SI / WU Vhod

Pin združuje dve funkciji: takojšnje pošiljanje (SI – Send Immediate) in prebujenje iz stanja nizke porabe (suspend). e je naprava v stanju nizke porabe (PWREN# = 1) in je oddaljeno prebujanje vkljueno v EEPROMu, bo kratka postavitev pina v nizko in nato nazaj v visoko stanje poslalo na USB vodilo zahtevo po nadaljevanju delovanja (resume). Obiajno se postopek uporablja za prižiganje/prebujanje osebnega raunalnika.

• Skupina pinov za razne namene:

Pin št. Signal Tip pina Opis

04 RESET# Vhod Preko tega pina lahko zunanja naprava resetira FT245BM. e to ni potrebno, signal vežemo na VCC.

05 RSTOUT# Izhod

Izhod internega reset generatorja. Ostane v stanju visoke impedance do približno 5ms po prehodu VCC nad 3.5V in startu internega urinega signala, nato pa se prikljui 3.3V izhodu internega regulatorja napetosti. Nizek signal na RESET# bo spravil v nizko stanje tudi RSTOUT#. Na RSTOUT# resetiranje USB vodila nima vpliva.

27 XTIN Vhod

Vhod za 6MHz celico kristalnega oscilatorja. Pin lahko prikljuimo tudi na zunanjo 6Mhz uro, e je to potrebno. Pozor: preklopni razmak tega pina je VCC/2, zato je pri zunanjem signalu potrebno uporabiti 5V CMOS napetostne nivoje ali izmenino napetost superponirano na VCC/2.

28 XTOUT Izhod Izhod 6MHz internega oscilatorja. XTOUT se med stanjem nizke porabe izklopi, kar je treba upoštevati pri vezavi signala na zunanja logina vezja.

• Skupina pinov za napajanje in ozemljitev:

Pin št. Signal Tip pina Opis

06 3V3OUT Izhod

3.3V izhod integriranega LDO regulatorja napetosti. Ta pin naj bo povezan na GND preko 33pF keraminega kondenzatorja v neposredni bližini pina. Glavni namen pina je dobavljati 3.3V napajanje USB oddajnosprejemnim celicam in RSTOUT# pinu. Majhen del toka (do 5mA) lahko uporabimo za napajanje zunanjih 3.3V loginih vezij.

Page 23: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 23

03 26 VCC Napajanje

Napetost VCC v razponu od +4.35V do +5.25V za napajanje naprave, LDO regulatorja in drugih pinov razen podatkovnega vodila.

13 VCCIO Napajanje

Napajanje +3.0V do +5.25V VCC za pine 10 do 12, 14 do 16 in 18 do 25. Pri povezovanju zunanjih 3.3V loginih vezij v izvedbi z napajanjem preko USB vodila povežemo pin s 3.3V napajanjem, ki ga zagotavlja USB vodilo. Pri povezovanju zunanjih 3.3V loginih vezij v izvedbi z neodvisnim napajanjem s slednjim povežemo pin VCCIO. V ostalih primerih povežemo pin na VCC 5V.

09 17 GND Napajanje Ozemljitev

30 AVCC Napajanje Analogno napajanje za interni 8-kratni množilnik frekvence.

29 AGND Napajanje Ozemljitev analognega napajanja za zgoraj omenjeni interni 8-kratni množilnik frekvence.

Integrirano vezje FT245BM je sestavni del evalvacijskega modula DLP-245M, ki ga

opisujemo v naslednjem poglavju.

Slika 3.2: Razlina pogleda na modul DLP-245M (vir: DLP design, [2])

3.1.2 Modul DLP-245M V našem primeru bomo omenjeni ip uporabili že vgrajenega na prototipnem modulu

DLP245M (Slika 3.2) podjetja DLP Design (http://www.dlpdesign.com). DLP245M je modul

za hitro prototipiranje11, torej namenjen hitremu razvoju poljubne USB aplikacije, zasnovane

okoli ipa FT245BM. Vsebuje vse gradnike, potrebne za implementacijo USB vmesnika:

konektor, integrirano vezje, 6MHz kristalni oscilator, EEPROM za dodatne informacije, ter

pasivne elemente (upore in kondenzatorje)[2]. Razporeditev pinov za zunanje povezave se

prilega standardnemu DIL14 podnožju, zato je primeren tudi za vgradnjo v konni prototip

aplikacije, še posebno tam, kjer bomo na koncu modul vzeli ven in ga uporabili drugje.

Istoimenski pini na modulu se po funkcionalno pokrivajo s pini pri integriranem vezju FT–

245BM z nekaj majhnimi razlikami.

11 [2] DLP-USB245M User Manual, str.1

Page 24: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 24

• Podatkovno vodilo je po funkcionalnosti enako, le pini so drugae oštevileni:

Pin št. Signal Tip pina Opis

17 D0 V/I FIFO Podatkovno vodilo 0 18 D1 V/I FIFO Podatkovno vodilo 1 19 D2 V/I FIFO Podatkovno vodilo 2 20 D3 V/I FIFO Podatkovno vodilo 3 21 D4 V/I FIFO Podatkovno vodilo 4 22 D5 V/I FIFO Podatkovno vodilo 5 23 D6 V/I FIFO Podatkovno vodilo 6 24 D7 V/I FIFO Podatkovno vodilo 7

• Krmilna skupina pinov za podatkovno vodilo:

Pin št. Signal Tip pina Opis

16 RD# Vhod V nizkem stanju postavi podatkovno vodilo D0-D7 na podatek v sprejemnem vmesnem FIFO pomnilniku. Pri prehodu iz nizkega v visoko stanje pripravi naslednji zlog iz vmesnega pomnilnika

15 WR Vhod Pri prehodu iz visokega v nizko stanje zapiše podatek s podatkovnega vodila D0-D7 v oddajni vmesni FIFO pomnilnik.

14 TXE# Izhod

V visokem stanju signalizira, da je oddajni vmesni FIFO pomnilnik.poln in da nadaljnje pisanje ni možno. V nizkem stanju signalizira, da lahko podatek z vodila vstavimo v pomnilnik s kratkim prehodom signala WR v visoko in nato v nizko stanje.

13 RXF# Izhod

V visokem stanju signalizira, da je vmesni sprejemni pomnilnik prazen oz. da je byte na podatkovnem vodilo D0-D7 neveljaven, v nizkem stanju pa signaliziraprisotnost veljavnega podatka v vmesnem pomnilniku in ga lahko preberemo s prehodom RD# v nizko in nato visoko stanje.

• napajanje in poraba energije

Pin št. Signal Tip pina Opis

01 BID Izhod Namenjen identifikaciji modula kot DLP–USB245M (logina 0) ali DLP–232M (logina 1)

02 GND Napajanje

03 RST Vhod Preko tega pina lahko zunanja naprava resetira FT245BM. e ta možnost ni potrebna, signal vežemo na VCC.

04 RSTOUT# Izhod

Izhod internega reset generatorja. Ostane v stanju visoke impedance do približno 5ms po prehodu VCC nad 3.5V in startu internega urinega signala, nato pa se prikljui 3.3V izhodu internega regulatorja napetosti. Nizek signal na RESET# bo spravil v nizko stanje tudi RSTOUT#. Na RSTOUT# resetiranje USB vodila nima vpliva.

Page 25: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 25

05 GND Napajanje

06 3V3OUT Izhod

3.3V izhod integriranega LDO regulatorja napetosti. Ta pin naj bo povezan na GND preko 33pF keraminega kondenzatorja v neposredni bližini pina. Glavni namen pina je dobavljati 3.3V napajanje USB oddajnosprejemnim celicam in RSTOUT# pinu. Majhen del toka (<5mA) lahko uporabimo za napajanje zunanjih 3.3V loginih vezij.

07 GND Napajanje

08 SLP Izhod

Ko se naprava konfigurira na USB, napetost na pinu preide v nizko stanje, ob prehodu sistema v stanje nizke porabe (suspend) pa preide v visoko stanje. Pin je možno uporabiti za krmiljenje napajanja zunanjih loginih vezij z uporabo P-kanalnega loginega MOSFET stikala.

09 SI / WU Vhod

Pin združuje dve funkciji: takojšnje pošiljanje (SI – Send Immediate) in prebujenje iz stanja nizke porabe (suspend). e je naprava v stanju nizke porabe (PWREN# = 1) in je oddaljeno prebujanje vkljueno v EEPROMu, bo kratka postavitev pina v nizko in nato nazaj v visoko stanje poslalo na USB vodilo zahtevo po nadaljevanju delovanja (resume). Obiajno se postopek uporablja za prižiganje/prebujanje osebnega raunalnika.

10 VCCIO Napajanje

Napajanje +3.0V do +5.25V VCC za pine 10 do 12, 14 do 16 in 18 do 25 FTDI 245BM ali 232BM. e na vodilo povezujemo zunanja 3.3V logina vezja, pin povežemo z zunanjim napajanjem, Sicer pa navadno povežemo pin na VCC 5V. Pin mora biti prikljuen na VCC prikljuenega vezja ali pina EXTVCC.

11 EXTVCC Napajanje Glavno napajanje modula (4.4V – 5.25V). e želimo modul napajati z USB vodila, pin sklenemo s pinom PORTVCC.

12 PORTVCC Napajanje Napajanje, zagotovljeno z USB vodila. e želimo modul napajati z USB vodila, pin EXTVCC zvežemo s tem pinom. e je modul nastavljen na visoko porabo, lahko vodilo zagotavlja 500mA12.

3.2 Priprave Preden se lotimo dela, poglejmo spisek osnovnih stvari, ki jih bomo potrebovali pri našem

delu. Potrebujemo naslednje (oznaka CD–ROM oznauje, da potrebno najdemo tudi na

priloženem CD–ROMu):

• razvojni programski paket Delphi 5

• programski jezik C za AVR mikrokrmilnike CodeVision AVR (ali podobnega)

12 [2] DLP-USB245M User Manual, str.7

Page 26: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 26

• prototipni modul DLP245M podjetja DLP Design

http://www.dlpdesign.com/usb/usb245.shtml

• dokumentacijo modula DLP245M

http://www.dlpdesign.com/usb/dlp-usb245m13.pdf

• gonilnike za FTDI245BM (CD-ROM)

http://www.ftdichip.com/Drivers/D2XX.htm

• dokumentacijo integriranega vezja FTDI245BM

http://www.ftdichip.com/Documents/DataSheets/ds245b17.pdf

• opis API klicev knjižnice D2XX

http://www.ftdichip.com/Documents/ProgramGuides/D2XXPG33.pdf

• modul (unit) v Delphiju, kjer so že definirani vsi API klici v D2XX DLL knjižnico

http://www.ftdichip.com/Projects/CodeExamples/Delphi/D2XXUnit.zip

• plošo za sestavljanje prototipov brez spajkanja (t.i. breadboard ali ploša za

prototipiranje)

• protoplošo STK500 za lažje delo z AVR mikrokrmilniki

Seveda lahko shajamo brez ploše za prototipiranje in STK500, vendar pripomoka res

precej poenostavita delo.

3.2.1 Gonilniki Instalacija gonilnikov poteka zelo preprosto. Modul najprej prikljuimo na napajanje (lahko

zgolj s stinikom13 skupaj povežemo pina PORTVCC in EXTVCC), in ga prikljuimo na USB.

Pri uporabi gonilnikov razliice 2.0 (ki so tudi WHQL certificirani s strani Microsofta),

postopek instalacije gonilnikov zelo poenostavi izvršljiva datoteka (najdemo jo med gonilniki

na spletni strani in na priloženem CD–ROMu), ki jo zgolj zaženemo in s tem opravimo vse

potrebno. Še vedno pa lahko gonilnike nalagamo na klasien nain – preko arovnika za

novo strojno opremo.

Do razliice 2.0 sta obstajala dva modela gonilnikov, VCP in D2XX. VCP ali Virtual Com Port

razliica je bila namenjena aplikacijam, ki so do konne naprave dostopale preko

navideznega COM vmesnika. Naprava se je v takem primeru obnašala kot naprava,

prikljuena na klasien serijski (COM) vmesnik. Zaradi omejitve hitrosti preko serijskega

modela prenosa, so v drugi razliici izdajali tudi D2XX model gonilnikov. Ta je poleg vejih

hitrosti omogoal še nekatere dodatne možnosti. Z razliico 2.0 so ta dva modela poenotili in

spravili v en sam paket gonilnikov, od same aplikacije pa je odvisno, ali bo uporabljala VCP

ali D2XX model, edina omejitev je, da ne more uporabljati obeh hkrati.

13 ang. jumper

Page 27: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 27

Priloga na CD–ROMu: Gonilniki - klasina instalacija: CDROM:\Gonilniki\Windows 2kXP\Common driver model 2.00.00 Gonilniki - samodejna instalacija: CDROM:\Gonilniki\Windows 2kXP\Samodejna instalacija

3.3 Program MProg

Slika 3.3: Okno programa MProg

Program MProg (Slika 3.3) je namenjen poleg ostalih stvari vpisati razne nastavitve v

EEPROM modula. Med drugim lahko vpišemo opis naprave, serijsko številko, USB razliico

itd. Nastavimo lahko tudi nain napajanja, da lahko aplikacijo napajamo tudi neposredno z

USB vodila. V naših primerih bi radi napajali aplikacije do 500mA, zato je zaželeno, da

opravite nastavitve modula pred uporabo sami. Za priklop uporabimo vezavo, kot je

prikazana v poglavju 4.1.1.

Priloga na CD–ROMu: Program MPROG: CDROM:\MProg\MProg2.8_Setup.exe

Page 28: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 28

3.4 Modul FTD2XX.pas e smo do sedaj uporabljali LPT in COM vmesnika na raunalniku in pri tem uporabljali

neposreden dostop do vrat na nivoju zbirnika (IN in OUT ukazi), smo bili bodisi prisiljeni

delati na operacijskem sistemu Windows 9x ali ME bodisi na Windows NT platformah (NT,

2000, XP...) uporabljati posebne knjižnice za neposreden dostop do vrat mikroprocesorja.

Teh trikov si zdaj ne moremo ve privošiti, pa pa smo dokono prisiljeni v uporabo D2XX

API (Application Protocol Interface) klicev, ki komunicirajo z gonilniki neposredno ali v

uporabo API klicev operacijskega sistema, ki komunicirajo z gonilniki preko navideznega

COM vmesnika.

Na spletnih straneh podjetja FTDI kot zgled API modula v Delphiju lahko najdemo modul

D2XXUnit.pas14, ki naj bi ponujal podporo funkcijam, uvoženim iz dinamine knjižnice

FTD2XX.DLL. Ta knjižnica posreduje zahteve iz aplikacije v gonilnik USB naprave, skrbi za

pretok podatkov, obvešanje o prikljuenih napravah, dogodkih itd.

eprav je namen podjetja poenostaviti uporabo API klicev tudi programerjem v Delphiju,

hvale vredna, se kmalu izkaže, da je bolje, e tega modula ne uporabljamo. Že pri uporabi

bit-bang naina se hitro pokažejo pomanjkljivosti (kljune funkcije sploh niso deklarirane,

druge so deklarirane z netipiziranimi kazalci, eprav pascal pozna var referenco). Kaj hitro se

postavi vprašanje: ali je sploh smiselno vztrajati pri tej implementaciji ali pa je morda bolje

sestaviti nov modul.

Poglejmo zakaj smo se odloili za slednje.

1) modul ni dokonan, nima uvoženih vseh funkcij, veliko je vezave na globalne

spremenljivke, kar je v splošnem slabo

2) nima podpore ve napravam naenkrat, eprav knjižnica omogoa poljubno število

naprav

3) ker ni dokonan, bi lahko imeli težave pri morebitnih nadgradnjah

4) z uporabo neposrednih klicev v knjižnico dobimo veji nadzor nad delovanjem

programa

5) napisan je v istem C stilu in ne izkoriša možnosti, ki jih ponuja Delphi (pravzaprav

pascal), s katerimi elegantno prepreimo kopico morebitnih programskih hrošev.

Proti pisanju novega modula govori le argument, da imamo s tem nekaj dela.

Po tem premisleku smo se odloili, da pripravimo svoj modul, D2XXUnit pa bo služil le kot

podlaga. Na zaetku bomo pripravili modul FTD2XX.pas15 in vanj zapisali popravljene sklice

14 [3] D2XXUnit.pas 15 Glej tudi: Priloga A

Page 29: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 29

na API funkcije v knjižnici, kot so navedene v D2XX Programmer's Guide16. Nekatere od njih

bomo preobremenili (overload) in s tem v klicih funkcij vpeljali uporabo tipiziranih kazalcev

poleg klasinih netipiziranih. Modul FTD2XX najdemo izpisan tudi v Prilogi A ter na

priloženem CD-ROMu.

Priloga na CD–ROMu: Modul FTD2XX.pas CDROM:\Primeri\FTD2XX.pas CDROM:\Dokumentacija\D2XXUnit.pas

Sledi podrobnejša obravnava tistih programskih klicev, ki jih bomo v nalogi veliko uporabljali.

Opisali bomo njihovo sintakso in pokazali uporabo na primeru.

3.4.1 FT_Open Odpre napravo in vrne roico (handle) za uporabo v nadaljevanju

Deklaracija:

1 2

function FT_Open(Device: Integer; var Handle: Dword): FT_Result; stdcall; external FT_DLL_Name name ‘FT_Open’;

Parametri:

Device – indeks prikljuene naprave ( 0 = prva naprava, 1 = druga itd.)

Handle – spremenljivka, kamor bo funkcija shranila roico naprave (s katero se potem

upravlja odprto napravo).

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Primer:

1 2 3 4 5 6 7 8 9 10 11

var handle: Dword; rezultat: FT_Result; // funkcija vrne true, e je odpiranje uspelo, sicer false function OdpriNapravo: boolean; begin rezultat = FT_Open(0, handle); OdpriNapravo := rezultat = 0; end;

Preden lahko upravljamo s katerokoli USB napravo, jo je potrebno »odpreti«. To je proces, v

katerem operacijski sistem poveže program z napravo, ki jo program uporablja in s tem

preprei, da bi jo uporabljal kak drug program in se vmešaval v njeno delovanje. Ko je

naprava uspešno odprta, operacijski sistem temu odprtju dodeli neko roico (handle), to je

(32-bitno) število, preko katerega bomo uporabljali ostale programske klice napravi. Roico

moramo spraviti na varno, saj e jo izgubimo, z napravo ne moremo ve komunicirati, niti je

16 [4]D2XX Programmer's Guide, rev. 3.3

Page 30: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 30

ne moremo še enkrat odpreti, ker je že odprta. Ena možnost je, da nato uporabimo nekatere

bolj zahtevne klice, ki vrnejo roico že odprte naprave, vendar pri tem tvegamo, da to ni

naprava, s katero smo komunicirali prej. Druga je, da program zakljuimo in ga ponovno

zaženemo. Zelo je zaželeno, da napravo po koncu uporabe zapremo, še posebej v primerih,

ko v aplikaciji pride do kakšne napake.

3.4.2 FT_Close Zapre z ukazom FT_Open predhodno odprto napravo.

Deklaracija:

1 2

function FT_Close(Handle: Dword) : FT_Result ; stdcall ; external FT_DLL_Name name ‘FT_Close’;

Parametri:

Handle – spremenljivka, kamor smo pri odpiranju z ukazom FT_Open shranili roico naprave

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Primer klica:

1 2 3 4 5 6 7 8 9 10 11

var handle: Thandle; rezultat: FT_Result; // funkcija vrne true, e je zapiranje uspelo, sicer false function ZapriNapravo: boolean; begin rezultat = FT_Close(handle); ZapriNapravo:= rezultat = 0; end;

Ko smo konali z uporabo USB naprave, jo moramo zapreti. To moramo storiti ne glede na

to, kaj se je vmes z napravo zgodilo. e smo jo med delom odklopili in priklopili nazaj, je

roica izgubljena, vseeno pa moramo opraviti zapiranje z roico, ki smo jo dobili ob

odpiranju. e gre za napravo, ki se pogosto priklaplja v USB in odklaplja, je zaželjeno

sprogramirati postopek tako, da odpre napravo, postori potrebna opravila in napravo takoj

zatem zapre.

3.4.3 FT_Purge Izprazni izbran vmesni pomnilnik

Deklaracija:

1 2

function FT_Purge(Handle:Dword;Mask:Dword) : FT_Result ; stdcall ; external FT_DLL_Name name 'FT_Purge';

Page 31: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 31

Parametri:

Handle – spremenljivka, kamor smo pri odpiranju z ukazom FT_Open shranili roico naprave

Mask – spremenljivka, s katero doloimo enega ali oba vmesna pomnilnika, ki ju hoemo

izprazniti. V ta namen sta definirani dve konstanti:

FT_PURGE_RX = 1 – izprazni sprejemni vmesni pomnilnik

FT_PURGE_TX = 2 – izprazni oddajni vmesni pomnilnik

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Primer klica:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

var handle: Dword; rezultat: FT_Result; // funkcija vrne true, e sta odpiranje in praznenje uspela, sicer false function IzprazniVmesnaPomnilnika: boolean; begin rezultat = FT_Open(0, handle); // sprazni oba vmesna pomnilnika rezultat:= rezultat or FT_Purge(handle, FT_PURGE_RX + FT_PURGE TX); IzprazniVmesnaPomnilnika:= rezultat = 0; end;

Vasih, ko odpremo napravo, v njej že aka kup neuporabnih podatkov. Namesto, da bi te

podatke brali, dokler jih ne zmanjka, jih lahko s FT_Purge enostavno zbrišemo in tako

pripravimo modul na novo uporabo.

3.4.4 FT_Read Prebere poljubno število zlogov z ukazom FT_Open predhodno odprte naprave.

Deklaracija:

1 2 3

function FT_Read(Handle: Dword; var Buffer; BytesToRead: Dword; var BytesReturned: Dword): FT_Result; stdcall; external FT_DLL_Name name ‘FT_Read’;

Parametri:

Handle – spremenljivka, kamor smo pri odpiranju z ukazom FT_Open shranili roico naprave

Buffer – prostor, kamor bomo prejeli prebrane podatke (polje, niz ali spremenljivka)

BytesToRead - velikost prostora, ki je na voljo branju podatkov ali število zlogov, ki jih želimo

prebrati

BytesReturned – število dejansko prebranih zlogov po klicu

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Page 32: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 32

Primer klica:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

// predpostavljamo, da je roica v spremenljivki handle in da je naprava odprta function PreberiNiz: boolean; var s: string[49]; dolzina: byte; rezultat: FT_Result; begin // pazimo, pascal ima kot prvi zlog navadnega niza namenjeno dolžini niza, // t.j. s[0] je zlog, ki je enak dolžini niza in SizeOf(s) je enako 50 // toda prostora je samo za 49 znakov // priakujemo do 49 zlogov dolg niz in niesar drugega rezultat = FT_Read(handle, s[1], SizeOf(s)-1, dolzina); // e smo uspeli kaj prebrati, bo rezulat enak 0 in dolžina enaka številu prebranih znakov if rezultat = FT_OK then s[0]:= Chr(dolzina); else s[0]:= Chr(0); PreberiNiz:= rezultat = 0; end;

Ko beremo podatke z naprave, je dobro vedeti, koliko jih bo približno prišlo. Priakovano

koliino zlogov podamo v parametru BytesToRead, prostor, kamor se bodo vpisali,

navedemo v spremenljivki Buffer, koliina dejansko prebranih zlogov pa se bo po klicu

vpisala v spremenljivko BytesReturned. Naeloma bosta vrednosti BytesToRead in

BytesReturned enaki. Tukaj nastopi svojo vlogo iztek asa (timeout), ki je privzeto ena

sekunda, sicer pa ga lahko nastavimo tudi na ve ali manj. Zgodi se lahko namre, da

zahtevamo 1000 zlogov, dobimo pa jih manj, zadnjih (priakovanih) zlogov pa naprava na

drugem koncu nikoli ne pošlje. Aplikacija bi v tem primeru akala neskonno asa. Vendar ko

potee as izteka, se program vrne iz klica kljub manjšemu številu zlogov, pri emer v

BytesReturned vrne število dejansko prejetih zlogov. To je sedaj manjše od zahtevanega

števila zlogov in naloga aplikacije je, da to tudi upošteva.

Metoda je za naše potrebe preobremenjena še z deklaracijo, ki za vmesni pomnilnik buffer

dovoljuje tudi netipiziran kazalec (pointer).

3.4.5 FT_Write Zapiše poljubno število zlogov z ukazom FT_Open predhodno odprte naprave.

Deklaracija:

1 2 3

function FT_Write(Handle: Dword; var Buffer; BytesToWrite: Dword; var BytesWritten: Dword): FT_Result; stdcall; external FT_DLL_Name name ‘FT_Write’;

Parametri:

Handle – spremenljivka, kamor smo pri odpiranju z ukazom FT_Open shranili roico naprave

Buffer – prostor, kjer akajo podatki za odpošiljanje

BytesToWrite – število zlogov, ki jih želimo poslati

BytesWritten – število dejansko poslanih zlogov po klicu

Page 33: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 33

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Primer klica:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

// predpostavljamo, da je roica v spremenljivki handle in da je naprava odprta function PosljiNiz: boolean; var s: string[49]; dolzina: cardinal; rezultat: FT_Result; begin // pazimo, pascal ima kot prvi zlog navadnega niza namenjeno dolžini niza, // t.j. s[0] je zlog, ki je enak dolžini niza in SizeOf(s) je enako 50 // toda prostora je samo za 49 znakov (torej maksimalna vrednost length(s) je 49) // pošiljamo toliko zlogov, kolikor jih vsebuje niz s rezultat = FT_Write(handle, s[1], length(s),dolzina); // e smo uspeli kaj poslati, bo rezultat enak 0 in dolžina enaka številu poslanih zlogov PosljiNiz:= (rezultat = FT_OK) and (dolzina = length(s)); end;

Podobno, kot pri branju, je tukaj pri pisanju. V primeru, ko objemalec podatkov s

podatkovnega vodila dalj asa ne pobere podatkov iz vmesnega pomnilnika 245BM, se pri

pisanju veje koliine podatkov lahko zgodi, da bo aplikacija v akanju na zakljuek pisanja

obstala precej ve asa, kot bi bilo zaželjeno. Tu spet nastopi as izteka, ko se izvajanje

programa po preteku tega asa iz knjižnice prenese nazaj v aplikacijo: Po klicu dobimo

podatek, koliko zlogov je bilo dejansko vpisano. V primeru, ko pride do izteka, je število

dejansko zapisanih zlogov vedno manjše od števila zlogov, ki smo jih hoteli zapisati na USB.

Spet je naloga aplikacije, da predvidi take primere in da na njih primerno reagira.

Metoda je za naše potrebe preobremenjena še z deklaracijo, ki za vmesni pomnilnik buffer

dovoljuje tudi netipiziran kazalec (pointer).

3.4.6 FT_SetBitMode Postavi vezje v druge naine delovanja.

Deklaracija:

1 2

function FT_SetBitMode(Handle: Dword; Mask: byte; Enable: byte): FT_Result; stdcall; external FT_DLL_Name name ‘FT_SetBitMode’;

Parametri:

Handle – spremenljivka, kamor smo pri odpiranju z ukazom FT_Open shranili roico naprave

Mask – zlog, igar biti doloajo usmerjenost pina na vodilu, 1 pomeni izhod, 0 pomeni vhod

Enable – zlog, ki doloa nain delovanja integriranega vezja FT245BM

• 0 – normalno delovanje

• 1 – bit-bang nain

• obstajajo tudi drugi naini delovanja pri drugih napravah, ki uporabljajo isto knjižnico

Page 34: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 34

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Primer klica:

1 2 3 4 5 6 7 8 9 10 11 12

// predpostavljamo, da je roica v spremenljivki handle in da je naprava odprta function VklopiBitBangNacin: boolean; begin // vklopi bit-bang nain z vsemi pini nastavljenimi na izhod VklopiBitBangNacin:= FT_SetBitMode(handle, $FF, 1) = FT_OK; end; function IzklopiBitBangNacin: boolean; begin // izklopi bit-bang nain IzklopiBitBangNacin:= FT_SetBitMode(handle, 0, 0) = FT_OK; end;

Funkcija je namenjena v prvi vrsti preklopom med razlinimi naini delovanja integriranih

vezij iz družine FTDIjevih USB izdelkov. V primeru 245BM je to funkcija, ki omogoa preklop

iz navadnega v bit-bang nain delovanja in nazaj, obenem pa pri bit-bang nainu opredeli,

kateri pini podatkovnega vodila bodo imeli vlogo vhoda in kateri vlogo izhoda. To povemo s

parametrom Mask, kjer enice pomenijo izhod in nile pomenijo vhod. Tako vrednost $FF

pomeni, da bodo vsi pini prevzeli vlogo izhoda in $00 da bodo vsi pini prevzeli vlogo vhoda.

Parameter Enable pove, v kateri nain bomo preklopili. Vrednost 0 pomeni resetiranje vezja

in s tem prehod v normalen nain delovanja, vrednost 1 pa pomeni bit-bang nain.

3.4.7 FT_GetBitMode Preveri stanje pinov na podatkovnem vodilu.

Deklaracija:

1 2

function FT_GetBitMode(Handle: Dword; var Mode: byte): FT_Result; stdcall; external FT_DLL_Name name ‘FT_GetBitMode’;

Parametri:

Handle – spremenljivka, kamor smo pri odpiranju z ukazom FT_Open shranili roico naprave

Mode – spremenljvka tipa byte, kamor se bo med klicem shranilo stanje pinov na

podatkovnem vodilu

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Primer klica:

1 2 3 4 5 6 7 8 9

// predpostavljamo, da je roica v spremenljivki handle in da je naprava odprta var stanje: byte; function PreberiStanje: boolean; begin // vklopi bit-bang nain z vsemi pini nastavljenimi na izhod PreberiStanje:= FT_GetBitMode(handle, stanje) = FT_OK; end;

Page 35: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 35

Funkcija ima nekoliko nerodno izbrano ime. Po imenu bi lahko lovek sodil, da z njo lahko

pogledamo, v katerem nainu delovanja deluje integrirano vezje. Vendar temu ni tako.

Funkcija v spremenljivko Mode vrne vrednost loginih stanj na pinih podatkovnega vodila, ne

glede na to, ali je pin izbran kot vhod ali kot izhod.

3.4.8 FT_SetBaudRate Nastavi hitrost spreminjanja izhodov v bit-bang nainu. Hitrost spreminjanja je v baudih

(znakih na sekundo).

Deklaracija:

1 2

function FT_SetBaudRate(Handle: Dword; BaudRate: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_SetBaudRate';

Parametri:

Handle – spremenljivka, kamor smo pri odpiranju z ukazom FT_Open shranili roico naprave

BaudRate – hitrost prenosa v baudih, najve 3.000.000 baudov

Rezultat klica: FT_OK, e je klic uspel, sicer koda napake.

Primer klica:

1 2 3 4 5 6 7 8 9 10 11 12

// predpostavljamo, da je roica v spremenljivki handle in da je naprava odprta var a: array [0..153599] of byte; // blok podatkov, namenjenih na izhod USB dejansko: Cardinal; // število dejansko zapisanih znakov na USB po // FT_Write ukazu function NastaviHitrost: boolean; begin // hitrost spreminjanja podatkov na podatkovnem vodilu je 9600*16 = 153600 bytov na sekundo NastaviHitrost:= FT_SetBaudRate(handle, 9600) = FT_OK; //naslednji paket podatkov bo zadostoval za eno sekundo FT_Write(handle, a, SizeOf(a), dejansko); end;

V dokumentaciji primerov je navedeno, da je treba hitrost v baudih množiti17 s 16, da bi dobili

dejansko hitrost sprememb na podatkovnem vodilu. Eksperimentalno tega nismo mogli

potrditi18.

17 [5] Application Note AN232BM-01, str.1 18 glej primer 3 na str. 41.

Page 36: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 36

4. Primeri uporabe modula DLP-245M V nadaljevanju bomo prikazali šest preprostih primerov uporabe modula DLP-245M v

programskem jeziku Delphi in (v primeru programa za mikrokrmilnik) programskem jeziku C.

V vsakem primeru bomo navedli cilj primera, opisali vezavo, predstavili program, komentirali

njegovo delovanje in predlagali potencialne izboljšave, razširitve ali alternativne primere.

4.1 Primer 1: Enumeracija, odpiranje in zapiranje USB naprav Cilj prvega primera je ugotoviti število, opis, lokacije in serijske številke FTDIjevih naprav (v

nadaljevanju: naprav), poiskati, odpreti in zapreti vsako od njih in oz. ugotoviti, ali je kakšna

sploh prikljuena.

Knjižnica FTD2XX.DLL omogoa ve nainov odpiranja neke naprave. Napravo lahko

odpremo glede na opis ali lokacijo na USB vodilu, lahko pa tudi glede na njeno serijsko

številko, kar nastavimo v programu MProg19 (Slika 3.3), vendar le v primerih, ko uporabljamo

modul DLP–245M ali pa, ko imamo na integrirano vezje FT245BM vezan še EEPROM

93C46, Program MProg omogoa vpis opisnega niza naprave, serijske številke ter še

nekaterih drugih parametrov delovanja.

Opozorilo!

V tem in drugih primerih je zaželeno, da s pomojo programa MProg modul nastavimo

na napajanje iz vodila (Bus powered) in primerno porabo (npr. 500mA).

Priloga na CD–ROMu: Mapa: CDROM:\Primeri\Primer 1 Izvršna datoteka: CDROM:\Primeri\Primer 1\Primer1.exe Dokumentacija: CDROM:\Dokumentacija\DLP-USB245M User Manual (02.02.2006).pdf

4.1.1 Vezava Vezava je v tem primeru silno preprosta (Slika 4.1). Modul DLP–245M (v nadaljevanju:

modul) vstavimo v prototipno plošo ter med seboj povežem pina 11 (EXTVCC) in 12

(PORTVCC). S tem modulu zagotovimo napajanje (4.4 – 5.25V) kar iz USB vodila. V tem

nainu lahko napajamo s pina PORTVCC vezja, ki za delovanje potrebujejo do 500mA.

19 Glej tudi poglavje 3.3.

Page 37: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 37

Slika 4.1: Shema vezja primera 1

4.1.2 Program V programu bomo uporabili enoto FTD2XX.pas in njene izvedbe klicev v knjižnico

FTD2XX.DLL. To enoto bomo uporabljali tudi v prihodnje.

1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

unit EnotaPrimera1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, FTD2XX; type TForm1 = class(TForm) Zurnal: TMemo; GumbPoisciNaprave: TButton; procedure GumbPoisciNapraveClick(Sender: TObject); private Private declarations public Public declarations end; var Form1: TForm1; implementation $R *.DFM procedure TForm1.GumbPoisciNapraveClick(Sender: TObject); var i: Cardinal; rezultat: FT_Result; naprav: Cardinal; sn: string; opis: string; rocica: Cardinal; begin rezultat:= FT_GetNumDevices(naprav); if rezultat<> FT_OK then begin Zurnal.Lines.Append('Poizvedba o številu naprav ni uspela. Spiska naprav ni mogoe dobiti.'); Exit; end; Zurnal.Lines.Append('Število prikljuenih FTDI USB vmesnikov je '+IntToStr(naprav)+ '.'); for i:= 0 to naprav-1 do begin if FT_GetDescription(i, opis)= FT_OK then begin if FT_GetSerialNumber(i, sn)= FT_OK then begin Zurnal.Lines.Append(' Naprava št.'+IntToStr(i)+' je '+opis+', serijska številka '+ sn+'.'); if FT_Open(i, rocica)= FT_OK then begin Zurnal.Lines.Append(' Odpiranje naprave je uspelo.');

Page 38: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 38

51 52 53 54 55 56 57 58 59 60 61 62 63 64

if FT_Close(rocica)= FT_OK then Zurnal.Lines.Append(' Zapiranje naprave je uspelo.') else Zurnal.Lines.Append(' Zapiranje naprave je uspelo.'); end else Zurnal.Lines.Append(' Odpiranje naprave ni uspelo!!!'); end else Zurnal.Lines.Append(' Zaradi napake ni bilo možno pridobiti serijske številke.'); end else Zurnal.Lines.Append(' Zaradi napake ni bilo možno pridobiti opisa naprave.'); end; end; end.

4.1.3 Delovanje in komentar Program je dokaj enostaven. S klikom na gumb Poiši naprave (Slika 4.2) sprožimo metodo

(26), ki v gradnik Zurnal med sporoila vpiše, koliko naprav je prikljuenih. Metoda po

ugotavljanju števila naprav (35) za vsako napravo (43) pridobi njen opis (44) in serijsko

številko (45), e ti podatki seveda obstajajo v EEPROMu modula.

Slika 4.2: Okno primera 1

e je pridobitev vseh podatkov uspela, izpišemo vrstico z indeksom naprave, njen opis in

serijsko številko (46). Sledi poskusno odpiranje (48) in zapiranje (50) naprave, da bi s tem

potrdili njeno prisotnost. e so klici uspeli, o tem tudi izpišemo obvestila (49, 51), prav tako

izpišemo obvestila, e nismo uspeli dobiti serijske številke (56) ali opisa naprave (58).

4.2 Primer 2: Bit-bang nain V drugem primeru želimo krmiliti 8 svetleih diod – želimo jih prižigati in ugašati vsako

posebej. V tem primeru se moramo poslužiti t.i. bit-bang naina delovanja. V tem nainu se

stanja pinov na podatkovnem vodilu FT245BM neposredno prilagajajo podatkom, ki prihajajo

po USB vodilu. Nain je nadvse uporaben za neposredno krmiljenje in upravljanje

elektronskih in elektromehanskih naprav ter integriranih vezij, ki delujejo po drugih protokolih,

kot sta npr I2C ali SPI.

Kot vemo, FTDI-245BM deluje kot FIFO vmesnik med napravo in USB vodilom. Denimo, da

mu osebni raunalnik pošilja vejo koliino podatkov. 128 zlogov si ip lahko zapomni zaradi

vgrajenega vmesnega pomnilnika. Ko je ta poln, se dotok podatkov iz raunalnika ustavi. Da

bi se vmesni predpomnilnik spraznil, moramo tedaj preklapljati /RD signal in ob vsakem

Page 39: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 39

preklopu iz 1 na 0 dobimo na podatkovnem vodilu nov zlog iz vmesnega pomnilnika. Bit-

bang nain slednjo omejitev odpravi tako, da se podatki prenašajo na vodilo s hitrostjo, ki jo

doloa t.i. baud rate generator (glej tudi primer 3, str.41). Ko podatkov zmanjka, se stanje na

pinih ohrani kot je bilo pri zadnjem podatku.

Priloga na CD–ROMu: Mapa: CDROM:\Primeri\Primer 2 Izvršna datoteka: CDROM:\Primeri\Primer 2\Primer2.exe Dokumentacija: CDROM:\Dokumentacija\DLP-USB245M User Manual (02.02.2006).pdf CDROM:\Dokumentacija\AN232B-01_BitBang (1.0).pdf CDROM:\Dokumentacija\Data Sheet 29304.3E - 2803 THRU 2824, HIGH-VOLTAGE,

HIGH-CURRENT DARLINGTON ARRAYS.pdf

4.2.1 Vezava:

Slika 4.3: Shema vezja primera 2

Slika 4.3 kaže vezavo našega primera. Modul priklopimo kot v primeru 1. Dodatno med seboj

povežemo tudi pina VCCIO in VCCEXT. Ker naeloma ni pametno priklapljati porabnike

neposredno na vodilo in še posebej, ker v dokumentaciji ni navedenih podatkov o

maksimalnih tokovih izvora in ponora na pinih podatkovnega vodila (D0 do D7), uporabimo

vezje ULN 2803A (darlington array). Na vhodne pine ULN2803A20 vežemo pine

podatkovnega vodila, na vsak izhodni pin pa vežemo primeren upor in svetleo diodo v

20 [9] Data Sheet 29304.3E: 2803 THRU 2824, HIGH-VOLTAGE, HIGH-CURRENT DARLINGTON ARRAYS

Page 40: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 40

zaporedni vezavi. Napajanje diod lahko zagotovimo kar iz USB vodila preko primernih

uporov za napajalno napetost 5V, saj USB prikljuek lahko zagotavlja napajanja do 500mA21.

4.2.2 Program 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

unit EnotaPrimera2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, FTD2XX; type Tform1 = class(Tform) GumbBit0: TspeedButton; GumbBit1: TspeedButton; GumbBit2: TspeedButton; GumbBit3: TspeedButton; GumbBit4: TspeedButton; GumbBit5: TspeedButton; GumbBit6: TspeedButton; GumbBit7: TspeedButton; procedure GumbBitClick(Sender: Tobject); procedure FormHide(Sender: Tobject); procedure FormShow(Sender: Tobject); private Private declarations USBHandle: Thandle; public Public declarations end; var Form1: Tform1; implementation $R *.DFM procedure Tform1.GumbBitClick(Sender: Tobject); var rezultat : FT_Result; zapisanih : Dword; n: byte; begin if USBHandle = 0 then Exit; if GumbBit0.Down then n:= 1; if GumbBit1.Down then n:= n + 2; if GumbBit2.Down then n:= n + 4; if GumbBit3.Down then n:= n + 8; if GumbBit4.Down then n:= n + 16; if GumbBit5.Down then n:= n + 32; if GumbBit6.Down then n:= n + 64; if GumbBit7.Down then n:= n + 128; rezultat:= FT_Write(USBHandle, n, 1, zapisanih); end; procedure Tform1.FormHide(Sender: Tobject); var rezultat: FT_Result; begin rezultat := FT_Close(USBHandle); USBHandle := 0; if rezultat <> 0 then begin Exit; end; Application.MessageBox(‘Naprava uspešno zaprta!’, Pchar(Caption), 0); end; procedure Tform1.FormShow(Sender: Tobject); var

21 [2] DLP-USB245M User Manual, stran 7, PORTVCC

Page 41: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 41

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

rezultat: FT_Result; begin rezultat := FT_Open(0, USBHandle); if rezultat <> 0 then begin USBHandle := 0; Exit; end; Application.MessageBox(‘Naprava uspešno odprta!’, Pchar(Caption), 0); // vklopimo bit-bang nain rezultat := FT_SetBitMode(USBHandle, $FF, 1); if rezultat <> 0 then Application.MessageBox(‘Bit-bang nain je spodletel!’, Pchar(Caption), 0); end; end.

4.2.3 Delovanje in komentar

Slika 4.4: Okno primera 2

Okno programa (Slika 4.4) je sestavljeno iz osmih gumbov tipa TSpeedButton (11 – 18),

vsak od njih ima OnClick dogodek vezan na metodo GumbBitClick. USB odpremo že pri

prikazovanju obrazca z metodo FormShow (67) in zapremo ob skrivanju (zapiranju) z

metodo FormHide (54). V teh dveh metodah ob uspešnem odpiranju in zapiranju prikažemo

obvestilo z opisom napake (77 in 64). Ko napravo odpremo (72), preklopimo nain delovanja

v bit-bang nain (79). e vklop bit-bang naina ni uspel (81), ravno tako prikažemo

obvestilo. Ko napravo zapremo, postavimo spremenljivko USBHandle na 0 (60), saj nam

signalizira, ali je naprava odprta (e je vrednost razlina od 0) ali zaprta (e je enaka 0). Ob

kliku na katerikoli gumb se sproži metoda GumbBitClick (35). Tu raunalnik najprej preveri,

e je naprava sploh odprta (42) – tedaj je spremenljivka USBHandle enaka 0 – in e ni, takoj

zapusti metodo. e pa je odprta, v vrsticah od 43–50 naraunamo vrednost zloga po

gumbih, ki so vklopljeni. Konno v vrstici 51 tako dobljeno vrednost v spremenljivki n

vpišemo na USB ter glede na to vrednost istoasno krmilimo 8 svetleih diod.

Možne izboljšave:

Namesto posameznih svetleih diod lahko uporabimo segmentni LED prikazovalnik za

prikazovanje številke. Z uporabo BCD (binary-coded decimal) dekoderja lahko tako krmilimo

do dva taka prikazovalnika in prikazujemo številke od 0 do 99 oz. 00 do FF.

4.3 Primer 3: Funkcijski generator sinusne, trikotne in pravokotne napetosti

V tem primeru bomo prikazali, kako na podatkovnem vodilu modula spreminjamo vrednost v

tono doloenih asovnih korakih. Uporabili bomo bit-bang nain in nastavili hitrost menjanja

vrednosti na izhodih modula. Bit-bang nain in vmesni pomnilnik v FT245BM namre

Page 42: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 42

omogoata, da pošljemo ve podatkov naenkrat, pri emer se podatki na podatkovnem

vodilu ipa menjajo pri prehodih notranje ure iz nizkega v visoko stanje22. Kot bomo videli,

hitrost preklapljanja doloamo v klicih funkcije FT_SetBaudRate.

Priloga na CD–ROMu: Mapa: CDROM:\Primeri\Primer 3 Izvršna datoteka: CDROM:\Primeri\Primer 3\Primer3.exe Dokumentacija: CDROM:\Dokumentacija\DLP-USB245M User Manual (02.02.2006).pdf CDROM:\Dokumentacija\AN232B-01_BitBang (1.0).pdf

4.3.1 Vezava Modul prikljuimo na VCC 5V, ozemljitev, pina VCCIO in VCCEXT vežemo na PORTVCC

(Slika 4.5). Na podatkovno vodilo vežemo nek 8-bitni vzporedni digitalno analogni pretvornik

(DAC), na njegov izhod pa operacijski ojaevalnik. Na izhod ojaevalnika prikljuimo

osciloskop in opazujemo signal.

Slika 4.5: Shema vezja primera 3

4.3.2 Program

1 2 3 4 5 6 7 8 9 10 11 12 13 14

unit EnotaPrimera3; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, FTD2XX, Math, Spin; type TForm1 = class(TForm) GumbGeneratorVklopIzklop: TButton; Timer: TTimer; IzborGeneratorja: TRadioGroup; SpinEdit1: TSpinEdit;

22 eprav nimamo nikjer potrditve, predvidevamo, da se v tem primeru pin /RD, ki skrbi za prenos podatkov na podatkovno vodilo iz vmesnega pomnilnika, za ta primer uporabe prikljui na nek interni vir impulzov (ura ali števec impulzov).

Page 43: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 43

15 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

OznakaFrekvenca: TLabel; procedure GumbGeneratorVklopIzklopClick(Sender: TObject); procedure TimerTimer(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); private Private declarations USB_Handle : Cardinal; vzorec: Cardinal; public Public declarations end; var Form1: TForm1; frekvenca : double = 1; const // hitrost za klic FT_SetBaudRate, dejansko potrebujemo 16x toliko vzorcev baudov: Cardinal = 9600; //konstante za izbiro vrste generatorja napetosti igSinusnaNapetost = 0; igTrikotnaNapetost = 1; igPravokotnaNapetost = 2; implementation $R *.DFM procedure TForm1.GumbGeneratorVklopIzklopClick(Sender: TObject); var rezultat: FT_Result; begin if USB_Handle>0 then begin FT_Close(USB_Handle); USB_Handle:= 0; GumbGeneratorVklopIzklop.Caption:= 'Vklop'; end else begin FT_Open(0, USB_Handle); // nastavimo hitrost prenosa rezultat:= FT_SetBitMode(USB_Handle,$FF, 1) or FT_SetBaudRate(USB_Handle, baudov); if rezultat<> 0 then begin Application.MessageBox('Napaka pri odpiranju in nastavitvi hitrosti prenosa', PChar(Caption), MB_OK); FT_Close(USB_Handle); USB_Handle:= 0; Exit; end; GumbGeneratorVklopIzklop.Caption:= 'Izklop'; end; end; procedure TForm1.TimerTimer(Sender: TObject); var rezultat: FT_Result; // doloimo velikost vmesnega pomnilnika a: array [0..3999] of byte; i: Cardinal; dejansko: Cardinal; y, w: double; begin if USB_Handle = 0 then Exit; for i:= 0 to SizeOf(a) - 1 do begin // w je številka tekoega vzorca, preslikana na interval od 0 do 1 // pri tem upoštevamo, da moramo glede FT_SetBaudRate za dejansko število // vzorec množiti vrednost baudov s 16 w:= Frac(vzorec / (16 * baudov) * frekvenca); // raunamo krivulje case IzborGeneratorja.ItemIndex of igSinusnaNapetost: y:= 127 * sin(2 * Pi * w) + 127; igtrikotnanapetost: y:= Abs(256 * w - 127); igPravokotnaNapetost: if w>=(0.5) then y:=255 else y:= 0; end; a[i]:= Trunc(y); Inc(vzorec); end; // pošljimo podatke na USB in preverimo, e se je dejansko zapisalo toliko // zlogov, kolikor je velik vmesni pomnilnik a rezultat:= FT_Write(USB_Handle, a, SizeOf(a), dejansko);

Page 44: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 44

94 95 96 97 98 99

100 101 102 103 104 105 106

if (rezultat <> 0) or (dejansko <> SizeOf(a)) then begin // nekaj je šlo narobe Application.MessageBox('Napaka pri pisanju na USB!',PChar(Caption), MB_OK); FT_Close(USB_Handle); USB_Handle:= 0; end; end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin frekvenca:= SpinEdit1.Value; end; end.

4.3.3 Delovanje in komentar

Slika 4.6: Okno primera 3

Okno programa vsebuje ve elementov. Prvi je TSpinEdit za nastavljanje frekvence, ki ne

igra druge vloge, kot da v vrstici 98 spreminja vrednost spremenljivke frekvenca v mejah od

1 do 50. Sledi skupina radiogumbov, ki je namenjena doloanju oblike generiranega signala.

V vrsticah od 35–37 so v povezavi s to skupino doloene konstante za vsako od nastavitev.

isto na dnu je tipka Vklop/Izklop , s katero odpiramo in zapiramo USB napravo. Ko pritisnemo

to tipko, sprožimo metodo GumbGeneratorVklopIzklopClick. Metoda najprej pogleda, e je

spremenljivka USB_Handle enaka 0 (46). Spremenljivka nam z vrednostjo, razlino od 0,

signalizira, da je naprava odprta in z vrednostjo enako 0, da je naprava zaprta. e je naprava

odprta (46) in USB_Handle razlina od 0, pomeni, da moramo ob pritisku napravo zapreti

(47), spremeniti napis na tipki v Izklop (49) ter spremenljivko USB_Handle postaviti na 0

(48), da bomo imeli nekje zapisano, da smo napravo tudi v resnici zaprli. V nasprotnem

primeru (50) moramo napravo odpreti (51), preklopiti v bit-bang nain delovanja in nastaviti

primerno hitrost izmenjave podatkov s FT_SetBaudRate (53). e je prišlo kjerkoli vmes do

napake, bo vrednost rezultat razlina od 0 (54) ter s tem razlog, da javimo napako (55). e

do napake pride, vedno poskusimo napravo tudi zapreti (57) ter za signalizacijo USB_Handle

postavimo nazaj na 0 (58). e pa je odpiranje uspelo, moramo spremeniti tudi napis na

gumbu (61). S tem smo odpravili z odpiranjem in zapiranjem naprave ter signalizacijo, kdaj je

odprta in kdaj zaprta.

Metoda TimerTimer se izvaja približno na vsakih 10ms (e je raunalnik prost, sicer as

variira). Ob sprožitvi najprej pogledamo, e je USB naprava odprta – e je USB_Handle enak

Page 45: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 45

0, pomeni da je naprava zaprta in v tem primeru izstopimo iz metode (75). Sicer pa se

spravimo k pripravi vmesnega pomnilnika a. Zanko ponavimo tolikokrat, kolikor je zlogov v

polju a (76). Najprej izraunamo, v katerem delu vzorca se pravzaprav nahajamo (80).

Spremenljivka vzorec namre šteje, koliko vzorcev je bilo izraunanih in kateri je naslednji

vzorec, ki se rauna. Za vrednost spremenljivke w vzamemo celi del kolinika med številko

tekoega vzorca in številom vzorcev na sekundo. S tem nainom v spremenljivki w

postopoma dobivamo narašajoo vrednost na intervalu med 0 in 1 (80). Graf teh vrednosti

bi bil žaga. Nato glede na vrsto izbranega signala (82) izraunamo vrednost zloga, ki ga

bomo dali v vmesni pomnilnik (87). Ker zaokrožanje prinaša samo težave, za vrednost zloga

a[i] raje vzamemo kar celi del vrednosti y. V vrsticah od 83–85 glede na izbrano vrsto signala

izraunamo vrednost y kot funkcije, ki preslikuje z intervala 0 do 1 na interval od 0 do 255.

isto na koncu poveamo spremenljivko vzorec, da bomo v naslednji iteraciji izraunali

vrednost naslednjega vzorca (88). Po vseh iteracijah smo pripravljeni, da vmesni pomnilnik

zapišemo na USB napravo (92). e v spremenljivki rezultat po pisanju ni vrednosti 0 ali e je

število dejansko zapisanih zlogov manjše od velikosti vmesnega pomnilnika a (93), tedaj je

pri pisanju prišlo do napake, ki jo nato tudi najavimo (95) (eprav jo je v takih metodah

praviloma ne prikazujemo na tak nain, temve jo raje zapišemo v kak journal), zapremo

napravo (96) in postavimo USB_Handle na 0 (97).

Pri tem primeru se ne obremenjujemo s koliino poslanih podatkov, eprav se metoda

TimerTimer izvaja vsakih 10ms. Razlog je, da e je vmesni pomnilnik za pošiljanje zlogov

poln, metoda FT_Write aka, da se iztee as izteka (timeout), ki je privzeto nastavljen na

16ms. Kaže da s tem asom ni mišljen povratek iz klica funkcije, temve pride do

prekoraitve asa izteka, e v teh 16ms ne pride do praznenja vmesnega pomnilnika. Dokler

so na voljo podatki za pošiljanje in pri tem ne pride do prekoraitve asa izteka, se program

ne vrne iz klica funkcije, program pa tako spusti nekaj naslednjih dogodkov TimerTimer, vse

dokler se program ne vrne nazaj v metodo in dokona njen klic.

Pri preizkušanju se je pokazala verjetna napaka v dokumentaciji. Namre v primeru uporabe

bit-bang naina dokumentacija podjetja navaja23, da se podatki na podatkovnem vodilu

spreminjajo s 16-kratnikom hitrosti prenosa, nastavljene s klicem funkcije FT_SetBaudRate

ter da je tako možno dosei prenos 48 MB/s. V našem primeru tega nismo mogli

eksperimentalno potrditi, vse pa kaže, da gre v resnici za štirikratnik te hitrosti ter da je tako

konna in maksimalna hitrost 12MB/s. Možno je sicer, da v dokumentaciji omenjena hitrost

sprememb ne velja zgolja za FT245BM, vendar to ni nikjer posebej navedeno.

Možne izboljšave:

23 [5] Application Note AN232BM-01, str. 1, FT_SetBaudRate

Page 46: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 46

Program je pisan tako, da je za poveanje resolucije vzorenja dovolj spremeniti globalno

konstanto »baudov« (32), preprosto pa lahko dodamo še druge oblike signalov (35, 83), saj

imamo funkcijo žage že podano v spremenljivki w (80). Pri tem moramo paziti še na koliino

vzorcev (69), ki jih naenkrat pošiljamo, da ne poidejo v 10ms, kolikor traja, da se ponovno

sproži dogodek TimerTimer.

4.4 Primer 4: Upravljanje svetleih diod s stikali V tem primeru bi radi s pomojo tipk prižigali in ugašali svetlee diode. Raunalnik bo

spremljal stanje na štirih vhodih (D0 – D3) in ustrezno prižgal ali ugasnil svetleo diodo na

izhodih (D4 – D7) takrat, ko bomo pritisnili tipko na protoploši. Pri tem bo na oknu programa

(Slika 4.6 na strani 44) prikazoval stanje vsake od tipk (ali pritisnjena ali spušena) in stanje

vsake od svetleih diod (kljukica pri oznaki »Lu«, e je le ta vklopljena in brez kljukice, e je

izklopljena).

Priloga na CD–ROMu: Mapa: CDROM:\Primeri\Primer 4 Izvršna datoteka: CDROM:\Primeri\Primer 4\Primer4.exe Dokumentacija: CDROM:\Dokumentacija\DLP-USB245M User Manual (02.02.2006).pdf CDROM:\Dokumentacija\AN232B-01_BitBang (1.0).pdf CDROM:\Dokumentacija\Data Sheet 29304.3E - 2803 THRU 2824, HIGH-VOLTAGE,

HIGH-CURRENT DARLINGTON ARRAYS.pdf

4.4.1 Vezava Kot že v prejšnjih primerih tudi zdaj modul prikljuimo na VCC 5V, ozemljitev, pina VCCIO in

VCCEXT pa vežemo PORTVCC (Slika 4.7). Diode zaradi varnosti vežemo kar preko

ULN2803A, na njegove vhode pa prikljuimo pine s podatkovnega vodila od D4 do D7. Štiri

tipke po eni strani prikljuimo na ozemljitev, na drugi pa neposredno na pine D0 do D3.

e vežemo tako, kot kaže spodja shema, moramo modul s pomojo programa MProg

nastaviti na napajanje iz vodila in primerno porabo (glej poglavje 3.3).

Page 47: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 47

Slika 4.7: Shema vezave primera 4

4.4.2 Program

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29 30 31 32 33 34

unit EnotaPrimera4; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, FTD2XX; type TForm1 = class(TForm) Timer: TTimer; Gumb1: TSpeedButton; Gumb2: TSpeedButton; Gumb3: TSpeedButton; Gumb4: TSpeedButton; Luc1: TCheckBox; Luc2: TCheckBox; Luc3: TCheckBox; Luc4: TCheckBox; procedure FormHide(Sender: TObject); procedure FormShow(Sender: TObject); procedure TimerTimer(Sender: TObject); private Private declarations USBHandle: THandle; PrejsnjaVrednost: Byte; public Public declarations end; var Form1: TForm1; implementation

Page 48: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 48

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

$R *.DFM procedure TForm1.FormHide(Sender: TObject); begin if USBHandle = 0 then Exit; FT_Close(USBHandle); USBHandle:= 0; end; procedure TForm1.FormShow(Sender: TObject); begin FT_Open(0, USBHandle); // nastavimo bit-bang nain, 4 izhodi (D4-D7) in 4 vhodi (D0 – D3) FT_SetBitMode(USBHandle, $F0, 1); end; procedure TForm1.TimerTimer(Sender: TObject); var stanje: Byte; dejansko: Cardinal; begin // e port ni bil odprt, se ne sme ni dogajati if USBHandle = 0 then Exit; // vzamemo stanje s podatkovnega vodila FT_GetBitMode(USBHandle, stanje); // za vsako stikalo pogledamo, ali je bilo prej pritisnjeno // e ni bilo, zdaj pa je, obrnemo stanje svetlee diode (a-la D flipflop) if $01 = ($01 and (PrejsnjaVrednost and not stanje)) then stanje:= stanje xor $10; if $02 = ($02 and (PrejsnjaVrednost and not stanje)) then stanje:= stanje xor $20; if $04 = ($04 and (PrejsnjaVrednost and not stanje)) then stanje:= stanje xor $40; if $08 = ($08 and (PrejsnjaVrednost and not stanje)) then stanje:= stanje xor $80; // pošljimo izhodne vrednosti na USB FT_Write(USBHandle, stanje, SizeOf(stanje), dejansko); // zapomnimo si stanje stikal PrejsnjaVrednost:= stanje; // signalizirajmo, v katerem stanju so tipke na protoploši Gumb1.Down:= not ((stanje and $1)>0); Gumb2.Down:= not ((stanje and $2)>0); Gumb3.Down:= not ((stanje and $4)>0); Gumb4.Down:= not ((stanje and $8)>0); // signalizirajmo, v katerem stanju so lui Luc1.Checked:= (stanje and $10)>0; Luc2.Checked:= (stanje and $20)>0; Luc3.Checked:= (stanje and $40)>0; Luc4.Checked:= (stanje and $80)>0; end; end.

4.4.3 Delovanje in komentar: Ravno tako, kot v primeru 2 na strani 38, se tudi tukaj spravljamo k odpiranju in zapiranju

naprave že pri prikazovanju in skrivanju okna (Slika 4.8). Kar je drugae, je specifikacija,

kateri pini podatkovnega vodila služijo kot vhod in kateri kot izhod. To naredimo v vrstici 48,

kjer vrednost $F0 pomeni, da zgornji štirje biti vodila služijo kot izhodi, spodnji pa kot vhodi.

Vrednost 1 kot zadnji parameter pomeni vklop bit-bang naina.

Slika 4.8: Okno primera 4

Page 49: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 49

Vse ostalo se dogaja v metodi TimerTimer (51). Tudi tu preverjamo s pomojo spremenljivke

USB_Handle, ali je naprava odprta ali ne. e je njena vrednost 0, naprava še ni odprta in

metodo lahko takoj zapustimo. V nasprotnem primeru nadaljujemo z branjem stanja na

podatkovnem vodilu s pomojo klica FT_GetBitMode (60). V vrsticah od 63 do 66

preverjamo, katera tipka je bila zdaj pritisnjena, prej pa ne ($01 = ($01 and (PrejsnjaVrednost

and not stanje)) itd). V tem primeru spremenimo stanje svetlee diode na ustreznem mestu v

nasprotno stanje (stanje:= stanje xor $10 itd), se pravi, e je bila prej prižgana, jo ugasnemo,

e pa je bila prej ugasnjena, jo prižgemo. Ko smo to enkrat opravili, še zapišemo novo

vrednost stanja nazaj na USB (68) in s tem ugasnemo oz. prižgemo ustrezne svetlee diode.

Zdajšnje stanje tipk shranimo v spremenljivko PrejšnjaVrednost (70). V vrsticah od 73 do 81

spremenimo še lastnosti gradnikov na obrazcu, da okno odseva stanje tipk in diod.

Možne izboljšave

Možnosti je veliko, ena bi bila izklapljanje lui po doloenem asu, lahko pa primer

predelamo za krmiljenje dveh enosmernih motorjev (uporabimo eno tipko za vklop/izklop,

drugo pa za smer).

4.5 Primer 5: AVR ISP s pomojo SPI in uporabo bit-bang naina Cilj tega primera je demonstrirati emulacijo SPI protokola v vlogi ISP (in-system

programming) naina programiranja mikrokrmilnika AVR ATMega16. To bomo storili v bit-

bang nainu delovanja. Ideja je, da po prikljuitvi mikrokrmilnika in po pritisku na gumb v

programu poakamo na pritisk tipke za resetiranje vezja, nato pa program izvede

identifikacijo prikljuenega mikrokrmilnika.

Priloga na CD–ROMu: Mapa: CDROM:\Primeri\Primer 5 Izvršna datoteka: CDROM:\Primeri\Primer 5\Primer5.exe Dokumentacija: CDROM:\Dokumentacija\DLP-USB245M User Manual (02.02.2006).pdf CDROM:\Dokumentacija\AN232B-01_BitBang (1.0).pdf CDROM:\Dokumentacija\ATmega16(L) (ver. M).pdf CDROM:\Dokumentacija\AVR910_In-System Programming.pdf

4.5.1 Vezava V tem primeru poleg modula potrebujemo še mikrokrmilnik AVR ATMega16. Modul

prikljuimo na VCC 5V, ozemljitev, pina VCCIO in VCCEXT vežemo PORTVCC, pine D0 –

D7 vežemo na PORTB mikrokrmilnika tako, da se številke pinov skladajo (Slika 4.9). Signal

/RST vežemo po eni strani preko upora na VCC, po drugi strani pa na stikalo, ki je na drugi

strani vezano na GND. /RST vežemo še neposredno na modul na pin D3. V taki vezavi je pin

MOSI vezan na D5, pin MISO na D6, pin SCK pa na pin D7 modula. Oznake in razpored

Page 50: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 50

pinov mikrokrmilnika ATMega16 najdemo v publikaciji24 ATmega16(L) na Atmelovi spletni

strani ter v priloženi dokumentaciji na CDROMu.

POZOR!

Napajanje mikrokontrolerja lahko vežemo na pin PORTVCC, e smo s programom

MProg modul nastavili na napajanje iz vodila (Bus powered) in primerno porabo (max.

500mA) – glej poglavje 3.3.

Slika 4.9: Shema vezave primera 5

4.5.2 Program

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

unit EnotaPrimera5; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, FTD2XX, ExtCtrls; type TForm1 = class(TForm) GumbVzpostaviPovezavo: TButton; Izpis: TMemo; ProizvajalecAtmel: TCheckBox; NacinProgramiranje: TCheckBox; procedure GumbVzpostaviPovezavoClick(Sender: TObject); private Private declarations USBHandle: THandle; public

24 [8] ATmega16(L), str.2

Page 51: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 51

20 21 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

Public declarations function PosljiInSprejmiZlog(b: Byte): Byte; end; var Form1: TForm1; const // definicije položajev signalov NRST: Byte = $08; MOSI: Byte = $20; MISO: Byte = $40; SCK: Byte = $80; implementation $R *.DFM TForm1 function TForm1.PosljiInSprejmiZlog(b: byte): byte; var a: array[0..1] of byte; c1,c2: byte; i: Integer; r: Byte; dejansko: Cardinal; begin result:= 0; if USBHandle = 0 then Exit; c1:= b; for i:= 0 to 7 do begin // nastavimo MSB if (b and $80)<>0 then a[0]:= MOSI else a[0]:= 0; // pulz SCK a[0]:= a[0] and not SCK; a[1]:= a[0] or SCK; // pošljemo signal if (FT_Write(USBHandle, a[0], 1, dejansko) <> 0) or (dejansko < 1) then Izpis.Lines.Append('Napaka pri pisanju na FTDI245BM'); //poakamo, da je SCK res 0 repeat if FT_GetBitMode(USBHandle, c2) <> FT_OK then Izpis.Lines.Append('Napaka pri branju z FTDI245BM.'); until (c2 and SCK) = 0; if (FT_Write(USBHandle, a[1], 1, dejansko) <> 0) or (dejansko < 1) then Izpis.Lines.Append('Napaka pri pisanju na FTDI245BM'); //poakamo, da je SCK res 1 repeat if FT_GetBitMode(USBHandle, c2) <> FT_OK then Izpis.Lines.Append('Napaka pri branju z FTDI245BM.'); until (c2 and SCK) = SCK; // porinemo bite eno mesto v levo b:= b * 2; r:= r * 2; // e ima MISO visok nivo, vkljuimo bit pri rezultatu if (c2 and MISO)<>0 then r:= r or 1; end; Izpis.Lines.Append('Poslano: '+ IntToHex(c1,2)+', prejeto: '+IntToHex(r,2)); result:= r; end; procedure TForm1.GumbVzpostaviPovezavoClick(Sender: TObject); var b: Byte; dejansko: Cardinal; begin // poskusimo odpreti, e ne gre, odnehamo (Exit) Izpis.Clear; Application.ProcessMessages; if FT_Open(0, USBHandle) = FT_OK then Izpis.Lines.Append('USB odprt.') else Exit; // SCK in MOSI sta izhoda, ostalo so zaenkrat vhodi...

Page 52: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 52

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

if FT_SetBitMode(USBHandle, SCK or MOSI, 1) = FT_OK then Izpis.Lines.Append('Vklopljen bit-bang nain.'); // preden ponemo karkoli, postavimo vse izhode na 0 (vsaj SCK) // od tu naprej ne kontroliramo napak pri delu z USB b:= 0; FT_Write(USBHandle, b, 1, dejansko); // akamo na reset Izpis.Lines.Append('Pritisni reset za zaetek!'); repeat FT_GetBitMode(USBHandle, b); until (b and NRST) = 0; Izpis.Lines.Append('Zaznan pritisk na reset!'); // "push" reset b:= SCK + MOSI + NRST; FT_SetBitMode(USBHandle, b, 1); b:= 0; FT_Write(USBHandle, b, 1, dejansko); Sleep(10); // podatke na SPI vodilo pošiljamo v skupinah po štiri zloge // med pošiljanjem že dobivamo povratno informacijo PosljiInSprejmiZlog($AC); PosljiInSprejmiZlog($53); NacinProgramiranje.Checked:= PosljiInSprejmiZlog($00) = $53; PosljiInSprejmiZlog($00); PosljiInSprejmiZlog($30); PosljiInSprejmiZlog($00); PosljiInSprejmiZlog($00); ProizvajalecAtmel.Checked:= PosljiInSprejmiZlog($00) = $1E; PosljiInSprejmiZlog($30); PosljiInSprejmiZlog($00); PosljiInSprejmiZlog($01); PosljiInSprejmiZlog($00); PosljiInSprejmiZlog($30); PosljiInSprejmiZlog($00); PosljiInSprejmiZlog($02); PosljiInSprejmiZlog($00); // NRST pin naj bo spet vhod, ostalo normalno, SCK je na logini 0 b:= SCK + MOSI; FT_SetBitMode(USBHandle, b, 1); b:= 0; FT_Write(USBHandle, b, 1, dejansko); // zapri USB if FT_Close(USBHandle) = 0 then Izpis.Lines.Append('USB zaprt.'); USBHandle:= 0; end; end.

4.5.3 Delovanje in komentar Ko pritisnemo gumb Vzpostavi povezavo (Slika 4.10), se izvede metoda

GumbVzpostaviPovezavoClick (87), kjer najprej poskusimo odpreti USB vrata. Potem, ko je

otvoritev uspela, v vrstici 99 vklopimo bit-bang nain, pri emer za digitalni izhod izberemo le

signala MOSI in SCK. /RST pustimo kot vhod, da bomo lahko v vrsticah 109 – 111 v zanki

preverjali, e je pritisnjena tipka za resetiranje mikrokrmilnika. Položaji signalov na pinih so

definirani kot konstante od vrstice 26 dalje. Ko je uporabnik pritisnil reset, spremenimo

konfiguracijo izhodov tako, da je sedaj izhod še t.i. NRST pin. V resnici gre za reset signal

povezan na pin PORTB.3. Ko ta pin v vrstici 116 postavimo na izhod, vsilimo mikrokrmilniku

Page 53: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 53

visoko stanje na /RST pin v vrstici 118 (poleg SCK in MOSI). S tem postavimo mikrokrmilnik

v položaj, ko ta lahko sprejema ukaze za ISP preko SPI.

Slika 4.10: Okno primera 5

Podatke nato pošiljamo v skupinah po štiri zloge, ker so tako sestavljeni ukazi za

programiranje v ISP nainu25. Sledi prvi sklop zlogov (124), ki omogoi ostale ISP ukaze

($AC, $53, $00, $00). e je komunikacija uspešna, mikrokrmilnik po zlogu $53 odgovori s

ponovljeno vrednostjo, $53, do katere pridemo šele med pošiljanjem naslednjega zloga. Zato

se metoda za pošiljanje in branje imenuje PosljiInPrejmiZlog. e smo ugotovili, da je zlog,

sprejet po oddanem $53 tudi enak $53, pomeni, da smo mikrokrmilnik uspešno spravili v

stanje, ko ga lahko programiramo (127). Naslednja skupina štirih pošiljanj ugotavlja digitalni

podpis SPI naprave, s katero komuniciramo. e kot etrti zlog dobimo $1E (133), je to znak,

da je prikljueno napravo izdelal Atmel. Naslednji dve skupini ugotavljata nadaljna dva zloga

digitalnega podpisa26.

Metoda PosljiInPrejmiZlog hkrati sprejme zlog, ki ga moramo oddati preko SPI, in vrne zlog,

ki ga sprejme med oddajanjem. V njej najprej preverimo, e je naprava odprta (49), nato pa

v osmih korakih (51) – za vsak bit iz zloga po en korak – naredimo sledee: pogledamo

najvišji bit v spremenljvki b, e je vkljuen, bo treba MOSI dvigniti na logino 1 (53), sicer pa

spustiti na 0 (54). Nato generiramo dva zloga, enega brez SCK in enega z njim (56 in 57).

Vrstice 56 niti ne potrebujemo, tam je le za boljšo sliko, kaj se dogaja – signal SCK naj bo

najprej v nizkem stanju. Nato pošljemo prvi zlog (59), poakamo, da je SCK res 0 (63–66),

pošljemo drugi zlog (68) in poakamo da postane SCK enak 1 (72–75). Nato v zlogu za

pošiljanje b in zlogu za sprejemanje r porinemo bite za eno mesto v levo (78 in 79), saj smo

en bit že poslali, prvega pa smo že sprejeli. e smo zaznali visok MISO signal (81), je bilo

njegovo stanje 1 in zato postavimo na 1 tudi zadnji bit v rezultatu. e je bil to zadnji od osmih

bitov, smo operacijo pošiljanja in sprejemanja konali in lahko vrnemo rezultat (84).

25 [7] AVR910: In-System Programming, stran 4 26 [7] AVR910: In-System Programming, stran 5

Page 54: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 54

Možne izboljšave

Na ta nain je mogoe sprogramirati mikrokrmilnik brez posebnega programatorja, potrebno

je sprogramirati pretvorbo iz Motorolinega .HEX formata v binaren format ter tako dobljene

zloge posredovati preko programirnih sekvenc mikrokrmilniku.

4.6 Primer 6: Komunikacija osebni raunalnik – mikrokrmilnik preko USB

Zadnji primer prikazuje izvedbo komunikacije med osebnim raunalnikom z mikrokrmilnikom

tipa ATMEL ATMega16 preko vodila USB in ob uporabi modula DLP245M. Razdeljen je na

dva sestavna dela: program na osebnem raunalniku ter program v mikrokrmilniku. Program

v Delphiju je klasino terminalsko okno (v nadaljevanju terminal), preko katerega lahko

opazujemo dogajanje v mikrokrmilniku in na to dogajanje tudi vplivamo z doloenimi ukazi, ki

jih posredujemo preko ukazne vrstice. Ukaze preko USB vmesnika prenesemo v

mikrokrmilnik in ta jih sprejema in sproti obdeluje. Programa sta funkcinalno uporabna v

primeru, da želimo pine porta A mikrokrmilnika uporabljati kot digitalne vhode ali pa kot AD

pretvornike. Lahko tudi kombiniramo in za AD pretvornik uporabljamo samo nekatere od

pinov. Vezava in program ostanejo nespremenjeni.

Ukazi, ki jih prepoznavava program v mikrokrmilniku:

Priloga na CD–ROMu: Mapa: CDROM:\Primeri\Primer 6 Izvršna datoteka: CDROM:\Primeri\Primer 6\Primer6.exe Dokumentacija: CDROM:\Dokumentacija\DLP-USB245M User Manual (02.02.2006).pdf CDROM:\Dokumentacija\AN232B-01_BitBang (1.0).pdf CDROM:\Dokumentacija\ATmega16(L) (ver. M).pdf CDROM:\Dokumentacija\AVR STK500 User Guide.pdf

4.6.1 Vezava Za lažje in hitrejše delo bomo uporabili razvojno plošo STK500, lahko pa tudi uporabimo

protoplošo. Vezave lahko razdelimo v tri sklope (Slika 4.11).

Ukaz Pomen Primer Odziv AVR A Stanje na portu A A A=F0 C? Stanje na portu C C? C=F0 Cnx Nastavi stanje x na pinu n porta C C31 C31 ** Posreduj vsa stanja na ADC v HEX obliki ** FF,FF,FF,FF,00,FF,FF,45 *n Posreduj stanje na AD pretvorniku št. n *2 ADC 2 = FF (4.98V) C=hh Nastavi stanje na portu C na HEX vrednost hh C=5C C=5C

Page 55: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 55

1. Vezave na STK500: Z dvema 10-žilnimima kablom skupajh povežemo skupine pinov

PORTC in LEDS ter PORTA in SWITCHES. Namesto slednje povezave lahko na

pine porta A prikljuimo tudi razline napetosti do 5V, ker je v programu izbrana taka

referenna napetost. Pazimo na dejstvo, da zaradi naine vezave svetlee diode

gorijo takrat, ko je na pinu logina 0 (negativna logika).

2. Podatkovno vodilo STK500 – DLP245M: povežemo skupine pinov PORTB na

STK500 in D0 – D7 na DLP245M. Port B na mikrokrmilniku tako prevzame vlogo

podatkovnega vodila.

3. Kontrolno vodilo STK500 – DLP245M: istoležno povežemo pine D0, D1, D2 in D3

skupine PORTD na STK500 in /RXF, /TXE, WR in /RD ( t.j. v pare so povezani D0 in

/RXF, D1 in /TXE, D2 in WR ter D3 in /RD).

Slika 4.11: Shema vezave primera 6

e pri resetu STK500 dobimo pred sporoilom »AVR Mega16 pripravljen« kakšen uden

znak, je to zaradi tega, ker ob resetu pini mikrokrmilnika preidejo v stanje visoke impedance,

pull-up upori pa dvignejo napetost na WR pinu. Po koncu reseta WR pin spet preide iz

visokega v nizko stanje, kar nezaželjeno sproži pisanje enega zloga v predpomnilnik za

pošiljanje. Težavo odpravimo z dodajanjem primerno velikega upora med pin 2 vrat D27 in

GND.

Pri uporabi skupaj z STK500 lahko dodatne vezave (npr signalov na ADC) vežemo kar preko

konektorja za razširitev. Razpored signalov na konektorju najdemo v prironiku za STK500.

27 PORTD.2

Page 56: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 56

4.6.2 Program za osebni raunalnik Aplikacijo sestavljata dva programa, en za PC osebni raunalnik in en za AVR mikrokrmilnik,

ki je napisan v programskem jeziku C.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

unit EnotaPrimera6; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, FTD2XX, Math; type TForm1 = class(TForm) Memo1: TMemo; GumbVklopIzklop: TButton; Timer: TTimer; GumbPoslji: TButton; GumbPocisti: TButton; StanjeA: TButton; StanjeC: TButton; StanjeADC: TButton; UkaznaVrstica: TEdit; procedure GumbVklopIzklopClick(Sender: TObject); procedure TimerTimer(Sender: TObject); procedure GumbPosljiClick(Sender: TObject); procedure GumbPocistiClick(Sender: TObject); procedure StanjeClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private Private declarations USB_Handle: Cardinal; sprejem: string; public Public declarations end; var Form1: TForm1; implementation $R *.DFM procedure TForm1.GumbVklopIzklopClick(Sender: TObject); begin if USB_Handle>0 then begin FT_Close(USB_Handle); USB_Handle:= 0; GumbVklopIzklop.Caption:= 'Vklop'; SetLength(sprejem,0); end else if FT_Open(0, USB_Handle) = 0 then begin FT_ResetDevice(USB_Handle); GumbVklopIzklop.Caption:= 'Izklop'; end; end; procedure TForm1.TimerTimer(Sender: TObject); const maxZnakov = 255; var zlogovRX, zlogovTX: Cardinal; e: Dword; vmesniNiz: string[maxZnakov]; sprejeto, dolzina, znakovProsto: dword; enter, poziv: Cardinal; begin //e je naprava zaprta, se vrnemo if USB_Handle = 0 then Exit; // ravno tako, e ne moremo dobiti števila zlogov v predpomnilnikih if FT_GetStatus(USB_Handle, zlogovRX, zlogovTX, e) <> 0 then Exit; if (zlogovRX > 0) then begin dolzina:= length(sprejem); znakovProsto:= maxZnakov - dolzina;

Page 57: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 57

72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

//nekaj zlogov je treba prebrati if zlogovRX > znakovProsto then zlogovRX:= znakovProsto; //preberemo primerno število podatkov in ugotovimo dolžino vmesnega niza SetLength(vmesniNiz, zlogovRX); FT_Read(USB_Handle, @vmesniNiz[1], zlogovRX, sprejeto); SetLength(vmesniNiz, sprejeto); //združimo sprejeto s tistim, kar smo že prej sprejeli sprejem:= sprejem + vmesniNiz; //sedaj lahko išemo kakšne kljune znake, kot je npr ASCII CR (enter) enter:= Pos(#$0D, sprejem); while enter > 0 do begin // znak smo našli, vsebino do tega znaka pošljemo na TMemo gradnik Memo1.Lines.Append(Copy(sprejem,1,enter - 1)); // ter ustrezno popravimo niz sprejetih znakov sprejem:= Copy(sprejem, enter + 1, length(sprejem) - enter); // naslednji znak CR enter:= Pos(#$0D, sprejem); end; end; end; procedure TForm1.GumbPosljiClick(Sender: TObject); var poslano: Cardinal; s: String[20]; begin // e je naprava zaprta, ne naredimo niesar if USB_Handle = 0 then begin Memo1.Lines.Append('Naprave ni odprta.'); Exit; end; // pošljemo tisto, kar je v ukazni vrstici // da se izognemo komplikacijam, vsebino najprej prestavimo v s s:= UkaznaVrstica.Text; // nato odpošljemo vsebino s FT_Write(USB_Handle, @s[1], length(s), poslano); // spraznimo ukazno vrstico UkaznaVrstica.Text:= ''; end; procedure TForm1.GumbPocistiClick(Sender: TObject); begin // zbrišemo vsebino TMemo gradnika Memo1.Clear; end; procedure TForm1.StanjeClick(Sender: TObject); begin with sender as TButton do begin if name= 'StanjeA' then UkaznaVrstica.Text:= 'A' else if name= 'StanjeC' then UkaznaVrstica.Text:= 'C?' else if name= 'StanjeADC' then UkaznaVrstica.Text:= '**'; GumbPoslji.Click; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if USB_Handle = 0 then Exit; // e je naprava odprta, "kliknemo" na gumb Vklop/Izklop, da jo zapremo GumbVklopIzklop.Click; end; end.

4.6.3 Delovanje in komentar programa za osebni raunalnik Kot prvi del aplikacije bomo najprej obravali program na osebnem raunalniku. Glavno okno

(Slika 4.12) sestavljajo gumbi Vklop/Izklop , Poisti , Stanje A , Stanje C , Stanje ADC in Pošlji ,

ukazna vrstica tipa TEdit in terminalsko okno tipa TMemo.

Page 58: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 58

Slika 4.12: Okno primera 6

Delovanje terminala vklopimo s tipko Vklop/Izklop , s katero sprožimo dogodek

GumbVklopIzklopClick (40), kjer najprej preverimo (42), ali je naprava odprta ali ne. Odprtost

naprave nam signalizira spremenljivka USB_Handle, v kateri je vrednost razlina od 0 le v

primeru, da je odprta. e je odprta, smo jo s klikom na gumb hoteli zapreti. To tudi storimo

(43), postavimo spremenljivko USB_Handle na 0 (44) ter popravimo napis na gumbu na

»Vklop« (45). Spremenljivko sprejem, v kateri imamo prejete znake z naprave, postavimo na

prazen niz (46), saj tisto, kar je v njej ostalo, po zaprtju ne bo ve uporabno. V primeru, da je

naprava bila zaprta, jo želimo odpreti in e je odpiranje uspelo (47), napravo resetiramo in s

tem spraznimo njena vmesna pomnilnika (48) ter popravimo napis na gumbu na »Izklop«

(49).

Metoda TimerTimer se izvaja na vsakih 10ms. Takrat pogledamo, ali je naprava zaprta in v

tem primeru metodo takoj zapustimo (65). Nadalje pogledamo status naprave in pridobimo

podatke o zlogih, ki akajo v tistem vmesnem pomnilniku (67). Zanima nas samo tisti vmesni

pomnilnik, v katerem akajo podatki, ki pridejo z naprave (69). Nadalje izraunamo, koliko

prostora imamo v spremenljivki sprejem (71). V tej spremenljivki bomo hranili prejete

podatke, vse dokler ne bodo izpolnjeni pogoji za nadaljno obdelavo (84), torej da bomo nekje

naleteli na ASCII znak <CR> oz. znak »enter«, ki ima kodo 13baza(10) oz. 0Dbaza(16).

Spremenljivka znakovProsto torej po izraunu vsebuje število prostih znakov v spremenljivki

sprejem. e na sprejem aka ve zlogov, kot imamo prostega prostora, jih bomo zaenkrat

sprejeli le toliko, kolikor imamo prostora (73). Z naprave bomo brali neposredno v

spremenljivko vmesniNiz, zato že vnaprej rezerviramo prostor za prihajajoe podatke tako,

da nastavimo njeno dolžino na število znakom, ki jih bomo poskusili prebrati (76). Nato

preberemo akajoe podatke (77) ter popravimo dolžino vmesnega niza na tolikšno dolžino,

kolikor zlogov smo dejansko sprejeli (78) – naeloma je to toliko, kolikor smo jih zahtevali,

vendar o tem ne moremo biti prepriani, saj je vmes lahko prišlo do napake (esar tu sicer ne

preverjamo). Konno prikljuimo prispele podatke k spremenljivki sprejem (81). Po branju se

Page 59: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 59

lahko lotimo obdelave prispelih podatkov. Od programa v mikrokrmilniku priakujemo, da bo

vsake toliko in toliko zlogov sporoil, da so podatki primerni za nadaljno obdelavo tako, da

pošlje znak <CR> – znak »enter«. e tak znak najdemo (84, 85), lahko spremenljivko

sprejem razdelimo v dva dela – zloge do znaka <CR> posredujemo gradniku Memo1 kot

naslednji niz znakov, ki naj ga doda na koncu (87). Poslane znake iz spremenljivke sprejem

»izrežemo« s kopiranjem same sebe od znaka <CR> dalje (89). Sam znak <CR> pri

kopiranju »vržemo stran«, saj ga ne potrebujemo ve. Konno ponovno išemo znak <CR>

(91), in e ga najdemo, bomo zanko while (85 – 92) ponovno ponovili. isto lahko se

namre zgodi, da s klicem branja iz naprave (77) naenkrat prejeli ve vrstic obvestil. Ker se

to lahko zgodi z vsakim branjem, bi v takem primeru zaeli zaostajati.

Ob kliku na gumb Pošlji zaženemo metodo GumbPosljiClick, kjer skrbimo za pošiljanje

podatkov na USB. Tako, kot v ostalih primerih, preverimo stanje (102) in e je naprava

zaprta, izstopimo iz metode (104), še prej pa izpišemo obvestilo (103). e je naprava odprta,

bomo ob kliku na gumb poslali vsebino ukazne vrstice na USB (110).

Metoda GumbPocisti, ki se izvede ob pritisku na tipko , samo sprazni gradnik Memo1 (115).

Gumbi Stanje A , Stanje C , Stanje ADC ob kliku izvedejo vsi isto metodo StanjeClick, kjer

najprej preverjamo, kateri od njih je zahteval klic metode, nato glede na gumb nastavimo

vrednost ukazne vrstice na ustrezen ukaz (124 – 126), ki ga bo mikrokrmilnik obdelal. Nato

sprožimo metodo Click gumba Pošlji (127), s imer se izognemo ponavljanju kode.

Na koncu v metodi FormHide poskrbimo še za zapiranje naprave v primeru, ko želimo

program zapreti mimo klika na gumb Izklopi . V primeru zapiranja okna preverimo, e je

naprava zaprta in e je še odprta, izvedemo metodo Click gumba Izklopi .

4.6.4 Program za mikrokrmilnik AVR ATMega16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 24 25

#include <mega16.h> #include <stdio.h> // da bo vse skupaj bolj razumljivo typedef unsigned char byte; // 1 zlog = 8 bitov typedef unsigned int word; // 1 beseda = 16 bitov // konstante // FT245BM kontrolni pini #define PINRD 3 #define PINWR 2 #define PINTXE 1 #define PINRXF 0 // AVR porti, na katere so kontrolni pini prikljueni #define FTDATAOUT PORTB //data output port #define FTDATAIN PINB //data input port #define FTDATADDR DDRB //data port data direction register #define FTCTRLOUT PORTD //ft245 status output port #define FTCTRLIN PIND //ft245 status input port #define FTCTRLDDR DDRD //ft245 data direction register // konna imena pinov, ki so vezana na pravi port in njegov pin // FTRD pin je v našem primeru kar pin 3 na portu D (glej definicije zgoraj) #define FTRD FTCTRLOUT.PINRD

Page 60: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 60

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

100 101 102 103 104 105

#define FTWR FTCTRLOUT.PINWR #define FTTXE FTCTRLIN.PINTXE #define FTRXF FTCTRLIN.PINRXF // funkcija, ki pobere 1 zlog podatkov s FT245BM - bralni cikel int beriZlog(byte *b) // najprej preverimo, e kak podatek aka => tedaj je FTRXF == 0 if (!FTRXF) FTDATADDR = 0x00; // ko hoemo prebrati podatek, postavimo FTRD v nizko stanje FTRD = 0; // poakamo, da podatek pride na port mikrokrmilnika in da se stanje stabilizira #asm nop nop #endasm // na pripravljeno mesto preberemo podatek z AVR porta *b = FTDATAIN; FTRD = 1; return 1; return 0; // funkcija, ki zapiše en zlog podatkov na FT245BM - pisalni cikel int posljiZlog(byte b) // preverjanje vmesnega pomnilnika - FTTXE == 0, e je prazen if (FTTXE == 0) FTDATADDR = 0xFF; //prostor za pisanje je na voljo, nastavimo AVR port na pisanje FTDATAOUT = b; // podatek se zapiše v vmesni pomnilnik ob prehodu iz visokega v nizko stanje FTWR = 1; FTWR = 0; // vrni število zapisanih zlogov return 1; return 0; int posljiNiz(char c[]) int i; while (*c != 0) i += posljiZlog(*c); c++; return i; int posljiHex(byte b) int i; unsigned char c; i = 0; c = b / 16; if (c<=9) c = c | 0x30; else c += 0x37; i += posljiZlog(c); b = b & 0x0F; if (b<=9) b = b | 0x30; else b += 0x37; i += posljiZlog(b); return i; //samodejno generirana funkcija #define ADC_VREF_TYPE 0x20 // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA |= 0x10;

Page 61: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 61

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185

return ADCH; // globalne spremenljivke // sporocila char pripravljen[] ="AVR Mega16 pripravljen.\r"; char nepravilnaVrednost[]= "Nepravilna vrednost!\r"; char niHexStevilo[]= "Število ni v hexadecimalnem zapisu!\r"; flash char pretvorbaADC[]="ADC%c=%2X (%1.2f V)"; void main(void) // lokalne spremenljivke unsigned char c1,c2,c3,c4; byte b1, b2,b3; char sporocilo[50]; float f; // inicializacija portov // PORTA bomo uporabljali za vhod PORTA=0x00; DDRA=0x00; // PORTC bomo uporabljali za izhod PORTC=0x00; DDRC=0xFF; // inicializacija povezav s FT245BM // najprej nastavimo signale za branje in pisanje FTWR = 1; FTRD = 1; // setup DDR and DATA registers according to connection specification // PINWR in PINRD sta izhoda FTCTRLDDR.PINWR = 1; FTCTRLDDR.PINRD = 1; // PINTXE in PINRXF sta vhoda FTCTRLDDR.PINTXE = 0; FTCTRLDDR.PINRXF = 0; // pull-up upornikov ne potrebujemo... FTCTRLOUT.PINTXE = 0; FTCTRLOUT.PINRXF = 0; ADMUX=ADC_VREF_TYPE; ADCSRA=0x86; //SFIOR&=0x1F; posljiNiz(pripravljen); // ponavljaj v neskonnost while (1) // ponavljamo, dokler ne dobimo z USB nekega zloga in da ta ni CR while ((beriZlog(&c1) == 0) || (c1 == 0x0D)); switch(c1) case '*': // operacije z ADC while (beriZlog(&c2) == 0); if ((c2 >= '0') && (c2 <= '7')) // e je bil naslednji zlog številka od 0 do 7, b1 = c2 & 0x07; // sprožimo ADC pretvorbo na pinu z indeksom b1 b2 = read_adc(b1); f = (float)b2 * 5 / 256; sprintf(sporocilo,pretvorbaADC, c2,b2 ,f); posljiNiz(sporocilo); else if (c2 == '*') // e je bila zvezdica, izpišemo hexadecimalne vrednosti vsakega od ADC vhodov posljiZlog('@'); posljiZlog('='); for (b2 = 0; b2 < 8; b2++) // sprožimo ADC pretvorbo na pinu z indeksom b2 b3 = read_adc(b2); // pošljemo vrednost posljiHex(b3); // do predzadnjega pošiljamo za vsako hex vrednostjo tudi vejico if (b2 < 7) posljiZlog(',');

Page 62: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 62

186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265

break; case 'A': // znak A je zahteva po stanju porta A, ki je deklariran kot VHOD b1 = PINA; // vrnemo zapis v obliki A=hh posljiZlog(c1); posljiZlog('='); posljiHex(b1); break; case 'C': // znak C je zahteva po delu s portom C, ki je deklariran kot IZHOD while (beriZlog(&c2) == 0); switch (c2) case '?': // zanima nas stanje, vrnemo zapis v obliki A=hh b1 = PINC; posljiZlog(c1); posljiZlog('='); posljiHex(b1); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': // v primeru, da je drugi znak število od 0 do 7, to pomeni zahtevo // po delu s posameznimi pini (biti) b1 = PORTC; while (beriZlog(&c3) == 0); // v tem primeru potrebujemo še tretji znak b3 = c2 & 7; switch(c3) // na izhod želimo dati vrednost 0 ali 1, odvisno od prejšnjega znaka case '0': // e je znak enak 0, izklopimo bit b1 = b1 & ~(1 << b3); break; case '1': // e je znak enak 1, bit vklopimo b1 = b1 | (1 << b3); break; default: // sicer pošljemo sporoilo o nepravilni vrednosti posljiNiz(nepravilnaVrednost); // po opravljeni spremembi sporoimo še novo stanje porta C v obliki C=hh PORTC = b1; posljiZlog(c1); posljiZlog('='); posljiHex(PINC); break; case '=': // e je znak enaaj, pomeni, da želimo na port C neposredno // vpisati neko šestnajstiško vrednost while (beriZlog(&c3) == 0); while (beriZlog(&c4) == 0); if ( // preverjamo pravilnost vpisanega šestnajstiškega števila (obeh števk) ((c3 >= '0') && (c3 <= '9')) || ((c3 >= 'A') && (c3 <= 'F')) && ((c4 >= '0') && (c4 <= '9')) || ((c4 >= 'A') && (c4 <= 'F')) ) // število je šestnajstiško, izraunamo njegovo vrednost iz znakov c1 in c2 b1 = (c3 <= '9' ? c3 & 0x0F : (c3 - 0x37)); b2 = (c4 <= '9' ? c4 & 0x0F : (c4 - 0x37)); b1 = b1 << 4 | b2; // nastavimo PORTC in sporoimo njegovo novo stanje PORTC = b1; posljiZlog(c1); posljiZlog('='); posljiHex(PINC); else // število ni šestnajstiško posljiNiz(niHexStevilo); break; break; default:

Page 63: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 63

266 267 268

posljiZlog(0x0D);

4.6.5 Delovanje in komentar programa za mikrokrmilnik AVR ATMega16 Preprosti programi, pisani za mikrokrmilnike, so ponavadi napisani klasino, brez uporabe

objektno–orientiranega pristopa. Tudi v našem primeru je tako. Napisano programsko kodo

bomo obravnavali v treh delih:

1. vkljuevanje modulov, definicije in deklaracije globalnih konstant

2. implementacije funkcij

3. Glavni program z neskonno ponavljajoo se zanko

Deklaracije konstant in spremenljivk

Prvi dve vrstici navajata modula, ki ju moramo vkljuiti v program, da lahko uporabljamo

doloene programske konstrukte, kot so imena vrat (1) in oblikovanje nizov (string formatting,

2). Za boljše razumevanje in krajše pisanje deklaracij potrebujemo definicijo tipa byte (5).

Nato deklariramo imena registrov, namenjenih povezavi mikrokrmilnika z modulom. Najprej

definiramo imena pinov in številke pinov od 0 do 3, ki sovpadajo s položajem pinov v

registrih, ki upravljajo s temi pini (11 – 14). To pride posebno prav v primeru, da imamo

poseben konektor, ki ima standardno pin WR vezan na položaj 2, ta konektor pa lahko

vežemo na poljubna vrata mikrokrmilnika.

Sledijo definicije poimenovanj registrov za komunikacijo po USB, ki jih bomo uporabili

kasneje v funkcijah. Najprej definiramo imena vrat, ki bodo skrbela za podatkovno vodilo

modula. eprav gre fizino za iste pine na mikrokrmilniku, so za pisanje na te pine in branje

z njih potrebni trije razlini registri, PORTn, DDRn in PINn (17, 18), kjer je n oznaka vrat.

PORTn služi pisanju, DDRn28 se uporablja za doloanje, kateri pini na vratih n bodo vhodi in

kateri izhodi, PINn pa vsebuje stanje na pinih vrat n.

Glede na izbiro vrat bomo v našem primeru za pisanje uporabljali register PORTB (17), za

branje s pinov pa register PINB (18), smer podatkov pa bomo doloali s DDRB (19).

Potrebujemo še ime registra vrat, na katera bodo prikljueni kontrolni signali /RD, WR, /TXE

in /RXF na modulu DLP–245M (20, 21, 22). Od teh vrat bomo v resnici uporabljali samo tiste

štiri pine, ki smo jih izbrali v vrsticah 11 – 14. Konno definiramo imena pinov, kot jih bomo

neposredno uporabljali v funkcijah29 (25 – 28). Vidimo, da je FTRD isto kot

FTCTRLOUT.PINRD. Na podlagi prejšnjih definicij preprocesor pri prevajanju zamenja z

PORTD.3. e pogledamo vezavo (0), vidimo, da smo tam skupaj vezali signala D3 in /RD. 28 Data Direction Register, register smeri podatkov (vhod/izhod) 29 Pri imenih zaradi sintakse jezika nismo upoštevali negacij, imena vseh pinov se preprosto zano s FT in nadaljujejo z imenom pina (npr. /TXE je poimenovan kot FTTXE).

Page 64: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 64

V vrsticah 114 do 117 definiramo še nize znakov, ki jih bo mikrokrmilnik pošiljal po USB v

terminal. Niz pretvorbaADC (117) mora biti posebej deklariran v flash pomnilniku, ker tako

zahteva knjižnica stdio.h, e želimo uporabljati funkcijo sprintf (172).

Funkcije

Pri funkciji beriZlog (31), že ime pove, da je namenjena branju enega zloga z modula. Ko je

podatek iz vmesnega pomnilnika za podatke, prejete z USB, na voljo, signal /RXF preide v

nizko stanje in s tem signalizira mikrokrmilniku, da ga lahko pobere iz vmesnega pomnilnika

(Slika 4.13). Trajanje preklopnih asov najdemo v prironiku30. e je signal v visokem stanju,

pomeni, da ni zlogov na voljo31 in se vrnemo z vrednostjo 0 kot rezultatom prebranih zlogov

(47). e pa je signal v nizkem stanju, potem je as, da preberomo podatek. S tem ciljem

najprej postavimo vrata na mikrokrmilniku na vhodni nain (input mode) (34). Nadalje

postavimo signal FTRD na 0 (36). Nato poakamo, da se stanje stabilizira, potrebujemo

približno dva cikla (za frekvence ure do 8MHz je ponavadi dovolj en sam ali celo brez), da se

tranzicija registra PINB prilagodi trenutnemu stanju32. FT–245BM na podatkovnem vodilu drži

stanje vse dokler se FTRD ne vrne nazaj v visoko stanje (44).Pred tem se lotimo branja

podatka (43), eprav bi glede na zakasnitev lahko to storili tudi prej in s tem odpravili potrebo

po akalnih ciklih. Ko smo z branjem zakljuili, vrnemo vrednost 1.

Slika 4.13: bralni cikel (vir: FTDI, [1])

Funkcija int posljiZlog (51) je namenjena pošiljanju enega zloga na FT–245BM. Signal /TXE

z visokim stanjem pove, da je vmesni pomnilnik poln in da moramo poakati, da se sprazni

(Slika 4.14). V tem primeru (53) vrnemo kot število poslanih zlogov kar 0 (66). e pa

podatek smemo poslati, najprej preklopimo vrata v izhodni nain (54), ter izhodni register

nastavimo na vrednost, ki jo želimo poslati (56). Pošiljanje podatka signaliziramo s

pulziranjem signala WR, kar naredimo z nastavljanjem vrednosti FTWR na 1 in nato nazaj na

0 (58, 59). Vrnemo rezultat 1 kot število poslanih zlogov (61).

V delovanje funkcij posljiNiz (66) in posljiHex (76) se ne bomo podrobno spušali, povemo

naj le, da pri funkciji posljiNiz posiljamo toliko zlogov iz nekega niza znakov, dokler ne 30 [1] FT245BM USB FIFO IC Data Sheet, 31 [1] FT245BM USB FIFO IC Data Sheet, rev. 1.7, str. 8, FIFO Control Interface Group 32 [8] ATmega16(L) (ver. M), str.50, zadnji odstavek

Page 65: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 65

naletimo na vrednost 0, ki signalizira konec niza, funkcija posljiHex pa pošljemo dva znaka,

ki predstavljata hexadecimalno vrednost zloga, ki smo ga uporabili za parameter.

Prav tako se ne bomo spušali v delovanje funkcije read_adc (98), ki jo generira arovnik za

projekte v CodeVision AVR prevajalniku. Njena naloga je prebrati osembitno vrednost

pretvorbe napetosti na nekem pinu vrat A v digitalno vrednost od 0 do 255.

Slika 4.14: pisalni cikel (vir: FTDI, [1])

Glavni program

V glavnem programu za deklaracijo lokalnih spremenljivk najprej naletimo na inicializacijo

vrat, ki jih bomo uporabljali. Vrata A bomo uporabljali le kot vhod (127), pri emer ne

uporabljamo vgrajenih pull-up uporov (126), vrata C pa le kot izhod (129). Nato poskrbimo

za inicializacijo vrat, povezanih z delovanjem modula. Tako najprej nastavimo vrednosti

PINWR in PINRD, ki jih postavljamo v stanje 0 le tedaj, ko izvajamo proces branja ali pisanja

(Slika 4.13, Slika 4.14). Odgovarjajoe pine na kontrolnih vratih postavimo za vhode (140 –

145). Nadalje še nastavimo referenno napetost za interni ADC pretvornik (147) ter

pošljemo terminalu niz, da je procesor pripravljen.

Sledi neskonna zanka, v kateri beremo prispele zloge ter se ustrezno odzivamo na zahteve.

Dokler ne preberemo nekega znaka in ta isti znak ni <CR>, ponavljamo zanko while v vrstici

157. Ko konno dobimo nek znak, se lotimo preverjanja.

e je prvi veljaven prebrani znak zvezdica (*), bomo delali z ADC. e je naslednji znak

številka (163), moramo dobiti vrednost pretvorbe s pripadajoega pina na vratih A (167).

Izraunamo napetost (168) ter pripravimo in pošljemo niz s podatki o pinu, digitalizirani

vrednosti in preraunani napetosti, npr. »ADC 2 = FF (4.98V)« (169, 170). e pa smo

namesto številke prebrali še en znak zvezdica (163), bomo poslali znaka »@« (174) in »=«

(175), ki jima bodo sledile pretvorbe signalov z vseh osmih pinov v šestnajstiški obliki, med

seboj loene z vejico (176 – 183).

V primeru, ko je prvi veljaven znak velika rka A, preberemo stanje registra PINA (188) in

izpišemo na terminal njegovo vrednost v obliki »A=hh« (190 – 192), kjer je hh šestnajstiška

vrednost registra.

Page 66: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 66

Preostane nam še primer, ko je prvi znak velika rka C. Tedaj priakujemo ve možnosti.

Prva je, da rki C sledi znak »?« (198). To razumemo kot zahtevo, da vrnemo vrednost

izhodov na vratih C. Vrednost izpišemo podobno, kot v primeru velike rke A: »C=hh«.

Druga možnost je, da je druga rka neka številka od 0 do 7 (205 – 212). To razumemo kot

zahtevo po spremembi stanja posameznega izhoda na vratih C, zato si takoj zapomnimo

predhodno stanje vrat (215). Po tretji prebrani vrednosti (216) doloimo za kateri bit pri vratih

C gre (218) ter na podlagi zadnjega znaka 0 ali 1 prižgemo (227) ali ugasnemo (223) bit v

spravljeni vrednosti, ki jo nato pošljemo nazaj v register PORTC (234). e tretja vrednost ni

bila 0 ali 1, pošljemo obvestilo o nepravilnem ukazu (231).

Tretja možnost je, da je drugi znak enaaj (=) (239). To razumemo kot zahtevo po postavitvi

stanja na vratih C na posredovano šestnajstiško vrednost . Zato preberemo še dva znaka

(242, 243) ter preverimo, da sta oba znaka res šestnajstiški števki (torej v obmoju od 0 do 9

oz. A do F) (244 – 247). e to drži, preraunamo vrednost (249 – 251) ter pošljemo

obvestilo o stanju vrat C kot pri prvi možnosti. e ni bila posredovana šestnajstiška vrednost,

o tem pošljemo obvestilo (259).

Po obdelavi ukazov in izpisih pošljemo še znak <CR> (265), da program za terminal ve, da

lahko poslane podatke sprocesira.

Page 67: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 67

5. Zakljuek Nalogo smo na zaetku zastavili z namenom poudarka na komunikaciji med integriranim

vezjem FT–245BM (oz. njegovimi nasledniki) in mikrokrmilniki AVR, saj uporabnost

alternativnega naina delovanja (t.i. bit-bang nain) ni bila tako oitna. Skozi primere pa

lahko ugotavimo izreden pomen tega naina delovanja, saj poenostavlja mnogo problemov,

s katerimi se sreujemo ob izumiranju klasinih Centronics in RS-232C vmesnikov.

Že v primerih, prikazanih v poglavjih 4.1 do 4.6, v spremnih komentarjih vidimo, da prehod

za preprostega uporabnika in programerja ne predstavlja velike ovire in da zadostuje že malo

znanja programiranja in elektronike, medtem ko o samem USB vodilu ni potrebno vedeti

praktino niesar posebnega, zgolj nekatere lastnosti delovanja samega integriranega vezja

FT–245BM.

Velik obet za uporabo v šolskem laboratoriju predstavlja možnost izdelave USB ISP

programatorja za mikrokrmilnike AVR, saj se elegantno izognemo problemu tipa »jajce ali

kokoš« – e hoemo sprogramirati prazen mikrokrmilnik preko USB, bi ga morali najprej

sprogramirati, da bi lahko nato programirali po USB. Ker pa ga lahko sprogramiramo v bit-

bang nainu, kjer za programiranje potrebujemo samo FT–245BM in že lahko programiramo

mikrokrmilnik v ISP nainu ali pa v normalnem nainu delovanja komuniciramo z obiajnimi

USB metodami pisanja na napravo in branja z nje.

Obstaja še en vidik uporabe bit-bang naina, ki ga v primerih nismo obdelali. V tem nainu

ne posredujemo zgolj podatke na vodilo v doloenem taktu, temve lahko FT–245BM z

vodila podatke tudi v istem taktu odjema in spravlja v vmesni pomnilnik. To odpira možnost

za hitrejšo SPI ali I2C komunikacijo, vzorenje signalov, izdelavo loginega analizatorja

resolucij reda nekaj 100kHz in druge aplikacije.

Iz primerov, prikazanih v tretjem poglavju, lahko ugotovimo, da je FT–245BM res zadovoljivo

zadostil našim zahtevam in da je pokazal celo ve, kot smo priakovali. Bit-bang nain

delovanja je primeren tako za poasne kot tudi za hitre aplikacije na USB vodilu brez

uporabe mikrokrmilnika. Glede na to, da je število prikljuenih naprav omejeno zgolj s

specifikacijo USB, lahko mimogrede uporabimo nekaj takih integriranih vezij za par

funkcijskih generatorjev, brez da bi obremenjevali mikrokrmilnik, ki bi preko svojega vezja

tako lahko zgolj posredoval vrednosti z dveh ali ve merilnih mest, oditanih v pravilnih

asovnih intervalih (da bi za to uporabili kar bit-bang nain, nam onemogoa sam nain

komunikacije med osebnim raunalnikom in USB napravami v splošnem).

Vse zgoraj našteto po našem mnenju potrjuje tezo, da je možno z minimalnim naporom preiti

z uporabe klasinih raunalniških vmesnikov na sodobno vodilo USB, ki tako obeta veliko

fleksibilnost in številne možnosti uporabe v šolskem laboratoriju.

Page 68: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 68

Priloga 1: Izpis modula FTD2XX.pas

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

unit ftd2xx; interface uses Windows, Messages, SysUtils, Classes; type FT_Result = Integer; Dword = Longword; const // FT_Result Values FT_OK = 0; FT_SUCCESS = FT_OK; FT_INVALID_HANDLE = 1; FT_DEVICE_NOT_FOUND = 2; FT_DEVICE_NOT_OPENED = 3; FT_IO_ERROR = 4; FT_INSUFFICIENT_RESOURCES = 5; FT_INVALID_PARAMETER = 6; FT_INVALID_BAUD_RATE = 7; FT_DEVICE_NOT_OPENED_FOR_ERASE = 8; FT_DEVICE_NOT_OPENED_FOR_WRITE = 9; FT_FAILED_TO_WRITE_DEVICE = 10; FT_EEPROM_READ_FAILED = 11; FT_EEPROM_WRITE_FAILED = 12; FT_EEPROM_ERASE_FAILED = 13; FT_EEPROM_NOT_PRESENT = 14; FT_EEPROM_NOT_PROGRAMMED = 15; FT_INVALID_ARGS = 16; FT_NOT_SUPPORTED = 17; FT_OTHER_ERROR = 18; // FT_Open_Ex Flags FT_OPEN_BY_SERIAL_NUMBER = 1; FT_OPEN_BY_DESCRIPTION = 2; // FT_List_Devices Flags FT_LIST_NUMBER_ONLY = $80000000; FT_LIST_BY_INDEX = $40000000; FT_LIST_ALL = $20000000; // Baud Rate Selection FT_BAUD_300 = 300; FT_BAUD_600 = 600; FT_BAUD_1200 = 1200; FT_BAUD_2400 = 2400; FT_BAUD_4800 = 4800; FT_BAUD_9600 = 9600; FT_BAUD_14400 = 14400; FT_BAUD_19200 = 19200; FT_BAUD_38400 = 38400; FT_BAUD_57600 = 57600; FT_BAUD_115200 = 115200; FT_BAUD_230400 = 230400; FT_BAUD_460800 = 460800; FT_BAUD_921600 = 921600; // Data Bits Selection FT_DATA_BITS_7 = 7; FT_DATA_BITS_8 = 8; // Stop Bits Selection FT_STOP_BITS_1 = 0; FT_STOP_BITS_2 = 2; // Parity Selection FT_PARITY_NONE = 0; FT_PARITY_ODD = 1; FT_PARITY_EVEN = 2; FT_PARITY_MARK = 3; FT_PARITY_SPACE = 4; // Flow Control Selection FT_FLOW_NONE = $0000; FT_FLOW_RTS_CTS = $0100; FT_FLOW_DTR_DSR = $0200; FT_FLOW_XON_XOFF = $0400;

Page 69: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 69

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

// Purge Commands FT_PURGE_RX = 1; FT_PURGE_TX = 2; // IO Buffer Sizes FT_In_Buffer_Size = $8000; // 32k FT_In_Buffer_Index = FT_In_Buffer_Size - 1; FT_Out_Buffer_Size = $8000; // 32k FT_Out_Buffer_Index = FT_Out_Buffer_Size - 1; // DLL Name FT_DLL_Name = 'ftd2xx.dll'; // Event Characters FT_EVENT_RXCHAR = 1; FT_EVENT_MODEM_STATUS = 2; // Opening/closing device function FT_Open(Device: Integer; var Handle: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_Open'; function FT_Close(Handle: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_Close'; // reading and writing to device function FT_Read(Handle: Dword; var Buffer; BytesToRead: Dword; var BytesReturned: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_Read'; overload; function FT_Read(Handle: Dword; Buffer: pointer; BytesToRead: Dword; var BytesReturned: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_Read'; overload; function FT_Write(Handle: Dword; var Buffer; BytesToWrite: Dword; var BytesWritten: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_Write'; overload; function FT_Write(Handle: Dword; Buffer: pointer; BytesToWrite: Dword; var BytesWritten: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_Write'; overload; // various operations function FT_ResetDevice(ftHandle:Dword):FT_Result; stdcall; External FT_DLL_Name name 'FT_ResetDevice'; function FT_Purge(Handle:Dword;Mask:Dword) : FT_Result ; stdcall ; External FT_DLL_Name name 'FT_Purge'; function FT_SetBaudRate(Handle: Dword; BaudRate: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_SetBaudRate'; function FT_SetDivisor(Handle: Dword; Divisor: byte): FT_Result; stdcall; external FT_DLL_Name name 'FT_SetDivisor'; function FT_SetBitMode(Handle: Dword; Mask: byte; Enable: byte): FT_Result; stdcall; external FT_DLL_Name name 'FT_SetBitMode'; function FT_GetBitMode(Handle: Dword; var Mode: byte): FT_Result; stdcall; external FT_DLL_Name name 'FT_GetBitMode'; // device status and info function FT_GetStatus(Handle: Dword; var RxBytes: Dword; var TxBytes: Dword; var EventDWord: Dword): FT_Result; stdcall; external FT_DLL_Name name 'FT_GetStatus'; function FT_ListDevices(pvArg1:pointer; pvArg2:Pointer; dwFlags:Dword):FT_Result; stdcall; External FT_DLL_Name name 'FT_ListDevices'; //additional derived functions function FT_GetNumDevices(var StNaprav: Cardinal):FT_Result; function FT_GetSerialNumber(Device: Cardinal; var sn: string): FT_Result; function FT_GetDescription(Device: Cardinal; var desc: string): FT_Result; implementation function FT_GetNumDevices(var StNaprav: Cardinal):FT_Result; begin Result:= FT_ListDevices(@StNaprav,nil,FT_LIST_NUMBER_ONLY); end; function FT_GetSerialNumber(Device: Cardinal; var sn: string): FT_Result; var buffer: string[63]; begin Result:= FT_ListDevices(pointer(Device), @buffer[1], FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER); if Result = FT_OK then begin buffer[0]:= Chr(StrLen(@buffer[1])); sn:= buffer; end else buffer:= ''; end;

Page 70: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 70

155 156 157 158 159 160 161 162 163 164 165 166

function FT_GetDescription(Device: Cardinal; var desc: string): FT_Result; var buffer: string[63]; begin Result:= FT_ListDevices(pointer(Device), @buffer[1], FT_LIST_BY_INDEX or FT_OPEN_BY_DESCRIPTION); if Result = FT_OK then begin buffer[0]:= Chr(StrLen(@buffer[1])); desc:= buffer; end else buffer:= ''; end; end.

Page 71: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 71

Priloga 2: Shema DLP–245M

(vir: [2] DLP-USB245M User Manual, str.15)

Page 72: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 72

Priloga 3: CD–ROM VSEBINA

Primeri uporabe USB

• Primer 1: Enumeracija, odpiranje in zapiranje USB naprav

• Primer 2: Bit-bang nain

• Primer 3: Funkcijski generator sinusne, trikotne in pravokotne napetosti

• Primer 4: Upravljanje LED diod s stikali

• Primer 5: AVR ISP s pomojo SPI in uporabo bit-bang naina

• Primer 6: Komunikacija osebni raunalnik – mikrokrmilnik preko USB

Dokumentacija

• FT245BM USB FIFO IC Data Sheet, rev. 1.7

• DLP-USB245M User Manual (02.02.2006)

• D2XX Programmer's Guide, rev. 3.3

• Application Note AN232BM-01: FT232BM/FT245BM BIT BANG MODE (1.0)

• AVR STK500 User Guide (marec 2003)

• AVR910: In-System Programming

• ATmega16(L) (ver. M)

• Data Sheet 29304.3E : 2803 THRU 2824, HIGH-VOLTAGE, HIGH-CURRENT

DARLINGTON ARRAYS

Druge datoteke

• Gonilniki za Windows 2000/XP

• D2XXUnit.pas

• MProg v2.8

• FTD2XX.pas

Page 73: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 73

Viri in literatura [1] FT245BM USB FIFO IC Data Sheet, rev. 1.7

http://www.ftdichip.com/Documents/DataSheets/ds245b17.pdf

Future Technology Devices Intl. Ltd., 2005

CDROM:\Dokumentacija\

FT245BM USB FIFO IC Data Sheet rev. 1.7.pdf

[2] DLP-USB245M User Manual

http://www.dlpdesign.com/usb/dlp-usb245m13.pdf (02.02.2006)

DLP Design, 2006

CDROM:\Dokumentacija\DLP-USB245M User Manual (02.02.2006).pdf

[3] D2XXUnit.pas

http://www.ftdichip.com/Projects/CodeExamples/Delphi/D2XXUnit.zip

Future Technology Devices Intl. Ltd., 2005

CDROM:\Dokumentacija\D2XXUnit.pas

[4] D2XX Programmer's Guide, rev. 3.3

http://www.ftdichip.com/Documents/ProgramGuides/D2XXPG33.pdf

Future Technology Devices Intl. Ltd., 2006

CDROM:\Dokumentacija\D2XX Programmer's Guide, rev. 3.3.pdf

[5] Application Note AN232BM-01: FT232BM/FT245BM BIT BANG MODE (1.0)

http://www.ftdichip.com/Documents/AppNotes/AN232B-01_BitBang.pdf

Future Technology Devices Intl. Ltd., 2005

CDROM:\Dokumentacija\AN232B-01_BitBang (1.0).pdf

[6] AVR STK500 User Guide (21.09.2006)

www.atmel.com/dyn/resources/prod_documents/doc1925.pdf

Atmel Corporation, marec 2003

CDROM:\Dokumentacija\AVR STK500 User Guide.pdf

[7] AVR910: In-System Programming

http://atmel.com/dyn/resources/prod_documents/DOC0943.PDF

Atmel Corporation, november 2000

CDROM:\Dokumentacija\AVR910_In-System Programming.pdf

[8] ATmega16(L) (ver. M)

http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf

Atmel Corporation, 2006

CDROM:\Dokumentacija\ATmega16(L) (ver. M).pdf

Page 74: PRVI KORAKI V MERJENJE IN KRMILJENJE S POMO JO USB … · monitoring and control of it's data bus pins We take a task to present some examples, how to use this new USB piece of hardware

Prvi koraki v merjenje in krmiljenje s pomojo USB vodila 74

[9] Data Sheet 29304.3E :

2803 THRU 2824, HIGH-VOLTAGE, HIGH-CURRENT DARLINGTON ARRAYS,

http://pdf1.alldatasheet.com/datasheet-pdf/view/55054/ALLEGRO/ULN2803A.html

(20.09.2006)

Allegro MicroSystems Inc, Worcester, Massachusetts, USA

CDROM:\Dokumentacija\ ATmega16(L) (ver. M).pdf

[10] Axelson, Jan:

USB Complete: Everything You Need to Develop Custom USB Peripherals, 2nd Edition

Lakeview Research, avgust 2001

[11] Wikipedia, prosta enciklopedija

http://www.wikipedia.com

[12] David Kalinsky, Roee Kalinsky: Embedded Systems Design

http://www.embedded.com/story/OEG20020124S0116 (24.09.2006)

[13] ve avtorjev: What is a USB?

http://www.pulsewan.com/data101/usb_basics.htm (24.09.2006)