1 / 25

Loeng 3: IO seadmed

Loeng 3: IO seadmed. Artur Abels. Peamised IO seadmed. Timer/counters SPI – serial peripheral interface USART – universal synchronous/asynchronous receiver/transmitter ADC – analogue to digital converter Pordid (Port A..G). ADC.

Download Presentation

Loeng 3: IO seadmed

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Loeng 3: IO seadmed ArturAbels

  2. Peamised IO seadmed • Timer/counters • SPI – serial peripheral interface • USART – universal synchronous/asynchronous receiver/transmitter • ADC – analogue to digital converter • Pordid (Port A..G)

  3. ADC • ADC on seade mõeldud pinge mõõtmiseks väljaviikude peal. Kui digitaalsisendil on 2 võimaliku seisundit – “0” ja “1”, siis ADC paneb vastavusse igale pingele vahemikus 0…Reference arvu vahemikus 0..1023. • S.t. kui me ühendame Reference 5 voldiga, ja anname jala peale näiteks 2 volti siis mõõtmise tulemuseks saame 2V*1024/5V = 409. • Kui mõõtmistulemuseks saime näiteks 100, ja Vreference on 5V siis tegelik pinge jala peal oli 100/1024*5V = 0.488V

  4. ADC kasutus

  5. ADC kasutus • ADCl on olemas omad IO registrid, mis seadistavad selle tööd, ja on olemus tulemuste IO registrid, kuhu sattub mõõtmise tulemus. • ADC abil on võimalik mõõta pinget 8 mikroskeemi jala peal. Selleks et valida mis jala peal pinget me tahame mõõta tuleb vastavalt seadistada ADC kirjutades selleks ettenähtud IO registritesse vastavad väärtused. Selleks et saada mõõtmistulemus kätte tuleb lugeda vastava IO registri väärtus.

  6. ADC IO registrid • Lk 205-209 atmega169 datasheedis

  7. ADC kasutusmall • Seadistame ADCd kirjutades vastavad väärtused IO registritesse ADMUX, ADCSRA ja ADCSRB. See mis väärtused tuleb kirjutada sõltub konkreetsest olukorrast, ja mikrokontrolleri ühendusskeemist. ILMA DATASHEEDITA JA MIKROKONTROLLERI ÜHENDUSSKEEMITA ÕIGEID VÄÄRTUSI TEADA EI SAA!! • Valime õige kanali, mille pinget me tahame teada, kirjutades õige väärtus ADMUX IO registrisse. Kirjutame ADSC (ADc Start Convertion) biti üheks ADCSRA registris. • Ootame kuni mõõtmine on valmis (sellest annab märku ADIF bit ADCSRA sees) • Loeme väärtust IO registritest ADCH ja ADCL.

  8. Küsimusi

  9. USART • Serial liides. On võimeline saatma baite kas sünkroonses režiimis või asünkroonses režiimis (nagu arvuti COM port). Seda seadet kasutategi plaadi programmeerimiseks. • Tavaliselt seda kasutatakse asünkroonselt (COM port) • Edasi me vaatleme ainult asünkroonset režiimi ja USARTi nimetame UARTiks (ilma Sta) et rõhutada et me räägime just asünkroonsest andmevahetusest.

  10. Sync vs Async • Sünkroonses režiimis on kasutusel veel CLOCK signaal, ja bitide saatmine/vastuvõtmine toimub just selle signaali järgi. • See tähendab et on olemas osapool mis genereerib clocki – MASTER. • Ja teine osapool mis peab tegema andmevahetust masteri poolt genereeritud clocki järgi – SLAVE.

  11. Sync vs Async • Asünkroonses režiimis clocki pole ja pole ma masterit ega slavi. Andmevahetus käib ette teatud kiirusega (BAUD RATE), mida saab valida. • Mõlemad andmevahetuse osapooled peavad seadistama samasuguse baudrate’i. • Selleks et aru saada millal tuleb esimene bitt, on olemas stop ja start bitid.

  12. UART (Async) • Suhtlus käib läbi 2 juhtme, Tx (transmit) ja Rx (receive). Arvuti Tx ühendatakse plaadi Rxga ja vastupidi. • Igal andmepaketil on järgmine struktuur

  13. UART registrid • Lk 170-174

  14. UART kaudu saatmine • Initsialiseerime UARTi kirjutades vastavad väärtused IO registritesse UCSRA, UCSRB, UCSRC ja UBRR. See mis väärtused te peate kirjutama sõltub tahetud BAUD rate’st, prose taktsagedusest ja tahetud paketiformaadist. • Kirjutame UDR (UsartData Register) sisse väärtuse mida me tahame saata, ja UART saadab selle. ME EI PEA KÄSITSI ANDMEPAKETI KOKKU PANEMA EGA PROGRAMMIST MUUTMA Tx JALA SEISUNDIT… UART SAADAB ISE. • Sellest et bait on saadetud annab märku TXC (TransmitComplete) või UDRE (UDR Empty) bitt vastavas IO registris.

  15. UART kaudu vastuvõtmine • Initsialiseerime UARTi kirjutades vastavad väärtused IO registritesse UCSRA, UCSRB, UCSRC ja UBRR. See mis väärtused te peate kirjutama sõltub tahetud BAUD rate’st, prose taktsagedusest ja tahetud paketiformaadist. • Oodata kuni tuleb andmepakett. Sellest annab märku bit RXC (ReceaveComplete) UCSRA IO registris. • Loeme tulnud väärtuse UDR registrist ja ootame järgmist paketti.

  16. UDR register • UDR (USART Data Register) on tegelikult 2 erinevat registrit. Üks kasutatakse lugemiseks (et lugeda vastuvõetud andmed) ja teist kirjutamiseks (et kirjutada saadetavaid andmeid). Nad mõlemad ON SAMA AADRESSIGA. • See on tehtud mugavuse pärast. Nii on võimalik andmed saata ja vastu võtta samal ajal. • Kuid nii saatmiseks kui ka vastuvõtmiseks kasutatakse sama IO registri aadress.

  17. Küsimusi

  18. Timer/Counter’id • Oletame et meil on vaja teada palju täpsel aega on möödas mingist hetkest alates. • AGA meil on programm mis arvutab midagi, ja me EI TEA mitu takti üks arvutus võtab (näiteks arvutuste ajaline suurus sõltub andmetest ja andmed saadakse reaalajas näiteks UART kaudu) • Seega me ei saa programmis arvutada mitu takti möödub iga arvutusega. • Mis teha ?

  19. Timer/Counter’id • On olemas riistvaraline lahendus – Timer/Counter’id. Nad mingi (seadistatava) sagedusega suurendavad väärtust. See väärtus on loetav vastavast IO registrist. • Lugemise kiirus (prescaler) on seadistatav ka loomulikult IO registrite kaudu (mis registrid need on loeme DOKIST) • Kui taimer loeb lõpuni alustab jälle nullist.

  20. Timer/Counter’id • Atmega169’l on 3 T/C’d -Timer/Counter0, Timer/Counter1 ja Timer/Counter2. • Timer/Counter0 ja Timer/Counter2 on 8bitilised, kuid Timer/Counter1 on 16 bitiline. • T/C’d ei suuda lugeda suvalise sagedusega, vaid suudavad lugeda prose sagedusega jagatud mingi PRESCALER väärtusega.

  21. T/C’de lisafunktsionaalsus • On võimalik seadistada T/Cnii et see annaks märku mingi etteantud väärtuseni jõudes (Comparematch), või siis kui ta suureneb maksimumist ühe võrra nulliks (overflow) • Veel on võimalik seadistada T/Cnii et eeltoodud sündmuste puhul muudaks protsessori jala seisundit (kas paneks üheks, nulliks või muudaks jala seisundit, see on konfitav) • Pini muutmise funktsioonaalsuse abil on võimalik teha PWM.

  22. T/C’de registrid • Lk 89-92, 117-123, 135-142

  23. Küsimusi

  24. Pordid • Seda me peaks juba teadma. • Küsimusi portide kohta?

  25. IO registrite lugemine ja kirjutamine • IN ja OUT instruktsioonid (seda me ka peaks teadma) – nendega on võimalik pääseda ligi IO registritele 0..63 (!!!!!). • Kui teil on vaja kirjutada registrisse suurema aadressiga siis kasutame ST instruktsiooni. Ja lugemiseks kasutame LD instruktsiooni. • Mis aadress on IO mingil IO registril saab vaadata DATASHEEDIST, kas teid huvitava IO seadme peatükist või “Register Summary” peatükist.

More Related