MPS E8 - LDD SPI


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.




Hints!
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.
ØL-opgave
§  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