loeng 3: io seadmed

Post on 04-Jan-2016

55 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Loeng 3: IO seadmed

Artur Abels

Peamised IO seadmedTimer/countersSPI – serial peripheral interfaceUSART – universal synchronous/asynchronous

receiver/transmitterADC – analogue to digital converterPordid (Port A..G)

ADCADC 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

ADC kasutus

ADC kasutusADCl 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.

ADC IO registridLk 205-209 atmega169 datasheedis

ADC kasutusmallSeadistame 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.

Küsimusi

USARTSerial 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.

Sync vs AsyncSü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.

Sync vs AsyncAsü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 baud rate’i.

Selleks et aru saada millal tuleb esimene bitt, on olemas stop ja start bitid.

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

UART registridLk 170-174

UART kaudu saatmineInitsialiseerime 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 (Usart Data 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 (Transmit Complete) või UDRE (UDR Empty) bitt vastavas IO registris.

UART kaudu vastuvõtmineInitsialiseerime 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 (Receive Complete) UCSRA IO registris.

Loeme tulnud väärtuse UDR registrist ja ootame järgmist paketti.

UDR registerUDR (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.

Küsimusi

Timer/CounterLoendur. Suurendab oma ühe registri väärtust

ühe võrra mingi teatud intervalli tagant. Selle abil saab:

Lugeda palju aega on möödas mingist ajahetkest

Genereerida kindlate ajavahemikude tagant mingi sündmuse

Teha PWMJne.

Timer/Counter’idLugemise kiirus (prescaler) on seadistatav ka

IO registrite kaudu. T/C’d ei suuda lugeda suvalise sagedusega,

vaid suudavad lugeda prose sagedusega jagatud mingi PRESCALER väärtusega.

Kui taimer loeb maksimaalse väärtuseni siis alustab jälle nullist.

Timer/Counter’idAtmega169’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’de lisafunktsionaalsusOn võimalik seadistada T/C nii et see annaks

märku mingi etteantud väärtuseni jõudes (Compare match), või siis kui ta suureneb maksimumist ühe, ja seega saab nulliks (overflow)

Veel on võimalik seadistada T/C nii et eeltoodud sündmuste puhul muudaks see kindla mikrokontrolleri jala seisundit (kas paneks üheks, nulliks või muudaks jala seisundit, see on konfitav)

Pini muutmise funktsioonaalsuse abil on võimalik teha PWM.

T/C’de registridLk 89-92, 117-123, 135-142

Küsimusi

top related