Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat I2C szenzor Makan Gergely, Markella Máté, Mellár János, Mingesz Róbert 2016.04.15.
Termisztor használata
Termisztor Uref Rref A/D Ut Rt 𝑇= 1 1 𝑇 25 + 1 𝐵 25/85 ∙ln 𝑅 t 𝑅 25 𝑅 t = 𝑅 ref ∙ 𝑈 t / 𝑈 0 1− 𝑈 t / 𝑈 0 Ut A/D Rt 𝑇 25 =(273,15+25) K 𝐵 25/85 =3977 K 𝑅 ref = 𝑅 25 =10 kΩ
LM75 http://www.datasheetcatalog.org/datasheet/nationalsemico nductor/DS012658.PDF Kommunikáció: Bit-bang Beépített I2C periféria használata (SMbus)
SMBusHardverfelépítés – open-drain I/O SCL CLOCK CONTROL CROSSBAR FILTER SHIFT REGISTER SDA 7 6 5 4 3 2 1 FILTER Cél: inter integrated circuit két vezeték kétirányú szinkronizálás, adat és órajel címzés open drain, pull-up adatráta (100k, 400k) több master és slave, max eszközök száma hossz LM73 példa ADC-k, stb SDA CONTROL ACK
SMBusBuszrendszer Master 1 Master 2 Slave 1 Slave 2 SCL SDA Vdd=5V
SMBusTipikus tranzakció START 7-bit address and direction bit ACK 8-bit data NACK STOP SCL SDA A6 A0 R/W D7 D0
SMBusTipikus tranzakció Bármelyik vezetéket az adó és vevő is 0-ba tudja húzni SCK: csak a masterek húzhatják 0-ba Több byte is küldhető egy tranzakcióban ACK minden byte vételekor szükséges a vevőtől NACK: nem nyugtáz a vevő, vagy utolsó byte (master) STOP: a tranzakció befejezése
SMBusMaster (fogad) Slave (küld) IRQ IRQ IRQ IRQ S ADDR R A DATA A DATA N P SLAVE S ADDR R A DATA A DATA N P IRQ IRQ IRQ
BitBang Szükséges jelalakok emulálása OC kimenet: a 0 érték „győz” Főbb elemek: Várakozás (pl. 5 us, egyszerű ciklus) Impulzus kiadása (közben érték beolvasása) Bájtok forgatása (bitenként küldeni, beolvasni) Követni az idődiagramot
SMbus Adatlapok: Mikrovezérlő Szenzor IC Előadáson elhangzott példakód (1 byte beolvasása helyett 2 byte-ot kell beolvasni!) Port I/O konfigurálás SMbus órajel (config wizard segít) SMbus konfiguráció (Inhibit slave = true)
SMBusMechanizmus Master SFR-bitek STA, STO írása a jelek generáláshoz ACK írása és olvasása is SI flag (megszakítás is) 1-re vált, ha egy fázis kész A busz áll, amíg SI=1, folytatódik, ha töröljük Ezért mindig SI=0 előtt kell írni az SFR regisztereket
SMBusPéldák (nem teljes!) unsigned char SMBusIn(unsigned char address) { STO = 0; STA = 1; // start transfer while (!SI); // wait for start complete STA = 0; // manually clear STA SMB0DAT = (address << 1) | 1; // A6..A0 + read SI = 0; // continue while (!SI); // wait for complete if (!ACK) // not acknowledged, stop STO = 1; // stop condition bit SI = 0; // generate stop condition return; } ACK = 0; // NACK, last byte STO = 1; // stop condition bit SI = 0; // generate stop condition return SMB0DAT;
Érték megjelenítése A magasabb helyiérték: °C-ban a hőmérséklet
Feladatok
1. feladat Készítsen el egy a LM75-ön alapuló hőmérőt, ami °C-ban jelzi ki a hőmérsékletet! Részletezze a megvalósítás lépéseit, a kommunikációt oszcilloszkóppal is vizsgálja!
2. feladat Bővítse a programot a következő funkciókkal: Riasztás megadott hőmérséklet elérésekor Potenciométerrel szabályozható termosztát Maximum/minimum kijelzése Konstans/csökkenő/növekvő hőmérséklet kijelzése (a megoldás ne legyen érzékeny a zavarokra)
Következő óra: Vizsgafeladat Fejlesztőkörnyezet használata Timer Megszakítások I/O használata BCD kijelző használata ADC használata PCA használata Adatok átskálázása Oszcilloszkóppal végzett hibakeresés Használható eszközök: Excel, Silabs IDE, Config Wizard, toll