Formål
Formålet med denne øvelse er at lave en
device driver til D/A converteren som sidder på Add-on boardet. Typen er en
DAC7612 fra TI (Burr-Brown). På et embedded board finder man ofte enheder med
SPI interface, såsom A/D converter, SD-kort, EPROM, Serial Flash mm. Når vi
skal tilgå disse enheder fra en device driver skal vi benytte Linux’s SPI
sub-system. SPI host’en er en del af processoren og processor leverandøren vil
typisk levere denne, således at vi kan koncentere os om at lave SPI device driveren,
til den enhed som vi tilslutter. For at gøre tingene lidt nemmere, får I
udleveret source koden til A/D konverteren på boardet, I kan benytte denne som
skabelon for jeres D/A konverter driver.
Øvelses Steps
Med udgangspunkt i ADS7870 driveren skal du
lave en driver som implementerer en skrivning til en D/A konverter (DAC7612).
Den brugte D/A konverter har 2 kanaler, det er frit om driveren implementeres
for begge kanaler (vha 2 minor numre). For at test output fra DAC’en måler vi
den værdi med ADC’en. Der skal laves en spændingsdeler, da DAC'en har et
spændingsområde på 0-4.095 volt, mens ADC'en kun har et område på 0-2.047 volt
.
a) Byg spændingsdeler
§
Modstandsværdierne skal ligge i området 3K-300K Ohm.
- Valg af
modstande. 2 x 10kOhm.
§
Vælg modstandværdier, så ADC vil modtage 30-50% af
spændingen.
- Valget af
modstande vil give ADC ca. 50% af spændingen.
b) Test spændingsdeler via ADC.
§
Forbind spændingsdeleren til 5V, GND og en ADC port
§
Load ADS7880 driveren på kittet
§
Test om i modtager det rigtig resultat i forhold til
beregning.
Ved brug af 2x 10kOhm
ADC’en kan bruges i området 0-2.047V. Det
giver os et problem, da vores halv forsyningsspænding giver 2.5V.
Ved skifte bund modstanden i
spændingsdeleren til 5kOhm, skulle vi se en aflæsning på ca. 1.67V.
Program:
Vi forventede 1.67V men fik 1.720V hvilket
er fint grundet tolerancer.
c) Implementer Init
§
Find ud af hvordan DAC7612 er forbundet til OMAP’en
Det ses via DevKit schematic at DAC’en er forbundet
til SPI1, hvilket også kan ses ved navngivningen på nedestående schematic.
§
Find ud af DAC7612’s SPI karakteristika.
- Serial Interface Clock – Up to 20MHz.
- Timings diagram
Det er 12bit
data. Aflæses ved opadgående clock. Dette giver os mode 3.
- CS_n –
Aktiv lav
§
Indsæt værdier i board struct’en, samt ret evt number
of bit_per_word i spi_probe metoden.
§
Indsæt nogle debug printk’er således at du kan se om
det lykkedes at få spi ressourcen under init.
Ads7870.c:
Ads7870-spi.c:
§
Prøv det af på target ved at indsætte modulet og tage det
ud igen, check vha dmesg.
d) Sæt en default værdi
§
Prøv at skrive en fast værdi til DAC7612 i din init
funktion og skriv en anden i din exit funktion,
inden du kalder unregister().. Herved kan
du teste om du kan sætte en værdi på DAC’en.
§
Test på target.
Note til spi message længde Når man sender
en besked skal man angive dennes længde (msg.len). Hver besked som sendes
indeholder et antal words, som bruger ”bits_per_word” størrelsen. Er værdien af
”bits_per_word” ikke en byte størrelse, skal der rundes op til næste hele byte
størrelse. Eksempel: Vi vil sende 3 words hvor hver word er 9-bits ;
9-bits fylder 2 bytes => message.len = 3 * 2 (bytes/word) => message.len
= 6
Der måles hhv. 1V og 2V.
e) Implementer write
§
Lav write metoden, således at vi kan skrive en ascii
værdi til driverens node i filsystemet og herved sætte udgangen på DAC’en
tilsvarende.
§
Ved at læse en værdi fra ADC'en kan du udlæse
spændingen fra DAC'en. Bemærk at DAC'en har et spændingsområde på 0-4.095 volt,
mens ADC'en kun har et område på 0-2.047 volt.
DAC: Ved brug af echo ”value” > /dev/”driver navn-DAC” er følgende udlæst på
ADC: Ved brug af cat /dev/"driver navn-ADC"
1500.
500.
ADS7870 driveren har 3 lag:
§
ads7870.c : Character driver funktionerne
§
ads7870-core.c : ads7870 specifikke ting, f.eks
hvordan man henter en sampling fra A/D konverteren
§
ads-7870-spi.c : Beskæftiger sig kun med
formattering af data til SPI interfacet. Dette lag kan skiftes, hvis der f.eks
skal bruges I2C som fysisk medie i stedet.
§
Opgaven er extra og der gives ikke hjælp.
§
Udsend et sinus signal i området 1000-4000 Hz, via
DAC'en(DAC7612).
§
Afspil via et par små høretelefoner
Løsningen skal sende til mpc@iha.dk.
Først indsendte korrekt løsning giver Øl
eller Chokolade :-)
Ingen kommentarer:
Send en kommentar