a/d - d/a konvertere 30/1-2018 redigeret · a/d - d/a konvertere redigeret 30/1-2018 af: valle...
TRANSCRIPT
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 1 af 47
Kompendium / noter om signaler og A/D-D/A-konvertering:
Først ses her lidt på begrebet harmoniske signaler:
Harmoniske Signaler
Alle periodiske svingninger kan opløses i en grundtone plus eller minus et antal højere harmoniske
frekvenser, med aftagende amplitude.
Ethvert periodisk signal, dvs. et, der gentager sig selv, kan uanset kurveform opløses i en række
sinustoner med forskellig frekvens, amplitude og fase.
Fænomenet blev opdaget af en fransk matematiker, Jean-Baptiste Joseph Fourier [Fur’je´]. Det gav
senere navn til Fourier-analyse og Fouriertransformation.
At overtonerne kan have forskellig fase betyder, at de kan være forskudt i tid.
Givet følgende kredsløb:
Den første generators frekvens er 1000 Hz, og amplituden 1 Volt. Den anden er 3000 Hz med en
amplitude på 1/3 Volt. Og den 3. har 5000 Hz og amplituden 1/5 Volt.
De 3 generatorer giver flg. signaler:
f 0
V1
FREQ = 1000VAMPL = 1VOFF = 0
f 3
R5
1k
f 5
R2
1k
0
R6
1k
0
R4
1k
0
V3
FREQ = 5000VAMPL = 0.2VOFF = 0
V
V2
FREQ = 3000VAMPL = 0.33VOFF = 0
0
Usum
U2
OPAMP
+
-
OUT
U1
OPAMP
+
-
OUT
V
VR3
1k
V
R1
1k
0
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 2 af 47
Den matematiske fremstilling er som flg.:
ttt
Atf
5sin
5
13sin
3
1sin
4 hvor A er signalets amplitude, og er lig 2f.
Adderes signalerne fås summen af dem. Det ser ud som flg.:
Her vises alle signaler sat sammen!
Time
0s 0.5ms 1.0ms 1.5ms 2.0ms 2.5ms 3.0ms
V(F0) V(F3) V(F5)
-1.0V
-0.5V
0V
0.5V
1.0V
Time
0s 0.5ms 1.0ms 1.5ms 2.0ms 2.5ms 3.0ms
V(USUM)
-1.0V
-0.5V
0V
0.5V
1.0V
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 3 af 47
Og med 5 generatorer
Med 7 generatorer
Time
0s 0.5ms 1.0ms 1.5ms 2.0ms 2.5ms 3.0ms
V(F0) V(USUM) V(F3) V(F5)
-1.0V
-0.5V
0V
0.5V
1.0V
Time
0s 0.5ms 1.0ms 1.5ms 2.0ms 2.5ms 3.0ms
V(F0) V(USUM) V(F3) V(F5) V(R7:2) V(V5:+)
-1.0V
-0.5V
0V
0.5V
1.0V
Time
0s 0.5ms 1.0ms 1.5ms 2.0ms 2.5ms 3.0ms
V(F0) V(USUM) V(F3) V(F5) V(R7:2) V(R8:2) V(V6:+) V(R10:1) V(R11:1)
-1.0V
-0.5V
0V
0.5V
1.0V
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 4 af 47
Det ses, at jo flere harmoniske signaler, der adderes, jo tættere kommen man på en ren firkant.
Dvs. at ikke-Sinusformige signaler kan opløses i en grundsinus plus et antal harmoniske. Det
betyder også, at skal et ikke-sinusformigt signal forstærkes i en forstærker, skal forstærkeren kunne
håndtere både grundtonen, og de højere harmoniske.
Musikinstrumenter
Baggrunden for at vi kan skelne forskellige musikinstrumenter og stemmer fra hinanden, ligger i den
forskellige kombination af overtoner. Instrumenterne giver altså svingninger, der består af en
grundfrekvens plus et antal harmoniske. Grundfrekvensen er jo den samme hvis instrumenterne
spiller samme tone – eller node. Fx kammertonen, 440 Hz!! Forskellen i lyden ligger i overtonerne.
Skal en lyd fra et instrument med en given frekvens forstærkes i en forstærker, skal forstærkeren
selvfølgelig kunne gengive grundtonen, men altså også den dobbelte frekvens, den 3-dobbelte, den
4-dobbelte osv.
En god forstærker skal altså kunne håndtere betydelig højere frekvenser end 16 kHz for at kunne
gengive høje frekvenser, der ikke er sinusformede.
Denne graf viser forskellige
instrumenter og deres
overtoner.:
Illustrationen viser frekvensområderne, eller toneomfanget, for forskellige musikinstrumenter og
sangstemmer. Til venstre grundtoner, den 2. harmoniske ( overtone ) og den 3. harmoniske. Nederst
er også medtaget flyglets klaviatur samt nodesystemet.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 5 af 47
Og her en anden:
Se den på ” interaktiv” side:
http://www.independentrecording.net/irn/resources/freqchart/
main_display.htm
Her er vist
frekvenserne
( grundtoner )
for et klavers
forskellige
tangenter:
Ikke-periodiske signalers rækkeudvikling:
En savtak ser således ud :
tttt
Atf
4sin
4
13sin
3
12sin
2
1sin
2
En trekant :
tttt
Atf
7sin
7
15sin
5
13sin
3
1sin
8222
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 6 af 47
Jo kortere en firkantpuls, der skal gengives, jo langsommere klinger de højere harmoniske af. Dvs.
at der ved computerbrug, hvor der jo forekommer firkantpulser, frembringes et stort antal signaler
med meget høje frekvenser.
Dette indikeres af denne scannede
oversigt.
For de forskellige signaler vises
indholdet af harmoniske!
Det ses, at frekvensspektret for
firkantpulser, med lav dutycycle har
næsten uendelig mange harmoniske,
der næsten ikke klinger af i
amplitude!!
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 7 af 47
Her ses øverst
uregelmæssige
svingninger. Det
vil vi opfatte som
støj.
Nederst en sving-
ning, der gentager
sig – i hvert fald
inden for et lille
stykke tid. Vi kal-
der det lyd!
Hvorfor lyder instrumenter forskelligt??
Her ses et billede af lyd-
tryk-svingningerne fra en
Piano og en Clarinet.
De spiller samme frekvens.
Men lyder forskelligt.
Her spilles den samme tone, = frekvens, på et piano og en klarinet. Grundtonen eller grundfrekven-
sen ses, og ”forvanskninger af den” giver den specifikke lyd.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 8 af 47
http://chaos.nus.edu.sg/teaching/GEM2507/tutorials/tutorial%203%20GEM2507.ppt#265,22,Timbre Profile of Tuning Fork, Flute and Clarinet
For mere info: Søg: sound waves music instruments fourier harmonics ppt
Her et skærmbillede fra et
online program.
Man kan manipulere med
grundfrekvensen, og så
forvanske – eller ødelægge
svingningen – og høre ly-
den!!
Kræver Java !!
http://www.phy.ntnu.edu.tw/ntnujava/index.php?topic=17
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 9 af 47
Her ses lidt på analoge spændinger:
Analoge spændinger kan antage
uendeligt mange værdier. Fx imellem
0 og 12 Volt, eller over og under 0
Volt.
Analoge signaler på en Vinyl LP-plade:
I grov udgave ser en analog vinyl
grammofonplade sådan ud:
En nål har skåret riller i vinylen. Imens pladen
drejede, har nålen været påvirket af et (musik)-
signal, så rillen svinger i takt med musikken.
De næste plader er lavet som et aftryk af den
første plade!
I de næste billeder er der zoomet ind på rillerne:
Her to eksempler på ”nærbilleder af en LP-plade”
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 10 af 47
En grammofon-nål i en
vinylplade.
Gengivelse af information fra LP-plader
De første grammofon-afspillere havde en nål, hvis vibrationer blev mekanisk overført til en tynd
plade, som satte luften i bevægelse. Altså skabte lyd. Lyden blev ført igennem et rør og ud af en
tragt i retningen af lytteren.
http://keithwright.ca/Thorens/radiophonomania/tranradiophono.html
Pladen lå på en pladetallerken, der blev drejet rundt
af en spiralfjeder med en rimelig konstant hastighed.
Fjederen kunne strammes op med et håndsving.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 11 af 47
Billede af en moderne grammofon:
Pickup‘en sidder på en arm, der kan styre
pickup’en og følge med ind mod midten af
pladen, efterhånden som numrene bliver færdig-
spillet.
Pickup’en genererer et lille elektrisk spændingssignal baseret på nålens svingninger. Dette signal
skal så forstærkes og føres til en udgangsforstærker.
Principperne i Moving Coil og Moving Magnet pickup.
http://electronicdesign.com/components/what-s-difference-between-moving-magnet-coil-and-iron-cartridges-turntables
http://www.djworx.com/skratchworx/reviews/ortofon_manufacture.php
http://en.wikipedia.org/wiki/File:Moving_Coil_Cartridge.jpg
Der er to principper. I det ene vil nålens svingninger overføres til en lille magnet, som dernæst
genererer spændinger i stationære spoler. I det andet er det modsat. Her er det spolerne, der vibrerer,
og via et stationært magnetfelt skaber elektriske spændingssvingninger.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 12 af 47
Herover et par billeder af princippet i informationen i rillerne i en vinylplade: Det ses, hvordan der
er stereo-information i rillen.
Når pladen afspilles, kører en nål igennem rillen. Dens vibration vil være som det originale
musiksignal. Vibrationen overføres fx via en spole og et magnetfelt til en spænding, der forstærkes,
og sendes ud i højtalere.
På skitsen til højre ses, at der kan være 2 retninger på vibrationen. Dvs. der kan være stereo-signal
gemt i rillen.
Støv, fnug og ridser giver selvfølgelig anledning til støjsignaler oveni det ønskede musiksignal.
Digitale signaler.
I den digitale verden eksisterer
der kun 0’ere og 1’ere. Fx gemt
som prikker og streger på en CD-
plade.
Prikkerne og stregerne angiver et
antal bit, der igen angiver et tal,
som omformes til en spænding,
der skal forstærkes og sendes ud
til en højtaler.
Dvs. at et signal gemmes som en række tal, der på grafen herover repræsenterer hvor langt man er
oppe eller nede ad Y-aksen, svarende til en øjeblikkelig spænding.
Men som det ses her, er der en række problemer. Skal man kunne udtrykke et uendeligt antal
spændinger, skal der et uendeligt antal talværdier til, – og dermed et uendeligt antal bit.
Yderligere må det være væsentligt, hvor ofte der udregnes en talværdi for musiksignalet. Dette
kaldes ” Sampling Rate ”.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 13 af 47
Antal bit. Opløsning.
Opløsningen, dvs. nøjagtigheden af et
signal beskrevet med binære tal,
afhænger af antallet af bit.
Her er der vist et eksempel med 4 bit.
Der er med 4 bit mulighed for at
beskrive op til 16 forskellige
spændinger.
De næste eksempler er fra: http://communication.howstuffworks.com/analog-digital3.htm
Et analogt signal kunne se således
ud:
Sampling Rate.
Et analogt signal måles et
bestemt antal gange pr sekund.
Og den målte værdi udtrykkes
som et tal.
Digitalisering betyder, at man
omsætter et analogt signal til
en repræsentation på digital
form. Dvs. en spænding
udtrykkes som et tal.
Hvis det oprindelige analoge signal skal beskrives helt nøjagtigt, skal man sample med meget kort
interval, og med mange bits opløsning. Ovenfor vises et analogt signal, det er den røde graf.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 14 af 47
Og med de grønne søjler vises hvordan signalet vil se ud, når talværdierne senere skal gengives.
Når det gemte signal senere gengives, mistes alle de mellemliggende værdier mellem samplingerne.
En meget større opløsning –
både i antallet af bit, og i
samplingsrate medfører et
meget bedre beskrivelse af det
oprindelige signal.
Sampling med dobbelt frekvens.
Her ses på sample-ratens betydning:
Eksempel:
Sampleraten for viste signal er meget større end
signalets frekvens.
Eller sagt på en anden måde: Tiden mellem
samples er meget kortere end signalets
periodetid, T.
De sorte pletter viser, hvor der er taget samples.
Her er der ikke så mange samples pr hel
svingning.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 15 af 47
Og her ca. 1 sample pr bølgelængde. ( T )
Det, der skal bemærkes, er, at når signalet
gengives, vil der fremkomme en meget lavere
frekvens end det oprindelige signal.
Derfor er det vigtigt, at samplefrekvensen er
større end signalets frekvens.
Her et andet eksempel på for lav samplingsfrekvens:
Tommelfinger-regel:
Der skal bruges mindst den dobbelte
samplingsfrekvens, som signalets frekvens.
http://www.ee.nmt.edu/~rison/ee308_spr12/notes/Lecture_22.pdf
http://www.asel.udel.edu/speech/tutorials/instrument/sam_rat.html
CD-skive.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 16 af 47
Hvis man optager noget musik, gemmes det i dag fx på en CD-skive. Det er 1’ere og 0’ere, der
gemmes.
Her ses en grov beregning over
antallet af bytes, der er gemt på en
CD med musik i 74 minutter:
Der samples med 44,1 KHz.
44.100 samples/(channel*second) * 2
bytes/sample * 2 channels * 74 minutes * 60 seconds/minute = 783,216,000 bytes
Altså mindst 783 Mbyte skal
gemmes på en CD-skive.
Oversampling:
Oversampling kan forbedre lyden fra en Cd-
afspiller. Det foregår ved, at afspillerens
computer beregner mellemliggende værdier
imellem de samplede ved hjælp af Interpolation.
Dvs. at den 44,100 kHz firkant, der normalt
overlejrer signalet fra CD-afspilleren, vil få en
meget højere frekvens ved oversampling.
Det betyder, et simpelt RC-filter meget lettere
kan fjerne samplingsstøjen, uden at påvirke
selve signalet.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 17 af 47
Eksempel:
Her er vist et eksempel på et signal fra en CD-
afspiller.
Det var oprindeligt en sinus, men er efter
digitaliseringen – med 44,1 kHz, - blevet hakket.
Et digitalt signal hentes i fx fra en CD eller en
RAM og konverteres til analog.
Udgangssignalet ses til højre.
Efter Digital til Analog-konverteren kommer
signalet igennem et lavpas-filter, der dæmper de
høje frekvenser.
Det digitale signal før og efter filtrering.
Det ”firkant hakkede” fra A/D-konverteren og
signalet efter en filtrering i et RC-led, et
lavpasfilter.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 18 af 47
Med 4-dobbelt oversampling i afspilleren får
samplings-firkanterne en meget højere frekvens.
Dermed bliver det meget lettere at filtrere de
uønskede signaler væk med et simpelt RC-filter.!
8 gange oversampling.
Dvs. at man med et simpelt
RC-filter kan fjerne den nu
meget højere sampling-
”støj –frekvens”. Dette
ses herunder:
Den stiplede skrånende linje
viser et Bodeplot for et RC-led.
Bodeplottet har sit knæk ved 20
KHz.
Dette vil ganske vist medføre en fasedrejning på 45 grader i knækket!! Men samplestøjen, der ved
oversampling fx ligger på 352,8 kHz fjernes meget lettere.
Samplerate for et telefonsignal:
I en telefon overføres frekvenser fra 100 Hz til 3 kHz. Derfor bør sampleraten være på 8 kHz.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 19 af 47
A/D-D/A konvertering
Digitale komponenter kan ikke håndtere analoge signaler, - bortset fra, at en komparering kan siges
at være en form for digitalisering. Det kan ske med en komparator, evt. bygget af en OPAMP, eller
fx en NAND-gate med hysterese. Men dette giver kun en 1-bits opløsning.
Ønsker man fx en 8-bits opløsning må der mere sofistikerede løsninger til. Det kan illustreres med
følgende skitse:
På omformerens udgang optræder et binært tal. I dette tilfælde et 8-bits tal. Dvs. værdier fra 0 til
255D eller fra 00000000B til 11111111B.
Hvis indgangssignalet fx går fra 0 til 10 Volt, kan det følgelig indrettes således, at 8 nuller svarer til
en indgangsspænding på 0 Volt, og 8 1’ere til 10 Volt. Altså, hvert tal på udgangen repræsenterer et
spring på mVolt2,39255
10 . Hvis potentiometeret på indgangen langsomt skrues fra 0 til 10 Volt,
vil udgangen bevæge sig fra 8 nuller og opad i det binære talsystem som en 8 bit tæller. Hver gang
indgangsspændingen stiger ca. 39 mV vil tallet på udgangen stige med 1.
Et eksempel på en digitalisering.
Her ses et indscannet billede af et indgangssignal, der er digitaliseret til 4 bit. Når de 4 bit
talværdier senere igen konverteres til analog spænding, ( det højre billede ) ses at de analoge
spændinger antager en trappe-kurveform.
En opløsning med 8 bit ville gøre opløsningen meget bedre.
0
tilDigital
LSB
R13
1
2
MSB
VCC
Bit 7
Bit 0
Analog
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 20 af 47
Opbygning af A/D konvertere.
Flash-konverter:
Dette eksempel viser et
diagram, hvor der er brugt
komparatorer, og en
referencespænding.
Som denne skitse indikerer,
vil man ved større bit-
opløsninger komme op på
rigtig mange modstande og
komparatorer i en converter
af denne type.
Til en konverter med bare
3-bit skal bruges 8
referencespændinger, og 8
komparatorer.
Dette princip er det
hurtigste til at lave en
konvertering!
Men princippet bruger mange komponenter, og bruges kun ved lav opløsning, dvs. <= 8 bit.
Modstandsnetværket skaber 2n – 1
spændingsniveauer.
Opløsningen er:
2 1
ref
n
U
R6
1k
U1
OPAMP
+
-
OUT
R9
1k
U2
OPAMP
+
-
OUT
Bit 2
8 til 3
kon-
verter
0
U3
OPAMP
+
-
OUT
Bit 0
Bit 1
0
R7
1k
U5
OPAMP
+
-
OUT
R4
1k
R13
1
2
Ureference
VCC
R5
1k
R10
500
U8
OPAMP
+
-
OUT
U4
OPAMP
+
-
OUT
U6
OPAMP
+
-
OUT
R2
1k
R3
1k
R8
1k
U7OPAMP
+
-
OUT
010
001
000
011
Kode
Usignal
100
Delta
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 21 af 47
Det er meget vigtigt, at modstandene i modstandsnetværket er ret præcis, at de genererede
referencespændinger er nøjagtige.
For at lave bedre overensstemmelse
mellem faktisk værdi og konverteret
værdi, bør første Delta værdi kun være
den halve værdi:
Digital til Analog konvertere
Her ses et ”diagram-symbol” for en Digital til Analog konverter: Fra venstre tilføres et antal bit:
Hvis bittene ind i en DAC kaldes d1, d2, .. dn,
hvor MSB er d1, fås, idet Uout = D * Uref:
( d1, d2, osv. er enten 1 eller 0 )
1 2 3
1 2 32 2 2 2 n
nD d d d d
out refU D U
Hvis Uref er 10 Volt, medfører det, at der fås 10 / 2n amplitude – muligheder.
Eller måske en mere logisk måde at udregne udgangsspændingen på:
𝑈𝑂𝑢𝑡 = (𝐷7
2+
𝐷6
4+
𝐷5
8+
𝐷4
16+
𝐷3
32+
𝐷2
64+
𝐷1
128+
𝐷0
256) ∗ 𝑈𝑅𝑒𝑓𝑒𝑟𝑒𝑛𝑐𝑒
Graduerede modstande:
010
001
000
011
Kode
Usignal
100
Delta
d1
0
d2
d3
Uout
dn
Gnd
Uref
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 22 af 47
Ved store opløsninger er det nødvendigt med ret store modstandsspring, og ret nøjagtige
modstandsstørrelser. Anvendes derimod et andet princip, opereres der kun med 2
modstandsstørrelser:
Her er et eksempel på opbygning af en Digital til Analogkonverter, hvor der er brugt forskellige
størrelser af modstande.:
I kredsløbet indgår en række switche, og nogle graduerede modstande. Når en switch er ”ON”, løber
der en strøm mod nul, dvs. virtuel stel. Strømmen må fortsætte op gennem R11, mod Uout, som må
være negativ. Derfor følger, at jo flere switche der er ON, jo mere negativ vil Uout være!
I stedet for switchene kunne udgangene i fx en CMOS-tæller bruges.
Det ses, at med store opløsninger, dvs. større antal bit, skal der ret store modstande til for mindst
betydende bit, LSB.
R-2-R netværk
Dette problem er løst med følgende kredsløb. Der er anvendt et såkaldt R2R-netværk, der kan
opbygges af almindelige modstande, men også fås færdig i en SIL, ( Single in Line ).
R2R-Modstandene er placeret i et SIL-hus
( Single In Line )
Se fx: http://www.bourns.com/pdfs/r2rap.pdf
2^2
0
R1
1k
2^0
R11
1k
MSB
12
Uref
R5
16k
12
LSB
12
Uout
R2
2k
2^32^4
R3
4k1
2
R4
8k
2^1 Negativ
U9
OPAMP+
-
OUT
12
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 23 af 47
Et R2R-
netværk består
af 2 størrelser
modstande. Fx
en værdi på
10K og den
dobbelte værdi,
20K.
Konvertere på markedet har en opløsning på mindst 8 bit, men for overskuelighedens skyld er her
vist en 4 bit udgave.
Ved hjælp af en kombination af switchene kan der frembringes i alt 24 forskellige
udgangsspændinger. Er alle switche på 0, dvs. mod højre, er udgangsspændingen = 0.
Switches MSB-switchen ON, vil der løbe en strøm i R8. Den løber gennem R7 og forgrener sig så.
Ses på modstandene fra venstre, ses, at R1 og R2 er parallelle. Altså = 10 K. I serie med R3 giver
det 20 K. Og så fremdeles. Det betyder i alt, at strømmen gennem R8 = 20 K går videre ind i ialt 20
K. gennem R7 på 10 K og resten, der også udgør 10 K.
Alt i alt vil spændingsdelingen mellem R8 og R7 + resten give halv spænding til
operationsforstærkeren, der blot er koblet som 1 gangs forstærker.
Vha. beregninger med superpositionsprincippet, Thevenin og Mayer Norton, eller ved brug af
ORCAD Bias Voltage simuleringer, kan de forskellige kombinationer af switchene udregnes. Det
giver i alt 16 forskellige spændinger på udgangen med 4 kontakter.
Her er vist en
ORCAD-
simulering hvor
kontakterne er
indikeret med
påtrykte
spændinger.
Med MSB = ’1’,
må udgangs-
spændingen være
det halve af den
påtrykte spænding.
R2
20k
R5
10k
R8
20k
0
R6
20k
MSB
Uref
R3
10k
LSB
Uout
R7
10k
R1
20k
R4
20k
0
U1
OPAMP
+
-
OUT
R7
1k
R2R-Netværk
5.000V
U3
OPAMP
+
-
OUT
1.250V
R2
2k
0V
R8
1k
312.5mV
0
4
2.500V
1V4
0Vdc
00
0V
R1
2k
0V 0V
V3
0Vdc
625.0mVR6
1k
R4
2k
0
8
R3
2k
R5
2k
V1
5Vdc
V2
0Vdc
0
2.500V
2
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 24 af 47
Gøres nu
også den
næst mest
betydende
bit høj,
stiger
udgangs-
spændingen
.
Opløsningen er 5/16 = 0,3125 Volt.
Udgangsspændingen skal altså være 5
16 ∙ 12 = 3,75 𝑉𝑜𝑙𝑡
Strømmen fra 5 Volts-
kilden fordeler sig i to
lige store dele. Fordi, den
”ser ind i ” lige store
modstande til begge sider
efter R2.
Strømmen gennem R6
deler sig igen i to lige
store dele,
Den ene gennem R7, den anden gennem R3.
Dvs. strømmen halveres for hvert led, og strømmen gennem R11 er meget lille i forhold til gennem
R2.
Derfor giver LSB kun el lille bidrag til strømmen gennem R11 og dermed udgangsspændingen!
Opgave:
Opbyg ovenstående i ORCAD. Som Uref bruges fx VDC, der sættes på 5 volt.
Prøv forskellige bit-værdier, og regn efter.
Øvelse:
Opbyg en 8-bit CMOS-tæller. Brug fx en funktionsgenerator til at give pulser. ( Tjek pulserne med
scoopet, inden de tilsluttes tælleren. ).
R3
2k
R2R-Netværk
5.000V
V2
0Vdc
3.125V
R5
2k
5.000V
V1
5Vdc
U3
OPAMP
+
-
OUT
781.3mV
0
4
3.750V
1V3
5Vdc
00
0V
R6
1k
0V 0V
R8
1k
R2
2k
1.563V
V4
0Vdc
R1
2k
0
8
R7
1k
R4
2k
0
3.750V
2
R5
2k
42
R3
2k
1
R11
2k
R7
1k
0
V1
0Vdc
R2
2k
0
R4
2k
LSB
V3
0Vdc
V2
5Vdc
R12
2k
0
V4
0Vdc
0
R1
2k
R6
1k
MSB
R8
1k
0
8
R2R-Netværk
0
U1
OPAMP
+
-
OUT
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 25 af 47
Monter et R2R-netværk på tælleren, og mål på netværkets udgang med et scoop.
R2R-netværk med inverterende OPAMP
Mange steder ser man i stedet for ovenstående kobling med noninverting OPAMP, en opstilling,
hvor en inverting OPAMP er brugt. Det betyder, at man belaster netværket med modstanden før den
inverterende indgang.
Det betyder også, at der trækkes en strøm ud af netværket.
Strømmen fra den mest betydende bit løber igennem R5, og deler sig i 2. En gren løber mod højre
mod virtuel stel gennem R11, den anden mod venstre gennem R8.
Regnes de næste modstande sammen til venstre for R8, fås værdien 1K. Dvs. strømmen mod venstre
også ”ser” ind i 2 K, og de to strømme er altså lige store.
Strømmen op gennem R5 skal altså videre gennem en modstand på 1 K ( Summa R8 parallel med
R11 ). Spændingen mellem R8 og R11 vil altså være ( 5 / 3K ) * 1 K = 1,667 V.
Hvis udgangsspændingen skal være 2,5 Volt efter de to OPAMP’s skal gain være 1,5 gange.
Her ses et
eksempel,
hvor alle 4 bit
er høje.
Udgangsspændingen skal altså være 5
16 ∙ 15 = 4,6875 𝑉𝑜𝑙𝑡
R2
2k
0
833.3mV
R3
2k
R5
2k
0V
R4
2k
R6
1k
1.667V
0V 8V4
0Vdc
R7
1k
1
416.7mV
0
V2
0Vdc
R12
3k
00
-2.500uV
0V
2.500V
0V
V1
5Vdc
R11
2k
2
R1
2k
5.000V
R8
1k
R2R-Netværk
0
U1
OPAMP
+
-
OUT
4
R13
1k
U2
OPAMP
+
-
OUT
V3
0Vdc
R14
1k
0
208.3mV
2.500uV
0
R2
2k
0
3.750V
R3
2k
R5
2k
5.000V
R4
2k
R6
1k
3.125V
0V 2V4
5Vdc
R7
1k
3.750V
0
V2
5Vdc
R12
3k
00
-4.688uV
R2R-Netværk
5.000V
4.688V
5.000V 8
V1
5Vdc
R11
2k
R1
2k
5.000V
R8
1k
4
0
U1
OPAMP
+
-
OUT
1
R13
1k
U2
OPAMP
+
-
OUT
V3
5Vdc
R14
1k
0
3.125V
4.688uV
0
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 26 af 47
8 bit R2R-netværk.
Her en skitse af et 8 bit R2R-
netværk.
Øvelse: Opbyg følgende kredsløb i ORCAD.
I light versioner af ORCAD vælges tælleren 74393.
Reset kan sættes til at give en kort puls, eller stelles, men så skal man ind i Simulation Settings ->
Output ??? og tvinge alle flipflops til at starte på ”0”.
R7
20k
R4
10k
V
0
R3
10k
CLKDSTM1OFFTIME = .5uS
ONTIME = .5uSDELAY =
STARTVAL = 0OPPVAL = 1
Reset
R2
10k
Uout
R11
20k
Resetpuls
R10
20k
S1DSTM2
R1
20kClock
Stim1
V
R5
10k
R8
20k
Digclock
R9
20k
U2
CD4040B
9765324131214151
10
11
Q1Q2Q3Q4Q5Q6Q7Q8Q9
Q10Q11Q12
INPUT
RE
SE
T
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 27 af 47
Grafen burde se
nogenlunde sådan
ud:
De små ”glitches”
stammer fra
tællerens udgange,
der ikke skifter
nøjagtig på samme
tid.
De kan evt. fjernes
med en lille
kondensator.
Lyd eller signal fra en EPROM ( Alarm, det brænder )
EPROM.
Erasable Programmable Read Only Rom.
Slettes med intens UV-lys.
2764, betyder 64 KBit, dvs. 8 KByte.
Her ses gennem Kvarts-vinduet.
Se i mikroskop:
https://www.youtube.com/watch?v=cwl4P36r4Ls
https://www.youtube.com/watch?v=Fxv3JoS1uY8
Time
0s 10us 20us 30us 40us 50us
V(UOUT)
0V
2.5V
5.0V
0s 10us 20us 30us 40us 50us
RESET
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 28 af 47
Ses på data på ” hylderne ” i EPROM’en
kunne det se således ud.
Her er vist et eksempel på en
oscillator, der tæller op og stepper sig
gennem hylderne i en EPROM.
Forskellige A/D konverter-principper:
Ofte bruges en D/A-konverter bygget ind i en A/D-konverter-IC.
Der er fremstillet et antal forskellige typer. De vigtigste gennemgås her.:
Rampetæller AD Konverter:
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 29 af 47
Efter reset vil tællerens udgang være 00000000.
Dette betyder, at spændingen fra R2R-netværket
mærket Ux er 0 Volt. Ux stiger eftersom tælleren
tæller pulser fra oscillatoren.
Komparatoren sammenligner den påtrykte
spænding, Uin, med spændingen fra R2R-
netværket. Når Ux bliver højere end Uin lukker
AND-gaten ikke flere klocksignaler gennem til
tælleren. Tællerens værdi er nu et udtryk for Uin.
Dual Slope-konverter:
I en Dual Slope konverter udnyttes, at det tager tid at oplade en kondensator gennem en modstand.
På indgangen af den første OPAMP, U2, vil der være 0 volt. Strømmen, der kommer fra Uin vil gå
gennem modstanden R, og op gennem kondensatoren C. Venstre side ophober ladninger. Og for
ikke at spændingen skal stige på den inverterende indgang, må højre side af kondensatoren skulle
have mere og mere negativ spænding.
Digital ud
U3
AND2 12
3
ResetUin
U1
Komparator
+
-
OUT
Osc
R2R
Binær Tæller
8 x
Clk
Netværk
Oscillator
Ux
t
Uin
Ux
R
Reset
LSB
U3AND2 1
2
3
Clock
1
2
3
4
Uin
U1
Komparator
+
-
OUT
0
- U reference
Tæller
0Integrator
MSB
C Oscillator
U2OPAMP
+
-
OUT
SWitch
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 30 af 47
Dette sker så længe tælleren er 0 på MSB. Bliver den høj, starter de øvrige bit jo fra 0, og switchen
skifter ned til den negative reference-spænding. Det får strømmen til at gå modsat vej gennem
modstanden R. Strømmen kommer oppe fra de ophobede ladninger i kondensatoren. Spændingen på
kondensatorens højre side vil stige, og når den når over nul, vil komparatoren U1 stoppe
klockpulserne til tælleren. Tællerens output er nu et udtryk for indgangsspændingen!!
Jo højere indgangsspændingen er, jo mere bliver kondensatoren opladet, og jo længere tid vil det
tage at aflade den igen.
Altså, man lader kondensatoren i en kendt tid, og måler så tiden, det tager at aflade den igen.
Når kondensatoren lades, sker det med konstant strøm. Derfor gælder følgende formler:
Q U C og Q I t
Strømmen I er givet ved: 𝐼 =𝑈𝑆𝑖𝑔𝑛𝑎𝑙
𝑅
Herved fås: 𝑈 ∙ 𝐶 =𝑈𝑆𝑖𝑔𝑛𝑎𝑙∙𝑡
𝑅
Og endelig kondensatorens opladning:
𝑈𝐶 =𝑈𝑆𝑖𝑔𝑛𝑎𝑙∙𝑡
𝑅∙𝐶
Bemærk, her er
kondensatorens
opladespænding vist positiv.
Der lades en konstant tid, og
så måles der hvor lang tid
det tager at aflade den igen
med en kendt strøm.
Spænding til frekvens-konverter.
En spænding til frekvens-A/D-konverter bygger på at jo højere indgangsspænding, der påtrykkes, jo
flere gange kan man nå, at oplade en kondensator til en bestemt spænding inden for en given tid.
t1 = opladning
Fixed tid
Usignal
Fixed strøm
I = k
t2 = afladning
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 31 af 47
Når en bestemt oplade-spænding er nået, kortsluttes kondensatoren, og opladningen gentages.
Opladningen går hurtigere ved højere indgangsspænding. Herved vil antallet af opladninger i løbet
af en bestemt tid sige noget om indgangsspændingen.
Spændingen på punkt 3 går retlinet nedad. Når den når den negative referencespænding, går
komparatoren høj, og sender en puls til tælleren og til pulsformeren, der kortslutter kondensatoren!
Herefter gentages forløbet.!
Antallet af pulser til tælleren i løbet af en bestemt tid, en timebase, er ligefrem proportional med
indgangsspændingen!
Successiv approximationsprincippet
I en successive approximations konverter startes med at sætte MSB høj. En komparator
sammenligner så den spænding, der kommer ud af R2R-D/A-konverteren. Er spændingen lavere end
den spænding man vil måle, fortsætter MSB med at være høj, ellers resettes den til 0.
Herefter ”prøves” med næste bit. Så hver bit sættes høj eller lav, alt efter om den genererede
spænding er højere eller lavere end inputspændingen.
Når alle bit er gennemløbet, vil det binære tal være et udtryk for inputspændingen.
R1
U3
AND2 12
3
7
4
- U reference
Kontrollogik
6
Uin
Reset12
U1
Komparator
+
-
OUT
Tæller
Timebase &
0
2
Impulsformer
Integrator
C
Reset
Count_Enable
3U2OPAMP
+
-
OUT
5
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 32 af 47
Skitse over det
indre i en ZN449
A/D konverter.
Princippet svarer til at man skal
gætte et tal mellem 1 og 100.
Først gætter man på 50, og får at
vide, det er højere. Så på 75, og får at
vide, det er lavere. Derefter midt
mellem 50 og 75, fx 62, osv.
Sample & Hold kredsløb.
For at undgå, at Uin ændres under et konverteringsforløb, anvendes et ” Sample and hold” kredsløb.
Den viste kontakt sluttes kortvarigt. Herved
får kondensatoren samme spænding som
Uin. Denne spænding holdes konstant af
kondensatoren, når kontakten åbnes.
Hvis der anvendes en god kondensator med lille lækstrøm, og en god operationsforstærker med en
stor Ri, kan spændingen opretholdes ganske længe. Meget længere tid, end der skal til for at foretage
en A/D konvertering.
Switches
FlipFlop
Uin
R2R-net
Skifteregister
LSB
U1
Komparator
+
-
OUT
MSB
Clok
C1
U1
OPAMP
+
-
OUT
0
1 2Uin
x BitA/D
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 33 af 47
Orcad simulering af en D/A konverter.
Her er igen vist en ORCAD-simulering af en D/A-konverter. Der er her brugt en TTL-tæller, en
74393.
For at få ORCAD til at køre skal man ind i Simulating Settings, / Options / Gate Level Simulations,
og tvinge alle tællerens FF’s til at være 0 som startværdi.
Grafen ser således ud!!
0
R6
20k
0
R9
10k
R7
10k U2
OPAMP
+
-
OUT
U1A
74393
1 3456
2
A QAQBQCQDC
LR
R10 20k
CLKDSTM1OFFTIME = .5mS
ONTIME = .5mSDELAY =
STARTVAL = 0OPPVAL = 1
R12
1k
R3
10k
R4
20k
0
0
R2
20k
R11
1k
U3
OPAMP
+
-
OUT Uout
R5
10k
R1
20k
VR8
20k
Time
0s 5ms 10ms 15ms 20ms
V(Uout)
0V
1.0V
2.0V
3.0V
4.0V
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 34 af 47
Et eksempel på en digital styret
analog udgang. Vha. switchene i
4066 forbindes en kombination af
modstandene til en reference-
spænding.
Der kan på denne måde genereres
udgangsspændinger fra 0 til -7,5
Volt, med spring på 0,5 Volt.
Kredsløbet kan også bruges til at
lave digital styret
signalforstærkning.
Kilde: Elrad 1990, Heft 6
Principdiagram for ovenstående kredsløb.
Opgave:
Undersøg kredsen 4066
Her et andet kredsløb.
Bemærk, at kontakterne er åbne ved
lav på de digitale indgange!
Kilde: Elrad 1990, Heft 6
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 35 af 47
Her et principdiagram af
Ovenstående!
Et
eksempel
på en 6-bit
DA-
konverter
Princip-diagram for
ovenstående.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 36 af 47
Serielle konvertere:
I vores Arduino chip, ATMEGA328P er der indbygget A/D-konvertering. Men ingen D/A.
Det kan evt. laves med et R2R-netværk, men det vil tage mange pins.
Men der findes eksterne løsninger, dvs. ICér, der kan monteres sammen med UC-en.
For at spare på benforbruget i en uC, kan man vælge IC-er, der forbindes og overfører data til eller
fra UC-en via en seriel busforbindelse.
Og det sker på en bestemt måde, beskrevet i en såkaldt protokol. Der findes flere typer protokoller!
TLC549, A/D-konverter
TLC549 er en lille A/D konverter i en 8 bens DIL hus. Det er en 8 bit konverter, beregnet til brug
sammen med en microcontroller. Dvs. den kan konvertere en spænding mellem fx 0 og 5 Volt til et
tal mellem 0 og 255.
En konvertering startes ved at controlleren sætter CS lav. CS står for ”Chip Select”.
De 8 bit kommer serielt ud på ben 6. Hver gang microcontrolleren sætter et clock-signal høj, sætter
TLC549 næste bit ud på dens Data-pin.
Blokdiagram for TLC549
Clockpulserne og dataene ses på næste skitse: Princippet kaldes ” Bitbanging”.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 37 af 47
Pin outline:
Her er det forsøgt
at tegne et
blokdiagram over
TLC549.
Kode, der kan bruges til 8051-uC-en.
R5 bruges som tæller, så der kan genereres 8
Clock-pulser. Data skiftes ind i A-registeret fra
C-bittet.
TLC_549:
Setb CS
Mov R5, #8 ; R5 er tæller.
Clr A
Clr Clk ; Clocken lav.
Clr CS ; Enable Chippen.
Loop:
Mov C, Data ;Læs data ind i C-bit
Setb Clk
Nop
Clr Clk
RLC A ;Roter ind i Acc
DJNZ R5, Loop ; gentag hvis > 0.
Setb CS ; Disable Chip.
Ret
Her en oversigt over andre konverter-kredse:
LSB
6
8
1
5
Uref ->= 0 Volt
MSB
VCC, 5 V
Uref +<= 5 Volt
/ CS
Analog in (0 til 5 V )
3
Data out, Seriel
7
U2A1 2
Clk
TLC549
4
Kon-
verterlogik
Clk
Skifteregister 8 Bit
U1A
1
23
0
Chip select
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 38 af 47
Analog til Digital konverter: Digital til analog konverter:
TLC1549 svarer til TLC549, men er en 10 bit-
konverter.
ADC0804, 8 bit parallel
MAX548, MAX549, 3 wire, 8 bit.
LTC1257, 12 bit / CYPAX.
MAX518, 2 wire DAC, ca. 50 kr. / Farnell Til
I2C-bussen.
Opgave:
En Microcontroller skal hente en analog spænding ind fra et potentiometer via en TLC549 /
TLC1549, og vise spændingen på et LCD-display med 2 decimaler.
Brug et Kit med display, - og forbind det til A/D-konverteren på et fumlebrædt.
Udbyg derefter opstillingen, så den målte spænding tillige vises på et analogt ( evt. digitalt ) display
via en MAX548 D/A-konverter.
Se blokdiagram herunder:
Dokumenter!
Blokdiagram over
testopstillingen
For info om MAX548,
se senere!
Se efterfølgende for info om TLC549 og MAX548.
Timingdiagram for TLC549:
Bus
Display
LCD-Display
Uc
Analog
MAX548TLC549
Pot
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 39 af 47
Når Cs går lav,
starter
konverteringen.
Det tager max
18 ms, hvorefter
MSB (A7) kan
læses på Data
Out.
De resterende 7 bit, A6-A0, clockes ud på Data Out, på et faldende clocksignal.
Når alle data er sendt ud, skal CS gå høj i en periode, mindst på 25 uS for at starte en ny
konvertering.
Clock-frekvens max 1 MHz
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 40 af 47
Flowchart eksempel for konvertering og læsning
af data fra TLC549!
TLC549, Start
Clr Clk
Clr CS
Pause
Setb CS
Clr CS
Clr A
Setb Clk
Nop, Nop
Clr Clk
Datapin Equ P3.2
CS Equ P3.3
Datapin
lav ?
Setb Acc.7
Setb Clk
Nop, Nop
Clr Clk
Datapin
lav ?
Setb Acc.6
Nej
Nej
Ja
Ja
Osv. Indtil 8 gange
MAX548 D/A-konverter
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 41 af 47
Max 548 er en 8 bit Dual output DAC. Dvs. den indeholder 2 D/A-
konvertere. Den arbejder på 5 Volt. Output er fra 0 til 5 volt.
Den har 2 stk R2R-netværk indbygget.
Rout = 33 KOhm, - som derfor kræver stor ri på den efterfølgende
kreds.
Pin 6: Skal til +5 Volt hvis ikke brugt!
Pin 5: Data clockes ind på positiv clocksignal.
Her en principskitse for Max548
En kondensator på 0,2nF til 1 nF på Uout kan forhindre glitches.
Konverteren arbejder med 3-wire styring, ( kompatibel med SPI & Microwire )
Kredsen har latch´d input.
Dvs. hvis den ”fodres” med
en 8 bit binær værdi, holder
den den tilsvarende ud-
gangsspænding indtil ny
data læses ind.
Max548 skal kontrolleres
med 16 bit, eller 2 x 8 bit
ord @ max 10 MHz. Den
første byte, der sendes til
den er en kontrolbyte, den
anden er Data.
Begge DAC – registre kan updates samtidig.
Input register kan updates, uden at der overføres til DAC x register.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 42 af 47
/LDAC gående lav kan loade DAC fra Inputregister, hvis det vælges i kontrolordet.
( C1 = 1, C0 = 0 ).
Ved Poweron er alle registre = 0, Dvs. det ikke er nødvendigt at initiere den.
Kontrolordet
Max548 skal for hver operation have tilsendt 2 byte. Et kontrol-ord og en Data-byte.
Kontrolordet bestemmer hvordan konverteren skal reagere på næste byte. Dvs. valg af hvilke input-
registre, der skal opdateres.
Do
nt
care
Do
nt
care
Do
nt
care
0 =
Po
wer
UP
mo
de
??
1 =
Po
wer
DO
WN
Mo
de
1 =
DA
C r
eg
Lo
ad e
nab
le.
0 =
DA
C u
p-
dat
e p
å /C
S.
1 =
Ad
ress
erer
DA
C B
1 =
Ad
ress
erer
DA
C A
Dat
a B
it 7
Dat
a B
it 7
x x x C2 C1 C0 A1 A0 D7 D6 D5 D4 D3 D2 D1 D0 Før-
ste bit
Sidste
bit
Der behøver ikke være ophold mellem de to Byte.
Send fx:
Gør /CS lav,
Send x x x 0 1 0 B A + ( D7 – D0 )
Gør /CS Høj.
Værdien i Data D7 til D0 sendes til DAC b, hvis B er 1, til DAC A, hvis A er 1, eller til begge ved 1
1.
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 43 af 47
Udgangsspændingen Uout:
𝑈𝑜𝑢𝑡 = 5 ∗ (𝐷𝑎𝑡𝑎𝑣æ𝑟𝑑𝑖
256) [𝑉𝑜𝑙𝑡]
Sendes fx værdien 113 decimal til konverteren fås en udgangsspænding på:
𝑈𝑜𝑢𝑡 = 5 ∗ (113
256) [𝑉𝑜𝑙𝑡] = 2,207 [𝑉𝑜𝑙𝑡]
Blokskema:
Her er det forsøgt at lave et blokskema over indmaden i MAX548, og hvordan den reagerer på data
!
Men det har ikke været sådan ligetil! Vi får se, om det er rigtigt!
Eller?
364
5
1 2
U_out_A
U_out_B
A1
A0
C1
C0/CS
D_IN
Clk
Input Skifte-Register A
Og R2R net B
Og R2R net A
DAC Register
DAC Register
Input Skifte-Register B
8 Bit
Bus
8 BitBus
/Valle
MAX 548
Parallel
Load
Bit i kontrol-ord
R_out ~ 33 KOhm
364
5
1 2
364
5
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 44 af 47
Håber, det er rigtigt!! Får vi se ved test!!
Kode:
Strategi:
Allerførst gøres Chip Select lav.
Først sendes et kontrolord til MAX_548, vist nok lig med 0000 10BA, hvor A = 1 hvis man ønsker
at sende en værdi til output A. Tilsvarende for output B
Derefter sendes data til MAX_548 D/A-konverter
Og til slut gøres CS høj igen.
Her et forsøg på at lave noget kode til at styre den:
;Def af pins
Max_548_Clk equ P3.0 ; pin 5, Clock
Max_548_Cs Equ P3.1 ; pin 3, Chipselect, aktiv lav
Max_548_Data Equ P3.2 ; pin 4, Data
; Max_548 OutA Pin 2, Analog ud
; Max_548 OutB Pin 7, Analog ud
; / Ldac Pin 6, Forbindes til plus
; Def af Registre brugt:
; Max_548_Data i R0
; Max_548_counter i R5
; bruger Acc.
Send:
Clr Max_548_CS ; Gør Chip Select lav
Mov A, #kontrolkode ; vist nok = 000010BA
Call Send_8
9
108
12
1311
1122
13
364
5
1 2
U_out_A
U_out_B
A1
A0
C0 C1/CS
D_IN
Clk
Input Skifte-Register A
Og R2R net B
Og R2R net A
DAC Register
DAC Register
Input Skifte-Register B
8 Bit
Bus
8 BitBus
/Valle
MAX 548
9
108 Parallel
Load
Bit i kontrol-ord
R_out ~ 33 KOhm
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 45 af 47
Mov A, R0 ; data fra Reg R0 sendes
Call Send_8
Setb Max_548_CS ; Gør Chip Select høj igen
Ret
;--------------------------------------------
Send_8: ; sender 8 bit I reg A
Mov R5, #8 ; tæller I reg 5
Send_8_a:
RLC A ; roter bit 8 ud i Cy
Mov Max_548_Data, C ; Cy til Datapin
Setb Max_548_Clk ; Clock-signal
Nop
Nop
Nop
Clr Max_548_Clk
Nop
Nop
Nop
Djnz R5, Send_8_a
Ret
; ---------------------------------------------------------
Eller man kan generere en puls via et call til subrutine:
PULSE: SETB SCLK
MOV R3,#2
PULS1: DJNZ R3,PULS1
CLR SCLK
MOV R3,#2
PULS2: DJNZ R3,PULS2
RET
;----
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 46 af 47
Her en gaflet kode:
( koden er fundet på nettet, men ikke testet. Max549 er også en D/A-konverter! )
ORG 0000H
JMP MAIN
ORG 30H
; Def af pins
CS EQU P1.7 ; Chipselect
SCLK EQU P1.5 ; Clock
DIN EQU P1.6 ; Data
MAIN: MOV SP,#60H
FDOWN: CLR CS ; gør CS lav
F11: MOV R7,#08H ; Tæller defineres
MOV A,#255 ; Tal, der skal sendes
LOOP2: RLC A ; Roter bit 7 ud I CY
MOV DIN,C ; Cy til datapin
LCALL PULSE ; generer en puls på Clk
DJNZ R7,LOOP2 ; gentag 7 gange mere
CLR CS ; mener ikke dette er nødvendig !!
NOP ; do
SETB CS ; do fejl ??
LCALL T01MS ; do
MOV R7,#08H ; gør ny tæller klar
MOV A,#100 ; Ny værdi
LOOP3: RLC A
MOV DIN,C
LCALL PULSE
DJNZ R7,LOOP3
;
CLR CS ; færdig,
NOP
SETB CS
LCALL T01MS
; Slut
; -----------
; generer en klockpuls.
PULSE: SETB SCLK
MOV R3,#2
PULS1: DJNZ R3,PULS1
CLR SCLK
MOV R3,#2
PULS2: DJNZ R3,PULS2
RET
; pause 1 ms.
T01MS: MOV 38H,#02H
L1: MOV 39H,#0FFH
L2: DJNZ 39H,L2
DJNZ 38H,L1
RET
END
A/D - D/A Konvertere
Redigeret
30/1-2018
Af: Valle Thorø Side 47 af 47
Kilde: http://read.pudn.com/downloads33/sourcecode/embed/106163/max549/max549.ASM__.htm
Arduino
Arduino kan direkte læse en analog spænding, og konvertere den til 10 bit.
Dvs. opløsning fra 0 til 5 Volt til et tal fra 0 til 1023. Dvs. spændings-step på 5/1023 Volt.
Men Analog output kan ikke direkte laves. De analoge output pinde, mærket med ~ er PWM-
output. Frekvensen er ca. 400 Hz, og opløsningen er på 8 bit, dvs. fra 0 til 255. !!
Se på Arduino D/A-korvertering med R2R-netværk:
http://www.instructables.com/id/Arduino-Audio-Output/
Med I2C-og PCF8591.
Se: http://tronixstuff.com/2013/06/17/tutorial-arduino-and-pcf8591-adc-dac-ic/
Brug evt. 74HC595 eller
74HCT595 8-bit serial-in, serial or
parallel-out shift register with out-
put latches
http://www.ritsumei.ac.jp/~piumarta/topics4/arduino-09.pdf
Se også: https://www.youtube.com/watch?v=bqfPZXEuyuc
( om brug af 74HC595 til at skabe flere outputs til Arduinoen! )
Input shiftregister: Brug fx 74HC165
Mål temperaturen med en DS1620og vis den LCD / PC-en. Der kan findes et bibliotek på nettet !!
DS1621 er en I2C temperaturkreds!! Biblioteket Wire.h