7.3. Oheisrautaa. DS1820

6
1 7.3. Oheisrautaa. DS1820 30.10.2007 ”Miksi eteenpäin pyrkivällä insinööriopettajalla rehtoriksi tullessaan, on aina päässään paljon muutakin kuin järkeä?” - Mr Maple Sisältö Yleistä 1-Wire-väylän lyhyt esittely DS1820 Funktiot Lämpötilan mittaus DS1820 anturin avulla. Ensimmäinen mallikoodi. Yleistä Yksi sulautettujen systeemien toimintoja on lämpötilan mittaus. Markkinoilta löytyy monenlaisia lämpötila-antureita eri olosuhteisiin ja eri käyttötarkoituksiin. Tässä on esitetty yksi tapa, lisää erilaisilla antureilla ADC-muunnosta käsittelevässä osassa. Tässä esitellään vain pieni esimerkki, jossa käytetään Dallasin DS1820-anturia. Kyseessä ei ole pelkkä digitaalinen lämpötila-anturi, vaan komponentti, joka sisältää AD-muuntimen ja 1-wire-liitäntäelektroniikkaa jolla se liitetään mikro-ohjaimeen. Lämpötilatieto saadaan sarjamuodossa 9-bittisenä lukuna. Lämpötila-alue on –55 C ... +125 C. Tässä yhteydessä ei esitellä itse komponenttia, voit tutustua lisätietoja sisältäviin dokumentteihin Dallasin kotisivulla. Perusfysiikkaa: lämpötilan muutos vaikuttaa esim. - NTC- (Negative Temperature Coefficient) ja - PTC- (Positive Temperature Coefficient) vastuksien resistanssiin. Tämä resistanssin muutos voidaan muuttaa jännitejakokytkennässä vastaavaksi jännitteen muutokseksi, joka puolestaan viedään analogia- digitaalimuuntimeen ja tieto muutetaan vastaavaksi lämpötilan arvoksi.

Transcript of 7.3. Oheisrautaa. DS1820

Page 1: 7.3. Oheisrautaa. DS1820

1

7.3. Oheisrautaa. DS1820 30.10.2007 ”Miksi eteenpäin pyrkivällä insinööriopettajalla rehtoriksi tullessaan, on aina päässään paljon muutakin kuin järkeä?” - Mr Maple Sisältö Yleistä 1-Wire-väylän lyhyt esittely DS1820 Funktiot Lämpötilan mittaus DS1820 anturin avulla. Ensimmäinen mallikoodi.

Yleistä Yksi sulautettujen systeemien toimintoja on lämpötilan mittaus. Markkinoilta löytyy monenlaisia lämpötila-antureita eri olosuhteisiin ja eri käyttötarkoituksiin. Tässä on esitetty yksi tapa, lisää erilaisilla antureilla ADC-muunnosta käsittelevässä osassa. Tässä esitellään vain pieni esimerkki, jossa käytetään Dallasin DS1820-anturia. Kyseessä ei ole pelkkä digitaalinen lämpötila-anturi, vaan komponentti, joka sisältää AD-muuntimen ja 1-wire-liitäntäelektroniikkaa jolla se liitetään mikro-ohjaimeen. Lämpötilatieto saadaan sarjamuodossa 9-bittisenä lukuna. Lämpötila-alue on –55 C ... +125 C. Tässä yhteydessä ei esitellä itse komponenttia, voit tutustua lisätietoja sisältäviin dokumentteihin Dallasin kotisivulla.

Perusfysiikkaa: lämpötilan muutos vaikuttaa esim.

- NTC- (Negative Temperature Coefficient) ja - PTC- (Positive Temperature Coefficient)

vastuksien resistanssiin. Tämä resistanssin muutos voidaan muuttaa jännitejakokytkennässä vastaavaksi jännitteen muutokseksi, joka puolestaan viedään analogia-digitaalimuuntimeen ja tieto muutetaan vastaavaksi lämpötilan arvoksi.

Page 2: 7.3. Oheisrautaa. DS1820

2

1-Wire-väylän lyhyt esittely 1-Wire-väylän kehittäjä on amerikkalainen Dallas-Maxim-yhtiö. 1-Wire-väylä on 2-suuntainen sarjamuotoinen tiedonsiirtoväylä, jossa väyläohjain kommunikoi yhtä datalinjaa ja yhteistä maatasoa käyttäen päätelaitteen kanssa. Päätelaitteita on saatavilla monipuolinen kirjo DS1820-anturin lisäksi. Niistä löytyy tietoja Dallasin kotisivuilta. Päätelaitteet, joita voi olla useita samassa linjassa, voivat ottaa tarvitsemansa energian datalinjasta tai erillisestä jännitesyötöstä. Jos anturi on liitetty mikro-ohjaimeeen, mikro-ohjain toimii herrana, master ja kaikki muut väylässä ovat orjia, slave. Päätelaitteet tunnistetaan komponentin sisään kirjoitetun koodin perusteella. Jokaisella väylään liitettävällä laitteella on 64-bittinen ID-koodi:

- 8-bittinen perhekoodi - 48-bittinen yksilöllinen koodi ja - 8-bittinen tarkistussumma, yhteensä 64 bittiä

Kaikki toiminteet voidaan kohdistaa ID-koodin avulla vain tietylle päätelaitteelle. One-Wire-standardi määrittää tietyt algoritmit päätelaitteiden ID-koodien selvittämiseen. 1-Wire-väylä on synkroninen sarjaväylä, jossa liikennöinti tapahtuu aina yhteen suuntaan, joko päätelaitteelta mikro-ohjaimelle tai päinvastoin. MCU voi lähettää myös sellaisia komentoja, jotka kohdistuvat samanaikaisesti kaikille väylällä oleville päätelaitteille. Väylän liikennöinti perustuu master-MCU:n väylälle lähettämiin kellopulsseihin. Tieto kulkee väylällä bitti kerrallaan sarjamuodossa siten, että bitin sijainti ajallisesti on aina n. 5. . .10 µs kuluttua kellopulssista. Näin jokaista bittiä vastaa yksi kellopulssi. Kellopulssien (ja näin myös bittien) välinen aika voi vaihdella tietystä minimiajasta (61 µs) äärettömään. Näin ollen, väylän tiedonsiirtokapasiteetti on maksimissaan 16393 bittiä sekunnissa. Kuten yllä mainittiin, päätelaitteet voivat ottaa käyttöenergiansa väylän datalinjasta. Tämän vuoksi datalinja on kytketty käyttöjännitteeseen (+ 5 V) n. 5 k vastuksen kautta. Päätelaitteet voivat varata energiaa sisäiseen kondensaattoriinsa korkeintaan 1 µA virralla. Mikäli päätelaitteen virrantarve on tätä suurempi, on sen otettava energiansa erillisestä käyttöjännitteen syötöstä.

Page 3: 7.3. Oheisrautaa. DS1820

3

DS1820 lämpötila-anturi

Kuva 2. DS1820-anturin jalkajärjestys. (Dallas Semiconductor) Liikennöinti Toiminta perustuu pulssin kestoon ja sen olemassaoloon. Kommunikointilinja on open drain (avokollektori) ja siten se tarvitsee ylösvetovastuksen. Slave odottaa linjalta käskyä, silloin linja on ”ylhäällä”. Master lähettää dataa linjalle vetämällä sen alas ja sillä se kertoo slavelle että databitti on tulossa. Master pitää linjaa alhaalla tai ylhäällä sen mukaan mitä ollaan tekemässä. Tietyn, kiinteän ajan kuluttua seuraava bitti lähetetään. Kun data on luettu slavelta masteriin, master lähettää lyhyen 1 usek low-pulssin ja sitten se vapauttaa linjan ja lukee linjaa tietyn ajan kuluttua.. Jos linja on alhaalla, niin slave lähettää low-bitin tai jos se on high, high-bit lähetetään. Sitten on viive ennen seuraavaa bitin kyselyä. Tietty protokolla resetoi slaven. Liikennöinti

- alkaa aina masterin antamalla reset-pulssilla = linja alas 480 us – 960 us - master siirtyy kuunteluun - jos orja on linjalla, se vastaa 15 – 60 us kuluttua vetämällä linjan alas 60 – 240

us ajaksi - master kirjoittaa ROM-toimintakoodin linjalle - master antaa muisti- tai ohjauskomennon - toiminta käynnistyy tai datan siirto alkaa

Dallas DS18S20 antaa tuloksen Celsius-asteen puolikkaina: ylemmässä tavussa on merkkibittejä ja alemmassa lämpötila.

Page 4: 7.3. Oheisrautaa. DS1820

4

DS1820 Funktiot by Jukka Pitkänen - vertaa AVR-ohjaimen + DS1820-anturin lähdekoodiin uint8_t OwReset(void); - alustaa anturin ja tarkastaa onko 'narun' päässä ketään - aina ennen käskyjen antamista DS1820 pitää resetoida - kun annetaan reset-signaali, DS1820 lopettaa bittien lähettämisen uint8_t OwReadByte(void); - lukee yhden tavun DS1820:n yhdeksän tavun muistista, aloittaa vähiten merkitsevän tavun vähiten merkitsevästä bitistä - ensimmäiset 2 tavua pitävät sisällään lämpötilan, joista ensimmäinen tavu lämpötilan ja toinen tavu tiedon onko lämpötila positiivinen vai negatiivinen 0 = positiivinen ja 1 = negatiivinen void OwWriteByte(uint8_t data); - funktiolla annetaan DS1820:lle komentoja, parametrina funktio saa suoritettavan käskyn uint8_t GetTemp(void); - GetTemp hoitaa anturin alustuksen, käskyjen antamisen ja lämpötilan hakemisen OwWriteByte(0xCC); - annetaan skip-komento, jolloin ei tehdä laitteiden etsintää, ts. tiedetään, että väylällä on vain yksi DS1820 OwWriteByte(0x44); - annetaan CONVERT T komento, jolloin DS1820 aloittaa lämpötilan mittaamisen/laskemisen OwWriteByte(0xCC); - jos antureita olisi enemmän kuin yksi, pitäisi suorittaa laitteiden etsintä ja tunnistus ym. - jos antureita on vain yksi, voidaan antaa skip-komento OwWriteByte(0xBE); - read scratchpad-komento, jolloin DS1820 valmistautuu lämpötilan lukemiseen ja alkaa lähettää bittejä - muistin lukeminen täytyy tehdä heti 0xBE komennon jälkeen

lsb = OwReadByte(); - luetaan anturin RAM-muistista (osoite 0) lämpötilan 8 alinta bittiä - muistin lukeminen aloitetaan vähiten merkitsevästä tavusta, siihen on talletettu lämpötila

msb = OwReadByte(); - lukeminen jatkuu seuraavasta tavusta (osoite 1), missä on tieto lämpötilan etumerkistä

Page 5: 7.3. Oheisrautaa. DS1820

5

Lämpötilan mittaus DS1820 anturin avulla. Ensimmäinen mallikoodi. /************************************************** ******** Project : DS1820_lampo.c Hardware: PV-M32, (4 MHz), PV-EMO Software: WinAVR-20070525 + AVRStudio 4.13 + SP1 Bu ild 557 Date : 04.06.2005 & 07042006 + 30.09.2007 + 18.10.0 7 Authors : ** DS1820 Funktiot by Jukka Pitkänen ** GetTemp-korjaus, Olli-Pekka Korpela ** ds1820.h by Ilari Nummila ** sovitus Pentti Vahtera Comments: DS1820 lämpötila-anturi PV-EMO-kortissa, eli IN_2 ts. PD.3 ja lcd on PORTA Tätä koodia saa käyttää vapaasti, omalla vastuulla. Parannusehdotukset -->> [email protected] m *************************************************** *******/ #include <avr/io.h> #include <util/delay.h> #include "lcd_tat.h" #include "ds1820.h" #define DELAY 1041 #define TAUSTAVALO 1<<0 // PC.0 void Tulosta(uint16_t temp_anturista); int main(void) { uint16_t temp_anturista = 0; LCD_init(1,0,0); // otetaan lcd käyttöön LCD_WriteString("Lämpötila:"); while(1) { temp_anturista = GetTemp(); // luetaan lämpötil atieto Tulosta(temp_anturista); _delay_loop_1(STARTDELAY_MS*10); } } void Tulosta(uint16_t temp_anturista) { DDRC |= TAUSTAVALO; PORTC |= TAUSTAVALO; uint16_t temp_apu = 0; if(temp_anturista < 0) LCD_WriteChar('-'); temp_apu = (temp_anturista*125)/255; // anturi palauttaa 9 bittiä, joista 9. bitti kerto o suunnan, ei // huomioitu tässä // resoluutio on 0,5 astetta per bitti // lämpö 0 C vastaa 0x00 // lämpö +125 C vastaa 0xFF = 255

Page 6: 7.3. Oheisrautaa. DS1820

6

LCD_SetCursorXY(0, 1); LCD_WriteUINT(temp_apu); if(temp_anturista % 2) LCD_WriteString(",5 C"); else LCD_WriteString(",0 C"); } Tarvitaan mukaan myös ds1820.h header-tiedosto. /* ds1820.h DS1820_lampomittaus_m32.c aputiedosto keskeneräinen, mutta toimii ainakin 4 MHz kiteellä, Ilari Nummila 07042006 tarvitaan myös ds1820.c */ extern uint8_t OwReset(void); extern uint8_t OwReadByte(void); extern int16_t GetTemp(void); extern void OwWriteByte(uint8_t data); // Lämpötila-anturin portti ja pinni #define TEMP_PORT PORTD #define TEMP_PIN PIND #define TEMP_REGISTER DDRD #define TEMP_BIT (1<<3) // Viiveelle asetus #define DELAYMHZ 4 // Viiveet, korjattavaa #define DELAY500 (150 * DELAYMHZ) #define DELAY60 (19 * DELAYMHZ) #define DELAY400 (115 * DELAYMHZ) #define DELAY50 (1 * DELAYMHZ) #define DELAY45 (3 * DELAYMHZ)

http://www.maxim-ic.com/appnotes.cfm/appnote_number/854 - Interfacing DS18x20 1-wire Temperature Sensor in MCU Environment http://www.mrsoft.fi/ - suomeksi http://www.sunpoint.net/~thermometer/